@qooxdoo/framework
Version:
The JS Framework for Coders
636 lines (509 loc) • 16.7 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)
************************************************************************ */
qx.Class.define("qx.test.ui.layout.Flow", {
extend: qx.dev.unit.TestCase,
members: {
_container: null,
setUp() {
this.root = new qx.test.ui.layout.LayoutRoot();
this.flush();
},
tearDown() {
this.root.dispose();
var children = this._container.getLayoutChildren();
for (var i = 0, l = children.length; i < l; i++) {
this._container.remove(children[i]);
children[i].dispose();
}
this.root.remove(this._container);
this._container._getLayout().dispose();
this._container.dispose();
},
flush() {
qx.ui.core.queue.Manager.flush();
},
// test for bug #6818
testChangeThemeFromFlow() {
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
this._container = new qx.test.ui.layout.LayoutItem(200, 200);
this._container.setLayout(new qx.ui.layout.Flow());
this._container.add(c1);
this.root.add(this._container);
// change the theme should not throw an exception
this._container.setLayout(new qx.ui.layout.HBox());
},
testChildrenFitInLine() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
400,
50
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 100,
height: 50
},
c1.bounds
);
this.assertJsonEquals(
{
left: 100,
top: 0,
width: 100,
height: 50
},
c2.bounds
);
this.assertJsonEquals(
{
left: 200,
top: 0,
width: 100,
height: 50
},
c3.bounds
);
},
testAutoSize() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
this.flush();
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 300,
height: 50
},
container.bounds
);
// resize first
container.getLayoutChildren()[0].setHeight(60);
this.flush();
this.assertEquals(60, container.bounds.height);
this.assertEquals(60, container.getLayoutChildren()[0].bounds.height);
this.assertEquals(50, container.getLayoutChildren()[1].bounds.height);
},
testWrapThirdChild() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
250,
300
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(0, children[0].bounds.top);
this.assertEquals(0, children[0].bounds.left);
this.assertEquals(0, children[1].bounds.top);
this.assertEquals(100, children[1].bounds.left);
this.assertEquals(50, children[2].bounds.top);
this.assertEquals(0, children[2].bounds.left);
},
testAlignX() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
500,
300
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
layout.setAlignX("left");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(0, children[0].bounds.left, "align left");
this.assertEquals(100, children[1].bounds.left, "align left");
this.assertEquals(200, children[2].bounds.left, "align left");
layout.setAlignX("right");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(200, children[0].bounds.left, "align right");
this.assertEquals(300, children[1].bounds.left, "align right");
this.assertEquals(400, children[2].bounds.left, "align right");
layout.setAlignX("center");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(100, children[0].bounds.left, "align center");
this.assertEquals(200, children[1].bounds.left, "align center");
this.assertEquals(300, children[2].bounds.left, "align center");
},
testAlignXWithWrapping() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
80,
300
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(50, 50));
container.add(new qx.test.ui.layout.LayoutItem(60, 50));
container.add(new qx.test.ui.layout.LayoutItem(70, 50));
layout.setAlignX("right");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(30, children[0].bounds.left, "align right");
this.assertEquals(20, children[1].bounds.left, "align right");
this.assertEquals(10, children[2].bounds.left, "align right");
layout.setAlignX("center");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(15, children[0].bounds.left);
this.assertEquals(10, children[1].bounds.left);
this.assertEquals(5, children[2].bounds.left);
},
testLayoutAlignY() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(100, 60));
container.add(new qx.test.ui.layout.LayoutItem(100, 100));
container.add(new qx.test.ui.layout.LayoutItem(100, 40));
// reference
container.add(new qx.test.ui.layout.LayoutItem(100, 160));
layout.setAlignY("top");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(0, children[0].bounds.top);
this.assertEquals(0, children[1].bounds.top);
this.assertEquals(0, children[2].bounds.top);
layout.setAlignY("middle");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(50, children[0].bounds.top);
this.assertEquals(30, children[1].bounds.top);
this.assertEquals(60, children[2].bounds.top);
layout.setAlignY("bottom");
this.flush();
var children = container.getLayoutChildren();
this.assertEquals(100, children[0].bounds.top);
this.assertEquals(60, children[1].bounds.top);
this.assertEquals(120, children[2].bounds.top);
},
testChildAlignY() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 60).set({
alignY: "top"
});
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 100).set({
alignY: "middle"
});
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 40).set({
alignY: "bottom"
});
container.add(c3);
// reference
container.add(new qx.test.ui.layout.LayoutItem(100, 160));
this.flush();
this.assertEquals(0, c1.bounds.top);
this.assertEquals(30, c2.bounds.top);
this.assertEquals(120, c3.bounds.top);
},
testReversed() {
var layout = new qx.ui.layout.Flow().set({
reversed: false
});
var container = (this._container = new qx.test.ui.layout.LayoutItem(
400,
50
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
this.assertArrayEquals([c1, c2, c3], container.getLayoutChildren());
layout.setReversed(true);
this.flush();
this.assertArrayEquals([c1, c2, c3], container.getLayoutChildren());
this.assertEquals(200, c1.bounds.left);
this.assertEquals(100, c2.bounds.left);
this.assertEquals(0, c3.bounds.left);
},
testLineBreakAutoSize() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
container.add(new qx.test.ui.layout.LayoutItem(100, 50), {
lineBreak: true
});
container.add(new qx.test.ui.layout.LayoutItem(100, 50));
this.flush();
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 200,
height: 100
},
container.bounds
);
var children = container.getLayoutChildren();
this.assertEquals(0, children[0].bounds.top);
this.assertEquals(0, children[1].bounds.top);
this.assertEquals(50, children[2].bounds.top);
this.assertEquals(0, children[2].bounds.left);
},
testMargins() {
var layout = new qx.ui.layout.Flow().set();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: [10, 20, 30, 40]
});
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 360,
height: 90
},
container.bounds
);
this.assertJsonEquals(
{
left: 140,
top: 10,
width: 100,
height: 50
},
c2.bounds
);
this.assertEquals(260, c3.bounds.left);
},
testMarginXCollapse() {
var layout = new qx.ui.layout.Flow().set();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
300,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: [5, 10, 15, 20]
});
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: [10, 20, 30, 40]
});
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: [15]
});
container.add(c3);
this.flush();
// no Y collapsing of margins
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 300,
height: 50 + 40 + 50 + 30
},
container.bounds
);
this.assertEquals(20, c1.bounds.left);
this.assertEquals(160, c2.bounds.left);
},
testSpacingX() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
layout.setSpacingX(10);
this.flush();
this.assertEquals(320, container.bounds.width);
this.assertEquals(0, c1.bounds.left);
this.assertEquals(110, c2.bounds.left);
this.assertEquals(220, c3.bounds.left);
},
testSpacingXAndMarginCollapsing() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
null,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: 5
});
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: 5
});
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50).set({
margin: 15
});
container.add(c3);
layout.setSpacingX(10);
this.flush();
this.assertEquals(5 + 100 + 10 + 100 + 15 + 100, container.bounds.width);
this.assertEquals(5, c1.bounds.left);
this.assertEquals(5 + 100 + 10, c2.bounds.left);
this.assertEquals(5 + 100 + 10 + 100 + 15, c3.bounds.left);
},
testSpacingY() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
110,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
layout.setSpacingY(10);
this.flush();
this.assertEquals(170, container.bounds.height);
this.assertEquals(0, c1.bounds.top);
this.assertEquals(60, c2.bounds.top);
this.assertEquals(120, c3.bounds.top);
},
testHeightForWidth() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
110,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c2);
var c3 = new qx.test.ui.layout.LayoutItem(100, 50);
container.add(c3);
this.flush();
this.assertJsonEquals(
{
left: 0,
top: 0,
width: 110,
height: 150
},
container.bounds
);
this.assertEquals(0, c1.bounds.top);
this.assertEquals(50, c2.bounds.top);
this.assertEquals(100, c3.bounds.top);
},
testLargeChildInLine() {
var layout = new qx.ui.layout.Flow();
var container = (this._container = new qx.test.ui.layout.LayoutItem(
100,
null
).set({
layout: layout
}));
this.root.add(container);
var c1 = new qx.test.ui.layout.LayoutItem(150, 50);
container.add(c1);
var c2 = new qx.test.ui.layout.LayoutItem(80, 50);
container.add(c2);
this.flush();
this.assertEquals(0, c1.bounds.top);
this.assertEquals(0, c1.bounds.left);
this.assertEquals(50, c2.bounds.top);
}
},
destruct() {
this.root = null;
}
});