@qooxdoo/framework
Version:
The JS Framework for Coders
166 lines (126 loc) • 4.34 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2009 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:
* Jonathan Weiß (jonathan_rass)
* Fabian Jakobs (fjakobs)
************************************************************************ */
qx.Class.define("qx.test.ui.virtual.layer.WidgetCell",
{
extend : qx.test.ui.virtual.layer.LayerTestCase,
members :
{
setUp : function()
{
this._pool = [];
this.base(arguments);
},
tearDown : function()
{
for (var i=0; i<this._pool.length; i++) {
this._pool[i].destroy();
}
this.flush();
this._pool = null;
this.base(arguments);
},
_createLayer : function() {
return new qx.ui.virtual.layer.WidgetCell(this);
},
getCellWidget : function(row, column)
{
var widget = this._pool.pop() || new qx.ui.core.Widget();
widget.setBackgroundColor((row + column) % 2 == 0 ? "red" : "green");
return widget;
},
poolCellWidget : function(widget)
{
widget.setUserData("row", -1);
widget.setUserData("column", -1);
this._pool.push(widget);
},
_assertCells : function(firstRow, firstColumn, rowCount, columnCount, msg)
{
var children = this.layer._getChildren();
this.assertEquals(rowCount * columnCount, children.length);
for (var y=0; y<rowCount; y++)
{
for (var x=0; x<columnCount; x++)
{
var row = firstRow + y;
var column = firstColumn + x;
var widget = children[y*columnCount + x];
this.assertEquals(row, widget.getUserData("cell.row"));
this.assertEquals(column, widget.getUserData("cell.column"));
}
}
},
testGetRenderedCellWidget : function()
{
var pool = new qx.data.Array();
pool.setAutoDisposeItems(true);
var layer = new qx.ui.virtual.layer.WidgetCell({
getCellWidget: function(row, column)
{
var widget = new qx.ui.core.Widget();
widget.setUserData("test", row+"/"+column);
pool.push(widget);
return row == 2 && column == 2 ? null : widget;
},
poolCellWidget : function(widget) {
}
});
this.getRoot().add(layer);
this.flush();
layer.fullUpdate(1, 1, [10, 10, 10], [50, 50, 50]);
this.flush();
this.assertEquals(null, layer.getRenderedCellWidget(0, 0));
this.assertEquals(null, layer.getRenderedCellWidget(0, 1));
this.assertEquals(null, layer.getRenderedCellWidget(1, 0));
this.assertEquals(null, layer.getRenderedCellWidget(2, 2));
this.assertEquals(null, layer.getRenderedCellWidget(4, 1));
this.assertEquals(null, layer.getRenderedCellWidget(1, 4));
this.assertEquals(null, layer.getRenderedCellWidget(4, 4));
this.assertEquals("1/1", layer.getRenderedCellWidget(1, 1).getUserData("test"));
this.assertEquals("1/3", layer.getRenderedCellWidget(1, 3).getUserData("test"));
this.assertEquals("3/1", layer.getRenderedCellWidget(3, 1).getUserData("test"));
this.assertEquals("3/3", layer.getRenderedCellWidget(3, 3).getUserData("test"));
layer.destroy();
pool.dispose();
},
testEmptyCells : function()
{
var layer = new qx.ui.virtual.layer.WidgetCell({
getCellWidget: function(row, column) {
return column === 0 ? new qx.ui.core.Widget() : null;
},
poolCellWidget : function(widget) {
widget.destroy();
}
});
this.getRoot().add(layer);
this.flush();
layer.fullUpdate(0, 0, [10, 10, 10, 10, 10, 10], [30, 30, 30]);
this.flush();
var children = layer.getChildren();
for (var y=0; y<=5; y++)
{
for (var x=0; x<=2; x++)
{
var child = children[y*3 + x];
if (x === 0) {
this.assertInstance(child, qx.ui.core.Widget);
} else {
this.assertInstance(child, qx.ui.core.Spacer);
}
}
}
layer.destroy();
}
}
});