UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

442 lines (318 loc) 13.8 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2009 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) ************************************************************************ */ qx.Class.define("qx.test.data.controller.Object", { extend : qx.dev.unit.TestCase, members : { __label1: null, __label2: null, __model: null, __controller: null, setUp : function() { this.__label1 = new qx.ui.basic.Label(); this.__label2 = new qx.ui.basic.Label(); this.__model = new qx.ui.core.Widget(); this.__controller = new qx.data.controller.Object(this.__model); }, tearDown : function() { this.__model.dispose(); this.__label2.dispose(); this.__label1.dispose(); this.__controller.dispose(); }, testOneToOne: function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding does not work!"); }, testOneToTwo: function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); // Tie the label2s content to the zindex of the model this.__controller.addTarget(this.__label2, "value", "zIndex"); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("10", this.__label2.getValue(), "Binding2 does not work!"); }, testChangeModel: function() { // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); this.__controller.addTarget(this.__label2, "value", "zIndex"); // set an old zIndex this.__model.setZIndex(10); // create a new model with a different zIndex var newModel = new qx.ui.core.Widget(); newModel.setZIndex(20); // dispose the old model to check that the controller can handle that this.__model.dispose(); // set the new Model this.__controller.setModel(newModel); // test for the binding this.assertEquals("20", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("20", this.__label2.getValue(), "Binding2 does not work!"); newModel.dispose(); }, testRemoveOneBinding: function() { // set a zIndex this.__model.setZIndex(20); // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); this.__controller.addTarget(this.__label2, "value", "zIndex"); // test for the binding this.assertEquals("20", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("20", this.__label2.getValue(), "Binding2 does not work!"); // remove one target this.__controller.removeTarget(this.__label1, "value", "zIndex"); // set a new zIndex this.__model.setZIndex(5); // test for the binding this.assertEquals("20", this.__label1.getValue(), "Binding1 has not been removed!"); this.assertEquals("5", this.__label2.getValue(), "Binding2 has been removed!"); }, testRemoveUnexistantTarget: function() { // test some cases this.__controller.removeTarget(this.__label1, "value", "zIndex"); this.__controller.removeTarget(null, "AFFE", "AFFEN"); // set a target for testing this.__controller.addTarget(this.__label1, "value", "zIndex"); // test the same cases again this.__controller.removeTarget(this.__label1, "value", "zIndex"); this.__controller.removeTarget(null, "AFFE", "AFFEN"); }, testTowToTwo: function() { // set up two links this.__controller.addTarget(this.__label1, "value", "zIndex"); this.__controller.addTarget(this.__label2, "value", "visibility"); // set the values this.__model.setZIndex(11); this.__model.setVisibility("visible"); // test for the binding this.assertEquals("11", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("visible", this.__label2.getValue(), "Binding2 does not work!"); // set new values this.__model.setZIndex(15); this.__model.setVisibility("hidden"); // test again for the binding this.assertEquals("15", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("hidden", this.__label2.getValue(), "Binding2 does not work!"); }, testOneToOneBi: function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", true); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding does not work!"); // set a new content this.__label1.setValue("20"); // test the reverse binding this.assertEquals(20, this.__model.getZIndex(), "Reverse-Binding does not work!"); }, testOneToTwoBi: function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", true); // Tie the label2s content to the zindex of the model this.__controller.addTarget(this.__label2, "value", "zIndex", true); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("10", this.__label2.getValue(), "Binding2 does not work!"); // change one label this.__label1.setValue("100"); // test for the binding this.assertEquals(100, this.__model.getZIndex(), "Reverse Binding does not work!"); this.assertEquals("100", this.__label2.getValue(), "Binding2 does not work!"); // change the other label this.__label2.setValue("200"); // test for the binding this.assertEquals(200, this.__model.getZIndex(), "Reverse Binding does not work!"); this.assertEquals("200", this.__label1.getValue(), "Binding1 does not work!"); }, testChangeModelBi: function() { // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", true); this.__controller.addTarget(this.__label2, "value", "zIndex", true); // set an old zIndex this.__model.setZIndex(10); // create a new model with a different zIndex var newModel = new qx.ui.core.Widget(); newModel.setZIndex(20); // set the new Model this.__controller.setModel(newModel); // test for the binding this.assertEquals("20", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("20", this.__label2.getValue(), "Binding2 does not work!"); // set the zIndex in a label this.__label2.setValue("11"); // test for the bindings (working and should not work) this.assertEquals("11", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals(11, newModel.getZIndex(), "Reverse-Binding does not work!"); this.assertEquals(10, this.__model.getZIndex(), "Binding has not been removed."); newModel.dispose(); }, testConverting: function() { // create the options map var opt = { converter: function(value) { if (value > 10) { return "A"; } return "B"; } }; // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", false, opt); // set a zIndex and test it this.__model.setZIndex(11); this.assertEquals("A", this.__label1.getValue(), "Converter does not work!"); // set a zIndex and test it this.__model.setZIndex(5); this.assertEquals("B", this.__label1.getValue(), "Converter does not work!"); }, testConvertingBi: function() { // create the options map for source to target var opt = { converter: function(value) { if (value > 10) { return "A"; } return "B"; } }; // create the options map for target to source var revOpt = { converter: function(value) { if (value == "A") { return 11; } return 10; } }; // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", true, opt, revOpt); // set a zIndex and test it this.__model.setZIndex(11); this.assertEquals("A", this.__label1.getValue(), "Converter does not work!"); // set a zIndex and test it this.__model.setZIndex(5); this.assertEquals("B", this.__label1.getValue(), "Converter does not work!"); // change the target and check the model this.__label1.setValue("A"); this.assertEquals(11, this.__model.getZIndex(), "Back-Converter does not work!"); this.__label1.setValue("B"); this.assertEquals(10, this.__model.getZIndex(), "Back-Converter does not work!"); }, testChangeModelCon: function() { // create the options map var opt = { converter: function(value) { if (value > 10) { return "A"; } return "B"; } }; // Tie the labels content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", false, opt); this.__controller.addTarget(this.__label2, "value", "zIndex", false, opt); // set an old zIndex this.__model.setZIndex(3); // create a new model with a different zIndex var newModel = new qx.ui.core.Widget(); newModel.setZIndex(20); // set the new Model this.__controller.setModel(newModel); // test for the binding this.assertEquals("A", this.__label1.getValue(), "Binding1 does not work!"); this.assertEquals("A", this.__label2.getValue(), "Binding2 does not work!"); newModel.dispose(); }, testSetLateModel: function() { this.__controller.dispose(); // create a blank controller this.__controller = new qx.data.controller.Object(); // set the model this.__controller.setModel(this.__model); // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding does not work!"); }, testSetModelNull: function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); this.__label1.setValue("test"); // set the model of the controller to null and back this.__controller.setModel(null); // check if the values have been reseted this.assertNull(this.__label1.getValue()); this.__controller.setModel(this.__model); // set a new zIndex to the model this.__model.setZIndex(10); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding does not work!"); }, testCreateWithoutModel: function() { // create a new controller this.__controller.dispose(); this.__controller = new qx.data.controller.Object(); // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex"); // set a new zIndex to the model this.__model.setZIndex(10); this.__controller.setModel(this.__model); // test for the binding this.assertEquals("10", this.__label1.getValue(), "Binding does not work!"); }, testTargetArrayBi : function() { var selectbox = new qx.ui.form.SelectBox(); for (var i = 0; i < 10; i++) { selectbox.add(new qx.ui.form.ListItem("item " + i).set({model: i})); } this.__controller.addTarget(selectbox, "modelSelection[0]", "zIndex", true); // selectbox --> model selectbox.setSelection([selectbox.getSelectables()[6]]); this.assertEquals(6, this.__model.getZIndex()); // model --> selectbox this.__model.setZIndex(3); this.assertEquals(3, selectbox.getSelection()[0].getModel()); selectbox.dispose(); }, testDispose : function() { // Tie the label1s content to the zindex of the model this.__controller.addTarget(this.__label1, "value", "zIndex", true); // create a common startbase this.__label1.setZIndex(7); // dispose the controller to remove the bindings this.__controller.dispose(); // set a new zIndex to the model this.__model.setZIndex(10); // test if the binding has been removed and reseted this.assertEquals(null, this.__label1.getValue(), "Binding does not work!"); // set a new content this.__label1.setValue("20"); // test the reverse binding this.assertEquals(10, this.__model.getZIndex(), "Reverse-Binding does not work!"); } } });