@qooxdoo/framework
Version:
The JS Framework for Coders
601 lines (482 loc) • 14.9 kB
JavaScript
/* ************************************************************************
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() {
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() {
this.__model.dispose();
this.__label2.dispose();
this.__label1.dispose();
this.__controller.dispose();
},
testOneToOne() {
// 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() {
// 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() {
// 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() {
// 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() {
// 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() {
// 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() {
// 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() {
// 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() {
// 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() {
// create the options map
var opt = {
converter(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() {
// create the options map for source to target
var opt = {
converter(value) {
if (value > 10) {
return "A";
}
return "B";
}
};
// create the options map for target to source
var revOpt = {
converter(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() {
// create the options map
var opt = {
converter(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() {
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() {
// 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() {
// 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() {
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() {
// 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!"
);
}
}
});