@qooxdoo/framework
Version:
The JS Framework for Coders
275 lines (228 loc) • 7.79 kB
JavaScript
/**
* @ignore(qx.test.ListItem)
*/
qx.Class.define("qx.test.data.controller.ListReverse",
{
extend : qx.test.ui.LayoutTestCase,
construct : function() {
this.base(arguments);
// define a test class
qx.Class.define("qx.test.ListItem",
{
extend : qx.ui.core.Widget,
implement : [qx.ui.form.IModel],
include : [qx.ui.form.MModelProperty],
properties :
{
label : {
check : "String",
init: "label",
event : "changeLabel"
},
icon : {
check : "String",
init : "icon",
event : "changeIcon"
},
child : {
check : "qx.test.ListItem",
event: "changeChild",
nullable: true
},
children : {
event : "changeChildren",
nullable: true
}
}
});
},
members :
{
__list: null,
__controller: null,
__data: null,
__model: null,
__delegate: null,
setUp : function()
{
this.__list = new qx.ui.form.List();
// create the model
this.__data = [];
for (var i = 0; i < 5; i++) {
this.__data.push("item" + i);
}
// create a new array
this.__model = new qx.data.Array(this.__data);
this.__delegate = {
createItem : function() {
return new qx.test.ListItem();
}
};
this.__controller = new qx.data.controller.List();
},
tearDown : function()
{
this.flush();
this.__controller.dispose();
this.__controller = null;
this.__model.dispose();
this.__model = null;
this.__data = null;
this.__list.dispose();
},
testStringListModel : function()
{
this.__delegate.bindItem = function(controller, item, id) {
controller.bindDefaultProperties(item, id);
controller.bindProperty("", "label", null, item, id);
controller.bindPropertyReverse("", "label", null, item, id);
controller.bindPropertyReverse("", "icon", null, item, id);
};
this.__controller.set({
target: this.__list,
delegate: this.__delegate,
iconPath: "",
model: this.__model
});
// check for the binding model --> target
var items = this.__list.getChildren();
for (var i = 0; i < items.length; i++) {
this.__model.setItem(i, "abc" + i);
this.assertEquals("abc" + i, items[i].getLabel());
};
// check for the binding target(label) --> model
for (var i = 0; i < items.length; i++) {
items[i].setLabel("affe" + i);
this.assertEquals(items[i].getLabel(), this.__model.getItem(i));
}
// check for the binding target(icon) --> model
for (var i = 0; i < items.length; i++) {
items[i].setIcon("AFFE" + i);
this.assertEquals(items[i].getIcon(), this.__model.getItem(i));
}
// invoke a removing and setting of the bindings with the new bindItem
this.__delegate.bindItem = function(controller, item, id) {
controller.bindProperty("", "label", null, item, id);
};
this.__controller.update();
// check for the removed binding target(icon) --> model
for (var i = 0; i < items.length; i++) {
items[i].setIcon("123-" + i);
this.assertEquals("AFFE" + i, this.__model.getItem(i));
}
},
testStringListModelInitModelPrior : function()
{
this.__delegate.bindItem = function(controller, item, id) {
controller.bindProperty("", "icon", null, item, id);
controller.bindPropertyReverse("", "icon", null, item, id);
};
this.__controller.set({
target: this.__list,
delegate: this.__delegate,
iconPath: "",
model: this.__model
});
// check for the binding model --> target
var items = this.__list.getChildren();
for (var i = 0; i < items.length; i++) {
this.assertEquals("item" + i, items[i].getIcon());
};
},
testStringListModelInitTargetPrior : function()
{
this.__delegate.bindItem = function(controller, item, id) {
controller.bindPropertyReverse("", "icon", null, item, id);
controller.bindProperty("", "icon", null, item, id);
};
this.__controller.set({
target: this.__list,
delegate: this.__delegate,
iconPath: "",
model: this.__model
});
// check for the binding model --> target
var items = this.__list.getChildren();
for (var i = 0; i < items.length; i++) {
this.assertEquals("icon", items[i].getIcon());
};
},
testStringListModelDeepTarget : function()
{
this.__delegate.bindItem = function(controller, item, id) {
controller.bindProperty("", "child.label", null, item, id);
controller.bindPropertyReverse("", "child.label", null, item, id);
};
this.__delegate.configureItem = function(item) {
item.setChild(new qx.test.ListItem());
};
this.__controller.set({
target: this.__list,
delegate: this.__delegate,
iconPath: "",
model: this.__model
});
// check for the binding model --> target
var items = this.__list.getChildren();
for (var i = 0; i < items.length; i++) {
this.__model.setItem(i, "abc" + i);
this.assertEquals("abc" + i, items[i].getChild().getLabel());
};
// check for the binding target(label) --> model
for (var i = 0; i < items.length; i++) {
items[i].getChild().setLabel("affe" + i);
this.assertEquals(items[i].getChild().getLabel(), this.__model.getItem(i));
}
// get rid of the created items
for (var i = 0; i < items.length; i++) {
items[i].getChild().dispose();
items[i].setChild(null);
};
},
testStringListModelArrayTarget : function()
{
this.__delegate.bindItem = function(controller, item, id) {
controller.bindProperty("", "children[0].label", null, item, id);
controller.bindPropertyReverse("", "children[0].label", null, item, id);
};
this.__delegate.configureItem = function(item) {
var childItems = new qx.data.Array(new qx.test.ListItem(), new qx.test.ListItem());
item.setChildren(childItems);
};
this.__controller.set({
target: this.__list,
delegate: this.__delegate,
iconPath: "",
model: this.__model
});
// check for the binding model --> target
var items = this.__list.getChildren();
for (var i = 0; i < items.length; i++) {
this.__model.setItem(i, "abc" + i);
this.assertEquals("abc" + i, items[i].getChildren().getItem(0).getLabel());
};
// check for the binding target(label) --> model
for (var i = 0; i < items.length; i++) {
items[i].getChildren().getItem(0).setLabel("affe" + i);
this.assertEquals(items[i].getChildren().getItem(0).getLabel(), this.__model.getItem(i));
}
// check a change of the array order
for (var i = 0; i < items.length; i++) {
items[i].getChildren().reverse();
this.assertEquals(items[i].getChildren().getItem(0).getLabel(), this.__model.getItem(i));
}
// get rid of the created items
for (var i = 0; i < items.length; i++) {
if (items[i].getChildren().getItem(0)) {
items[i].getChildren().getItem(0).dispose();
}
items[i].getChildren().setItem(0, null);
if (items[i].getChildren().getItem(1)) {
items[i].getChildren().getItem(1).dispose();
}
items[i].getChildren().setItem(1, null);
items[i].setChildren(null);
};
}
}
});