@qooxdoo/framework
Version:
The JS Framework for Coders
237 lines (185 loc) • 5.1 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 : function()
{
this.base(arguments);
qx.Class.define("qx.test.ui.tree.virtual.Leaf",
{
extend : qx.core.Object,
include : qx.data.marshal.MEventBubbling,
construct : function(name)
{
this.base(arguments);
this.setName(name);
},
properties :
{
name :
{
check : "String",
event : "changeName",
apply : "_applyEventPropagation",
nullable : true
}
},
members :
{
toString : function() {
return this.getName();
},
equals : function(item) {
return this.getName() === item.getName();
}
}
});
qx.Class.define("qx.test.ui.tree.virtual.Node",
{
extend : qx.test.ui.tree.virtual.Leaf,
construct : function(name, children)
{
this.base(arguments, 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 : function()
{
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 : function()
{
this.base(arguments);
this.tree = new qx.ui.tree.VirtualTree();
this.getRoot().add(this.tree);
},
tearDown : function()
{
this.base(arguments);
this.tree.dispose();
this.tree = null;
if (this.model != null) {
this.model.dispose();
this.model = null;
}
},
createModel : function(level)
{
var root = new qx.test.ui.tree.virtual.Node("Root node");
this._createNodes(root, level);
return root;
},
createModelAndSetModel : function(level)
{
this.model = this.createModel(level);
this.tree.setLabelPath("name");
this.tree.setChildProperty("children");
this.tree.setModel(this.model);
return this.model;
},
getVisibleItemsFrom : function(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 : function(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 : function(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 : function(item)
{
var name = item.getName();
var prefix = "";
if (name.startsWith("Node")) {
prefix = name.substr(5, name.length - 5) + ".";
}
return prefix;
}
},
destruct : function() {
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");
}
}
});