@qooxdoo/framework
Version:
The JS Framework for Coders
202 lines (159 loc) • 4.74 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2011 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:
* Christian Hagendorn (chris_schmidt)
************************************************************************ */
/**
* @ignore(qx.test.ui.tree.virtual.Leaf)
* @ignore(qx.test.ui.tree.virtual.Node)
*/
qx.Class.define("qx.test.ui.tree.virtual.AbstractTreeTest", {
type: "abstract",
extend: qx.test.ui.LayoutTestCase,
include: [qx.dev.unit.MMock, qx.test.ui.list.MAssert],
construct() {
super();
qx.Class.define("qx.test.ui.tree.virtual.Leaf", {
extend: qx.core.Object,
include: qx.data.marshal.MEventBubbling,
construct(name) {
super();
this.setName(name);
},
properties: {
name: {
check: "String",
event: "changeName",
apply: "_applyEventPropagation",
nullable: true
}
},
members: {
toString() {
return this.getName();
},
equals(item) {
return this.getName() === item.getName();
}
}
});
qx.Class.define("qx.test.ui.tree.virtual.Node", {
extend: qx.test.ui.tree.virtual.Leaf,
construct(name, children) {
super(name);
if (children == null) {
children = new qx.data.Array();
}
this.setChildren(children);
},
properties: {
children: {
check: "qx.data.Array",
event: "changeChildren",
apply: "_applyEventPropagation",
nullable: true
}
},
destruct() {
if (!qx.core.ObjectRegistry.inShutDown) {
var children = this.getChildren();
for (var i = 0; i < children.getLength(); i++) {
children.getItem(i).dispose();
}
children.dispose();
this.setChildren(null);
}
}
});
},
members: {
tree: null,
setUp() {
super.setUp();
this.tree = new qx.ui.tree.VirtualTree();
this.getRoot().add(this.tree);
},
tearDown() {
super.tearDown();
this.tree.dispose();
this.tree = null;
if (this.model != null) {
this.model.dispose();
this.model = null;
}
},
createModel(level) {
var root = new qx.test.ui.tree.virtual.Node("Root node");
this._createNodes(root, level);
return root;
},
createModelAndSetModel(level) {
this.model = this.createModel(level);
this.tree.setLabelPath("name");
this.tree.setChildProperty("children");
this.tree.setModel(this.model);
return this.model;
},
getVisibleItemsFrom(parent, openNodes) {
var expected = [];
if (parent.getChildren() != null) {
for (var i = 0; i < parent.getChildren().getLength(); i++) {
var child = parent.getChildren().getItem(i);
expected.push(child);
if (openNodes.indexOf(child) > -1) {
var otherExpected = this.getVisibleItemsFrom(child, openNodes);
expected = expected.concat(otherExpected);
}
}
}
return expected;
},
/*
---------------------------------------------------------------------------
HELPER METHODS TO CREATE A TREE STRUCTURE
---------------------------------------------------------------------------
*/
_createNodes(parent, level) {
if (level > 0) {
for (var i = 0; i < 5; i++) {
var item = new qx.test.ui.tree.virtual.Node(
"Node " + this.__getPrefix(parent) + i
);
parent.getChildren().push(item);
this._createNodes(item, level - 1);
this._createLeafs(item);
}
}
},
_createLeafs(parent) {
for (var i = 0; i < 5; i++) {
var child = new qx.test.ui.tree.virtual.Leaf(
"Leaf " + this.__getPrefix(parent) + i
);
parent.getChildren().push(child);
}
},
__getPrefix(item) {
var name = item.getName();
var prefix = "";
if (name.startsWith("Node")) {
prefix = name.substr(5, name.length - 5) + ".";
}
return prefix;
}
},
destruct() {
if (qx.Class.isDefined("qx.test.ui.tree.virtual.Leaf")) {
qx.Class.undefine("qx.test.ui.tree.virtual.Leaf");
}
if (qx.Class.isDefined("qx.test.ui.tree.virtual.Node")) {
qx.Class.undefine("qx.test.ui.tree.virtual.Node");
}
}
});