@qooxdoo/framework
Version:
The JS Framework for Coders
197 lines (158 loc) • 5.96 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:
* Martin Wittemann (martinwittemann)
************************************************************************ */
/* eslint-disable no-caller */
qx.Class.define("qx.test.ui.table.model.Simple", {
extend: qx.test.ui.LayoutTestCase,
members: {
testGetRowDataAsMap() {
var tableDataWithMeta = [
{
id: 100,
col1: "test",
col2: "test2"
}
];
var tableModel = new qx.ui.table.model.Simple();
tableModel.setColumns(["Col1", "Col2"], ["col1", "col2"]);
tableModel.setDataAsMapArray(tableDataWithMeta, true);
// check the initial data
var data = tableModel.getRowDataAsMap(0);
this.assertEquals(100, data.id);
this.assertEquals("test", data.col1);
this.assertEquals("test2", data.col2);
// change the data
tableModel.setValue(0, 0, "affe");
data = tableModel.getRowDataAsMap(0);
// check the changed data
this.assertEquals(100, data.id);
this.assertEquals("affe", data.col1);
this.assertEquals("test2", data.col2);
tableModel.dispose();
},
getStringValues() {
return ["aaaa", "bbbb", "cccc", "dddd", "eeee", "ffff"];
},
createRandomRows(rowCount) {
var rowData = [];
var strings = this.getStringValues();
for (var row = 0; row < rowCount; row++) {
rowData.push([row + 1, strings[row % strings.length]]);
}
return rowData;
},
testCustomSortFunction() {
var stringValues = this.getStringValues();
var rowCount = 20;
// table
var model = new qx.ui.table.model.Simple();
model.setColumns(["ID", "String"]);
model.setData(this.createRandomRows(rowCount));
// custom individual ascending descending integer sort function for column 0
model.setSortMethods(0, {
ascending(row1, row2, columnIndex) {
var int1 = row1[columnIndex];
var int2 = row2[columnIndex];
return int1 > int2 ? 1 : int1 == int2 ? 0 : -1;
},
descending(row2, row1, columnIndex) {
var int1 = row1[columnIndex];
var int2 = row2[columnIndex];
return int1 > int2 ? 1 : int1 == int2 ? 0 : -1;
}
});
// custom single string sort function for column 1
model.setSortMethods(1, function (row1, row2, columnIndex) {
var string1 = row1[columnIndex];
var string2 = row2[columnIndex];
return string1.localeCompare(string2);
});
var table = new qx.ui.table.Table(model);
// test sorting column 1
// sort descending
model.sortByColumn(1);
var data = model.getData();
this.assertTrue(data[0][1] == stringValues[stringValues.length - 1]);
this.assertTrue(data[data.length - 1][1] == stringValues[0]);
// sort ascending
model.sortByColumn(1, true);
this.assertTrue(data[0][1] == stringValues[0]);
this.assertTrue(
data[data.length - 1][1] == stringValues[stringValues.length - 1]
);
// test sorting column 0
// sort descending
model.sortByColumn(0);
this.assertTrue(data[0][0] == rowCount);
this.assertTrue(data[data.length - 1][0] == 1);
// sort ascending
model.sortByColumn(0, true);
this.assertTrue(data[0][0] == 1);
this.assertTrue(data[data.length - 1][0] == rowCount);
table.destroy();
model.dispose();
},
testCustomSortFunctionArgumentsCalleeColumnIndexDeprecated() {
var stringValues = this.getStringValues();
var rowCount = 20;
// table
var model = new qx.ui.table.model.Simple();
model.setColumns(["ID", "String"]);
model.setData(this.createRandomRows(rowCount));
// custom individual ascending descending integer sort function for column 0
model.setSortMethods(0, {
ascending(row1, row2) {
var columnIndex = arguments.callee.columnIndex;
var int1 = row1[columnIndex];
var int2 = row2[columnIndex];
return int1 > int2 ? 1 : int1 == int2 ? 0 : -1;
},
descending(row2, row1) {
var columnIndex = arguments.callee.columnIndex;
var int1 = row1[columnIndex];
var int2 = row2[columnIndex];
return int1 > int2 ? 1 : int1 == int2 ? 0 : -1;
}
});
// custom single string sort function for column 1
model.setSortMethods(1, function (row1, row2) {
var columnIndex = arguments.callee.columnIndex;
var string1 = row1[columnIndex];
var string2 = row2[columnIndex];
return string1.localeCompare(string2);
});
var table = new qx.ui.table.Table(model);
// test sorting column 1
// sort descending
model.sortByColumn(1);
var data = model.getData();
this.assertTrue(data[0][1] == stringValues[stringValues.length - 1]);
this.assertTrue(data[data.length - 1][1] == stringValues[0]);
// sort ascending
model.sortByColumn(1, true);
this.assertTrue(data[0][1] == stringValues[0]);
this.assertTrue(
data[data.length - 1][1] == stringValues[stringValues.length - 1]
);
// test sorting column 0
// sort descending
model.sortByColumn(0);
this.assertTrue(data[0][0] == rowCount);
this.assertTrue(data[data.length - 1][0] == 1);
// sort ascending
model.sortByColumn(0, true);
this.assertTrue(data[0][0] == 1);
this.assertTrue(data[data.length - 1][0] == rowCount);
table.destroy();
model.dispose();
}
}
});