UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

301 lines (239 loc) 8.33 kB
/* ************************************************************************ 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) ************************************************************************ */ qx.Class.define("qx.test.ui.table.Table", { extend : qx.test.ui.LayoutTestCase, members : { createModel : function() { var tableModel = new qx.ui.table.model.Simple(); tableModel.setColumns([ "ID", "A number", "String", "A date", "Boolean" ]); tableModel.setData(this.createRandomRows(5)); return tableModel; }, createRandomRows : function(rowCount) { var rowData = []; var nextId = 0; var strings = ["a", "b", "c", "d"]; for (var row = 0; row < rowCount; row++) { var date = new Date(row * row * row); var number = row % 2 == 0 ? row / 2 : NaN; rowData.push([ nextId++, number, strings[row % 4], date, (row % 2 == 1) ]); } return rowData; }, testSortInteger : function() { // table var model = this.createModel(); var table = new qx.ui.table.Table(model); // sort descending model.sortByColumn(0); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][0] >= data[i+1][0]); }; // sort ascending model.sortByColumn(0, true); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][0] <= data[i+1][0]); }; table.destroy(); model.dispose(); }, testSortIntegerNaN : function() { // table var model = this.createModel(); var table = new qx.ui.table.Table(model); // sort descending model.sortByColumn(1); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { if (isNaN(data[i][1])) { // both should be NaN this.assertTrue(isNaN(data[i+1][1])); } else if (isNaN(data[i+1][1])) { // should be a number this.assertFalse(isNaN(data[i][1])); } else { this.assertTrue(data[i][1] >= data[i+1][1]); } }; // sort ascending model.sortByColumn(1, true); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { if (isNaN(data[i][1])) { // both should be NaN this.assertTrue(isNaN(data[i+1][1])); } else if (isNaN(data[i+1][1])) { // should be a number this.assertFalse(isNaN(data[i][1])); } else { this.assertTrue(data[i][1] <= data[i+1][1]); } }; table.destroy(); model.dispose(); }, testSortIntegerNaNInsensitive : function() { // table var model = this.createModel(); var table = new qx.ui.table.Table(model); model.setCaseSensitiveSorting(false); // sort descending model.sortByColumn(1); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { if (isNaN(data[i][1])) { // both should be NaN this.assertTrue(isNaN(data[i+1][1])); } else if (isNaN(data[i+1][1])) { // should be a number this.assertFalse(isNaN(data[i][1])); } else { this.assertTrue(data[i][1] >= data[i+1][1]); } }; // sort ascending model.sortByColumn(1, true); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { if (isNaN(data[i][1])) { // both should be NaN this.assertTrue(isNaN(data[i+1][1])); } else if (isNaN(data[i+1][1])) { // should be a number this.assertFalse(isNaN(data[i][1])); } else { this.assertTrue(data[i][1] <= data[i+1][1]); } }; table.destroy(); model.dispose(); }, testSortStringInsensitive : function() { // table var model = this.createModel(); var table = new qx.ui.table.Table(model); model.setCaseSensitiveSorting(false); // sort descending model.sortByColumn(2); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][2] >= data[i+1][2]); }; // sort ascending model.sortByColumn(2, true); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][2] <= data[i+1][2]); }; table.destroy(); model.dispose(); }, testSortString : function() { // table var model = this.createModel(); var table = new qx.ui.table.Table(model); // sort descending model.sortByColumn(2); var data = model.getData(); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][2] >= data[i+1][2]); }; // sort ascending model.sortByColumn(2, true); for (var i = 0; i < data.length - 1; i++) { this.assertTrue(data[i][2] <= data[i+1][2]); }; table.destroy(); model.dispose(); }, testRegularListener : function() { var table = new qx.ui.table.Table(); var executed = false; var id = table.addListener("changeRowHeight", function() {executed = true;}, this); this.assertNotNull(id); table.removeListenerById(id); // invoke event table.setRowHeight(111); this.assertFalse(executed); table.destroy(); }, testSpecialListener : function() { var table = new qx.ui.table.Table(); // use a meta column to see if both events are handled properly table.setMetaColumnCounts([1, -1]); var executed = false; var id = table.addListener("cellClick", function() {executed = true;}, this); this.assertNotNull(id); table.removeListenerById(id); // invoke synthetic cellClick event var scroller = table._getPaneScrollerArr()[0]; var mouse = new qx.event.type.Mouse(); mouse.init({}, scroller, scroller, false, true); scroller.fireEvent("cellClick", qx.ui.table.pane.CellEvent, [scroller, mouse, 0, 0], true); this.assertFalse(executed, "Listener not removed"); mouse.dispose(); table.destroy(); }, testScrollAfterScrollbarVisibilityChange : function() { var rowData = []; for (var row = 0; row < 15; row++) { rowData.push([ row ]); } var tableModel = new qx.ui.table.model.Simple(); tableModel.setColumns(["ID"]); tableModel.setData(rowData); var table = new qx.ui.table.Table(tableModel).set({width: 200, height: 200}); this.getRoot().add(table); qx.ui.core.queue.Manager.flush(); // scroll to the end table.getPaneScroller(0).setScrollY(100); // resize the first column to show a vertical scrollbar table.getTableColumnModel().setColumnWidth(0, 300); // resize back table.getTableColumnModel().setColumnWidth(0, 100); // check that the table is not scrolled back to the top this.assertEquals(100, table.getPaneScroller(0).getScrollY()); table.destroy(); tableModel.dispose(); }, testFocusAfterRemove : function() { var tableModelSimple = new qx.ui.table.model.Simple(); tableModelSimple.setColumns([ "Location", "Team" ]); var tableSimple = new qx.ui.table.Table(tableModelSimple); var data = [ [1, 'team1'], [2, 'team2'], [3, 'team3']]; tableModelSimple.setData(data); // select and focus row 2 tableSimple.getSelectionModel().addSelectionInterval(1,1); tableSimple.setFocusedCell(1,1); // remove this row tableModelSimple.removeRows(1,1); // check if the selection and the focus is gone this.assertEquals(null, tableSimple.getFocusedRow()); // don't use assertNull because it can be undefined this.assertEquals(0, tableSimple.getSelectionModel().getSelectedCount()); tableSimple.destroy(); tableModelSimple.dispose(); } } });