UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

682 lines (586 loc) 16 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) ************************************************************************ */ /** * @ignore(qx.test.data.singlevalue.Array_MultiBinding) */ /** * Test-Class for testing the single value binding */ qx.Class.define("qx.test.data.singlevalue.Array", { extend: qx.dev.unit.TestCase, construct() { super(); // define a test class qx.Class.define("qx.test.data.singlevalue.Array_MultiBinding", { extend: qx.core.Object, construct() { this.setArray(new qx.data.Array(["one", "two", "three"])); }, destruct() { this.getArray().dispose(); var children = this.getChildren(); if (children != null) { children.dispose(); } }, properties: { child: { check: "qx.test.data.singlevalue.Array_MultiBinding", event: "changeChild", nullable: true }, children: { check: "qx.data.Array", event: "changeChildren", nullable: true, init: null }, name: { check: "String", event: "changeName", nullable: true }, array: { init: null, event: "changeArray" } } }); }, members: { __a: null, __b1: null, __b2: null, __label: null, setUp() { this.__a = new qx.test.data.singlevalue.Array_MultiBinding().set({ name: "a", children: new qx.data.Array() }); this.__b1 = new qx.test.data.singlevalue.Array_MultiBinding().set({ name: "b1", children: new qx.data.Array() }); this.__b2 = new qx.test.data.singlevalue.Array_MultiBinding().set({ name: "b2", children: new qx.data.Array() }); this.__label = new qx.test.data.singlevalue.TextFieldDummy(); }, tearDown() { this.__b1.dispose(); this.__b2.dispose(); this.__a.dispose(); this.__label.dispose(); }, testChangeItem() { // bind the first element of the array qx.data.SingleValueBinding.bind( this.__a, "array[0]", this.__label, "value" ); // check the binding this.assertEquals( "one", this.__label.getValue(), "Array[0] binding does not work!" ); // change the value this.__a.getArray().setItem(0, "ONE"); this.assertEquals( "ONE", this.__label.getValue(), "Array[0] binding does not work!" ); }, testChangeArray() { // bind the first element of the array qx.data.SingleValueBinding.bind( this.__a, "array[0]", this.__label, "value" ); // change the array itself this.__a.getArray().dispose(); this.__a.setArray(new qx.data.Array(1, 2, 3)); qx.log.Logger.debug(this.__a.getArray().getItem(0)); // check the binding this.assertEquals( "1", this.__label.getValue(), "Changing the array does not work!" ); }, testLast() { // bind the last element qx.data.SingleValueBinding.bind( this.__a, "array[last]", this.__label, "value" ); // check the binding this.assertEquals( "three", this.__label.getValue(), "Array[last] binding does not work!" ); // change the value this.__a.getArray().setItem(2, "THREE"); this.assertEquals( "THREE", this.__label.getValue(), "Array[last] binding does not work!" ); }, testPushPop() { // bind the last element qx.data.SingleValueBinding.bind( this.__a, "array[last]", this.__label, "value" ); // check the binding this.assertEquals( "three", this.__label.getValue(), "Array[last] binding does not work!" ); // pop the last element this.__a.getArray().pop(); // check the binding this.assertEquals( "two", this.__label.getValue(), "Array[last] binding does not work!" ); // push a new element to the end this.__a.getArray().push("new"); // check the binding this.assertEquals( "new", this.__label.getValue(), "Array[last] binding does not work!" ); }, testShiftUnshift() { // bind the last element qx.data.SingleValueBinding.bind( this.__a, "array[0]", this.__label, "value" ); // check the binding this.assertEquals( "one", this.__label.getValue(), "Array[last] binding does not work!" ); // pop the last element this.__a.getArray().shift(); // check the binding this.assertEquals( "two", this.__label.getValue(), "Array[last] binding does not work!" ); // push a new element to the end this.__a.getArray().unshift("new"); // check the binding this.assertEquals( "new", this.__label.getValue(), "Array[last] binding does not work!" ); }, testChildArray() { // create the objects this.__a.setChild(this.__b1); this.__b1.getArray().dispose(); this.__b1.setArray(new qx.data.Array("eins", "zwei", "drei")); this.__b2.getArray().dispose(); this.__b2.setArray(new qx.data.Array("1", "2", "3")); // bind the last element qx.data.SingleValueBinding.bind( this.__a, "child.array[0]", this.__label, "value" ); // check the binding this.assertEquals( "eins", this.__label.getValue(), "child.array[0] binding does not work!" ); // change the child this.__a.setChild(this.__b2); // check the binding this.assertEquals( "1", this.__label.getValue(), "child.array[0] binding does not work!" ); this.__b1.getArray().dispose(); this.__b2.getArray().dispose(); }, testChildren() { // create the objects this.__a.getChildren().push(this.__b1); this.__a.getChildren().push(this.__b2); // bind the element qx.data.SingleValueBinding.bind( this.__a, "children[0].name", this.__label, "value" ); // check the binding this.assertEquals( "b1", this.__label.getValue(), "children[0].name binding does not work!" ); // remove the first element this.__a.getChildren().shift(); // check the binding this.assertEquals( "b2", this.__label.getValue(), "children[0].name binding does not work!" ); // change the name of b2 this.__b2.setName("AFFE"); // check the binding this.assertEquals( "AFFE", this.__label.getValue(), "children[0].name binding does not work!" ); }, test2Arrays() { // create the objects this.__a.getChildren().push(this.__b1); this.__b1.getChildren().push(this.__b2); // bind the element qx.data.SingleValueBinding.bind( this.__a, "children[0].children[0].name", this.__label, "value" ); // check the binding this.assertEquals( "b2", this.__label.getValue(), "children[0].children[0].name binding does not work!" ); // rename the last element this.__b2.setName("OHJE"); // check the binding this.assertEquals( "OHJE", this.__label.getValue(), "children[0].name binding does not work!" ); }, testSplice() { // bind the first element qx.data.SingleValueBinding.bind( this.__a, "array[0]", this.__label, "value" ); // remove the first and add "eins" at position 0 var array = this.__a.getArray().splice(0, 1, "eins"); // check the binding this.assertEquals( "eins", this.__label.getValue(), "Array[last] binding does not work!" ); array.dispose(); }, testWrongInput() { var a = this.__a; var label = this.__label; // bind a senseless value this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[affe]", label, "value"); }, Error, null, "Affe not an array value." ); // bind empty array this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[]", label, "value"); }, Error, null, "'' not an array value." ); // bind 2 arrays this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[0][0]", label, "value"); }, Error, null, "array[][] not an array value." ); // bind an float this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[1.5]", label, "value"); }, Error, null, "1.5 not an array value." ); // bind strange value this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[[affe]]", label, "value"); }, Error, null, "'[[affe]]' not an array value." ); // test map in array this.assertException( function () { qx.data.SingleValueBinding.bind( a, "array[{name: 'a'}]", label, "value" ); }, Error, null, "'[affe]' not an array value." ); // test null in the array this.assertException( function () { qx.data.SingleValueBinding.bind(a, "array[null]", label, "value"); }, Error, null, "'null' not an array value." ); }, testLateBinding() { // create the precondition this.__a.getArray().dispose(); this.__a.setArray(new qx.data.Array()); // bind the last element qx.data.SingleValueBinding.bind( this.__a, "array[last]", this.__label, "value" ); // check the binding this.assertNull(this.__label.getValue(), "Late binding does not work!"); // set a value and check it this.__a.getArray().push("1"); this.assertEquals( "1", this.__label.getValue(), "Late binding does not work!" ); // set another value and check it this.__a.getArray().push("2"); this.assertEquals( "2", this.__label.getValue(), "Late binding does not work!" ); }, testRemoveArrayItem() { // bind the last element qx.data.SingleValueBinding.bind( this.__a, "array[last]", this.__label, "value" ); // check the binding this.assertEquals( "three", this.__label.getValue(), "Array[last] binding does not work!" ); // pop all 3 elements this.__a.getArray().pop(); this.__a.getArray().pop(); this.__a.getArray().pop(); // check the binding this.assertNull( this.__label.getValue(), "Array[last] binding does not work!" ); }, testBidirectional() { // two way binding // model.name <-- bind --> model.child.array[0] // create model: model.child.array var model = new qx.test.data.singlevalue.Array_MultiBinding(); model.setChild(new qx.test.data.singlevalue.Array_MultiBinding()); // set up the two way binding model.bind("name", model, "child.array[0]"); model.bind("child.array[0]", model, "name"); // set the value of the textfield model.setName("affe"); this.assertEquals( "affe", model.getChild().getArray().getItem(0), "affe not set in the model array." ); // set the value in the model model.getChild().getArray().setItem(0, "stadtaffe"); this.assertEquals( "stadtaffe", model.getName(), "stadtaffe not set in the model." ); // set the models name to null model.setName(null); this.assertEquals( null, model.getChild().getArray().getItem(0), "model array not reseted to initial." ); // set the model array item to null model.getChild().getArray().setItem(0, null); this.assertEquals(null, model.getName(), "model not reseted."); model.getChild().dispose(); model.dispose(); }, testDirect() { // bind the first element of the array qx.data.SingleValueBinding.bind( this.__a.getArray(), "[0]", this.__label, "value" ); // check the binding this.assertEquals( "one", this.__label.getValue(), "[0] binding does not work!" ); // change the value this.__a.getArray().setItem(0, "ONE"); this.assertEquals( "ONE", this.__label.getValue(), "[0] binding does not work!" ); }, testDirectTarget() { this.__label.setValue("affe"); // bind the first element of the array qx.data.SingleValueBinding.bind( this.__label, "value", this.__a.getArray(), "[0]" ); // check the binding this.assertEquals( "affe", this.__a.getArray().getItem(0), "[0] binding does not work!" ); // change the value this.__label.setValue("AFFE"); this.assertEquals( "AFFE", this.__a.getArray().getItem(0), "[0] binding does not work!" ); }, testChildrenDirect() { // create the objects this.__a.getChildren().push(this.__b1); this.__a.getChildren().push(this.__b2); // bind the element qx.data.SingleValueBinding.bind( this.__a.getChildren(), "[0].name", this.__label, "value" ); // check the binding this.assertEquals( "b1", this.__label.getValue(), "[0].name binding does not work!" ); // remove the first element this.__a.getChildren().shift(); // check the binding this.assertEquals( "b2", this.__label.getValue(), "[0].name binding does not work!" ); // change the name of b2 this.__b2.setName("AFFE"); // check the binding this.assertEquals( "AFFE", this.__label.getValue(), "[0].name binding does not work!" ); }, testTargetChildren() { // create the objects this.__a.getChildren().push(this.__b1); this.__a.getChildren().push(this.__b2); // bind the element this.__label.setValue("l"); qx.data.SingleValueBinding.bind( this.__label, "value", this.__a.getChildren(), "[0].name" ); // check the binding this.assertEquals( "l", this.__a.getChildren().getItem(0).getName(), "[0].name binding does not work!" ); // remove the first element this.__a.getChildren().shift(); // check the binding this.assertEquals( "l", this.__a.getChildren().getItem(0).getName(), "[0].name binding does not work!" ); } } });