UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

282 lines (240 loc) 7.91 kB
/** * @ignore(qx.test.ListItem) */ qx.Class.define("qx.test.data.controller.ListReverse", { extend: qx.test.ui.LayoutTestCase, construct() { super(); // 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 }, readOnly: { check: "Boolean", init: false, event: "changeReadOnly" } } }); }, members: { __list: null, __controller: null, __data: null, __model: null, __delegate: null, setUp() { 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() { return new qx.test.ListItem(); } }; this.__controller = new qx.data.controller.List(); }, tearDown() { this.flush(); this.__controller.dispose(); this.__controller = null; this.__model.dispose(); this.__model = null; this.__data = null; this.__list.dispose(); }, testStringListModel() { 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() { 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() { 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() { 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() { 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); } } } });