@qooxdoo/framework
Version:
The JS Framework for Coders
318 lines (241 loc) • 8.81 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 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:
* Fabian Jakobs (fjakobs)
************************************************************************ */
/**
* Test widget children handling
*/
qx.Class.define("qx.test.ui.ChildrenHandling",
{
extend : qx.test.ui.LayoutTestCase,
members :
{
assertArrayEquals : function(expected, found, msg)
{
this.assertArray(expected, msg);
this.assertArray(found, msg);
this.assertEquals(expected.length, found.length, msg);
for (var i=0; i<expected.length; i++) {
this.assertIdentical(expected[i], found[i], msg);
}
},
_setChildren : function(parent, children)
{
parent.removeAll();
for (var i=0; i<children.length; i++) {
parent.add(children[i]);
}
this.flush();
this.assertArrayEquals(children, parent.getChildren());
},
testRemove : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var c1 = new qx.ui.core.Widget();
var c2 = new qx.ui.core.Widget();
var c3 = new qx.ui.core.Widget();
var children = [c1, c2, c3];
this._setChildren(parent, children);
parent.remove(c1);
this.assertArrayEquals([c2, c3], parent.getChildren(), "remove first");
this._setChildren(parent, children);
parent.remove(c2);
this.assertArrayEquals([c1, c3], parent.getChildren(), "remove middle");
this._setChildren(parent, children);
parent.remove(c3);
this.assertArrayEquals([c1, c2], parent.getChildren(), "remove last");
this._setChildren(parent, children);
c1.destroy();
c2.destroy();
c3.destroy();
parent.destroy();
},
testRemoveAll : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var c1 = new qx.ui.core.Widget();
var c2 = new qx.ui.core.Widget();
var c3 = new qx.ui.core.Widget();
var children = [c1, c2, c3];
this._setChildren(parent, children);
var removed = parent.removeAll();
this.assertArrayEquals([], parent.getChildren(), "remove last");
this.assertEquals(3, removed.length);
this.assertEquals(c1, removed[0]);
this.assertEquals(c2, removed[1]);
this.assertEquals(c3, removed[2]);
c1.destroy();
c2.destroy();
c3.destroy();
parent.destroy();
},
testRemoveNonChild : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var w1 = new qx.ui.core.Widget();
this.assertException(function() {
parent.remove(w1);
});
w1.destroy();
parent.destroy();
},
testRemoveAt : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var c1 = new qx.ui.core.Widget();
var c2 = new qx.ui.core.Widget();
var c3 = new qx.ui.core.Widget();
var w1 = new qx.ui.core.Widget();
var children = [c1, c2, c3];
this._setChildren(parent, children);
parent.removeAt(0);
this.assertArrayEquals([c2, c3], parent.getChildren(), "remove first");
this._setChildren(parent, children);
parent.removeAt(1);
this.assertArrayEquals([c1, c3], parent.getChildren(), "remove middle");
this._setChildren(parent, children);
parent.removeAt(2);
this.assertArrayEquals([c1, c2], parent.getChildren(), "remove last");
if (this.isDebugOn())
{
this._setChildren(parent, children);
this.assertException(function() {
parent.removeAt(-1);
}, qx.core.AssertionError, "", "remove at negative index");
}
if (this.isDebugOn())
{
this._setChildren(parent, children);
this.assertException(function() {
parent.removeAt(-1);
}, qx.core.AssertionError, "", "remove at negative index");
}
c1.destroy();
c2.destroy();
c3.destroy();
w1.destroy();
parent.destroy();
},
testAddBefore : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var c1 = new qx.ui.core.Widget();
var c2 = new qx.ui.core.Widget();
var c3 = new qx.ui.core.Widget();
var w1 = new qx.ui.core.Widget();
var w2 = new qx.ui.core.Widget();
var children = [c1, c2, c3];
this._setChildren(parent, children);
parent.addBefore(w1, c1);
this.assertArrayEquals([w1, c1, c2, c3], parent.getChildren(), "add new widget at begin");
this._setChildren(parent, children);
parent.addBefore(w1, c3);
this.assertArrayEquals([c1, c2, w1, c3], parent.getChildren(), "add new widget in the middle");
this._setChildren(parent, children);
if (this.isDebugOn())
{
var self = this;
this.assertException(function() {
parent.addBefore(w1, w2);
}, qx.core.AssertionError, "", "add new widget before non child");
this._setChildren(parent, children);
}
parent.addBefore(c1, c1);
this.assertArrayEquals([c1, c2, c3], parent.getChildren(), "add existing before itself");
this._setChildren(parent, children);
parent.addBefore(c3, c1);
this.assertArrayEquals([c3, c1, c2], parent.getChildren(), "add existing before first");
this._setChildren(parent, children);
parent.addBefore(c3, c2);
this.assertArrayEquals([c1, c3, c2], parent.getChildren(), "add existing in the middle");
this._setChildren(parent, children);
if (this.isDebugOn())
{
var self = this;
this.assertException(function() {
parent.addBefore(c3, w2);
}, qx.core.AssertionError, "", "add existing before non child");
this._setChildren(parent, children);
}
c1.destroy();
c2.destroy();
c3.destroy();
w1.destroy();
w2.destroy();
parent.destroy();
},
testAddAfter : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var c1 = new qx.ui.core.Widget();
var c2 = new qx.ui.core.Widget();
var c3 = new qx.ui.core.Widget();
var w1 = new qx.ui.core.Widget();
var w2 = new qx.ui.core.Widget();
var children = [c1, c2, c3];
this._setChildren(parent, children);
parent.addAfter(w1, c3);
this.assertArrayEquals([c1, c2, c3, w1], parent.getChildren(), "add new widget ar end");
this._setChildren(parent, children);
parent.addAfter(w1, c1);
this.assertArrayEquals([c1, w1, c2, c3], parent.getChildren(), "add new widget in the middle");
this._setChildren(parent, children);
if (this.isDebugOn())
{
var self = this;
this.assertException(function() {
parent.addAfter(w1, w2);
}, qx.core.AssertionError, "", "add new widget after non child");
this._setChildren(parent, children);
}
parent.addAfter(c1, c1);
this.assertArrayEquals([c1, c2, c3], parent.getChildren(), "add existing before itself");
this._setChildren(parent, children);
parent.addAfter(c1, c3);
this.assertArrayEquals([c2, c3, c1], parent.getChildren(), "add existing before last");
this._setChildren(parent, children);
parent.addAfter(c1, c2);
this.assertArrayEquals([c2, c1, c3], parent.getChildren(), "add existing in the middle");
this._setChildren(parent, children);
if (this.isDebugOn())
{
var self = this;
this.assertException(function() {
parent.addAfter(c1, w2);
}, qx.core.AssertionError, "", "add existing after non child");
this._setChildren(parent, children);
}
c1.destroy();
c2.destroy();
c3.destroy();
w1.destroy();
w2.destroy();
parent.destroy();
},
testDoubleAdd : function()
{
var parent = new qx.ui.container.Composite(new qx.ui.layout.Basic());
var children = [];
for (var i=0; i<4; i++)
{
children[i] = new qx.ui.core.Widget();
parent.add(children[i]);
}
this.assertArrayEquals(children, parent.getChildren());
// double add must move the child to the end!
var child = children[1];
parent.add(child);
qx.lang.Array.remove(children, child);
children.push(child);
this.assertArrayEquals(children, parent.getChildren());
parent.destroy();
}
}
});