sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
198 lines (175 loc) • 7.32 kB
HTML
<html>
<!--
Copyright 2008 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!-- Author: robbyw@google.com (Robby Walker) -->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.ui.TableSorter</title>
<script src="../base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.events');
goog.require('goog.ui.TableSorter');
</script>
</head>
<body>
<div id="content">
<table id="sortable">
<thead>
<tr><th>alpha</th><th>number</th><th>not sortable</th></tr>
<tr><th id="not-sortable" colspan="3">cannot sort</th></tr>
</thead>
<tbody>
<tr><td>C</td><td>10</td><td></td></tr>
<tr><td>A</td><td>10</td><td></td></tr>
<tr><td>C</td><td>17</td><td></td></tr>
<tr><td>B</td><td>0</td><td></td></tr>
<tr><td>C</td><td>3</td><td></td></tr>
</tbody>
</table>
<table id="sortable-2">
<thead>
<tr><th>not sortable 1</th><th colspan="2">not sortable 2</th></tr>
<tr>
<th id="sorttable-2-col-1">Col 1</th>
<th id="sorttable-2-col-2">Col 2</th>
<th id="sorttable-2-col-3">Col 3</th>
</tr>
</thead>
<tbody>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>3</td><td>1</td><td>9</td></tr>
</tbody>
</table>
</div>
<script>
var oldHtml = goog.dom.getElement('content').innerHTML;
var alphaHeader, numberHeader, notSortableHeader, table, tableSorter;
function setUp() {
goog.dom.getElement('content').innerHTML = oldHtml;
table = goog.dom.getElement('sortable');
alphaHeader = table.getElementsByTagName('TH')[0];
numberHeader = table.getElementsByTagName('TH')[1];
notSortableHeader = table.getElementsByTagName('TH')[2];
tableSorter = new goog.ui.TableSorter();
tableSorter.setSortFunction(0, goog.ui.TableSorter.alphaSort);
tableSorter.setSortFunction(2, goog.ui.TableSorter.noSort);
tableSorter.decorate(table);
}
function tearDown() {
tableSorter.dispose();
assertEquals(0, goog.events.getTotalListenerCount());
table = null;
}
function testConstructor() {
assertNotNull('Should have successful construction', tableSorter);
assertNotNull('Should be in document', tableSorter);
}
function testForwardAlpha() {
goog.testing.events.fireClickEvent(alphaHeader);
assertOrder(['A', '10', 'B', '0', 'C', '10', 'C', '17', 'C', '3']);
assertTrue(goog.dom.classes.has(alphaHeader, 'goog-tablesorter-sorted'));
assertEquals(0, tableSorter.getSortColumn());
assertFalse(tableSorter.isSortReversed());
}
function testBackwardAlpha() {
goog.testing.events.fireClickEvent(alphaHeader);
goog.testing.events.fireClickEvent(alphaHeader);
assertOrder(['C', '10', 'C', '17', 'C', '3', 'B', '0', 'A', '10']);
assertTrue(goog.dom.classes.has(alphaHeader,
'goog-tablesorter-sorted-reverse'));
assertEquals(0, tableSorter.getSortColumn());
assertTrue(tableSorter.isSortReversed());
}
function testForwardNumeric() {
goog.testing.events.fireClickEvent(numberHeader);
assertOrder(['B', '0', 'C', '3', 'C', '10', 'A', '10', 'C', '17']);
assertTrue(goog.dom.classes.has(numberHeader, 'goog-tablesorter-sorted'));
assertEquals(1, tableSorter.getSortColumn());
assertFalse(tableSorter.isSortReversed());
}
function testBackwardNumeric() {
goog.testing.events.fireClickEvent(numberHeader);
goog.testing.events.fireClickEvent(numberHeader);
assertOrder(['C', '17', 'C', '10', 'A', '10', 'C', '3', 'B', '0']);
assertTrue(goog.dom.classes.has(numberHeader,
'goog-tablesorter-sorted-reverse'));
assertEquals(1, tableSorter.getSortColumn());
assertTrue(tableSorter.isSortReversed());
}
function testAlphaThenNumeric() {
testForwardAlpha();
goog.testing.events.fireClickEvent(numberHeader);
assertOrder(['B', '0', 'C', '3', 'A', '10', 'C', '10', 'C', '17']);
assertFalse(goog.dom.classes.has(alphaHeader, 'goog-tablesorter-sorted'));
assertEquals(1, tableSorter.getSortColumn());
assertFalse(tableSorter.isSortReversed());
}
function testNotSortableUnchanged() {
goog.testing.events.fireClickEvent(notSortableHeader);
assertEquals(0, goog.dom.classes.get(notSortableHeader).length);
assertEquals(-1, tableSorter.getSortColumn());
}
function testSortWithNonDefaultSortableHeaderRowIndex() {
// Check that clicking on non-sortable header doesn't trigger any sorting.
assertOrder(['C', '10', 'A', '10', 'C', '17', 'B', '0', 'C', '3']);
goog.testing.events.fireClickEvent(goog.dom.getElement('not-sortable'));
assertOrder(['C', '10', 'A', '10', 'C', '17', 'B', '0', 'C', '3']);
}
function testsetSortableHeaderRowIndexAfterDecorateThrows() {
var func = function() { tableSorter.setSortableHeaderRowIndex(0); };
var msg = assertThrows('failFunc should throw.', func)['message']
assertEquals('Component already rendered', msg);
}
function testSortOnSecondHeaderRow() {
// Test a table with multiple table headers.
// Using setSortableHeaderRowIndex one can specify table header columns to use
// in sorting.
var tableSorter2 = new goog.ui.TableSorter();
tableSorter2.setSortableHeaderRowIndex(1);
tableSorter2.decorate(goog.dom.getElement('sortable-2'));
// Initial order.
assertOrder(['4', '5', '6', '1', '2', '3', '3', '1', '9'],
goog.dom.getElement('sortable-2'));
// Sort on first column.
goog.testing.events.fireClickEvent(
goog.dom.getElement('sorttable-2-col-1'));
assertOrder(['1', '2', '3', '3', '1', '9', '4', '5', '6'],
goog.dom.getElement('sortable-2'));
// Sort on second column.
goog.testing.events.fireClickEvent(
goog.dom.getElement('sorttable-2-col-2'));
assertOrder(['3', '1', '9', '1', '2', '3', '4', '5', '6'],
goog.dom.getElement('sortable-2'));
// Sort on third column.
goog.testing.events.fireClickEvent(
goog.dom.getElement('sorttable-2-col-3'));
assertOrder(['1', '2', '3', '4', '5', '6', '3', '1', '9'],
goog.dom.getElement('sortable-2'));
// Reverse sort on third column.
goog.testing.events.fireClickEvent(
goog.dom.getElement('sorttable-2-col-3'));
assertOrder(['3', '1', '9', '4', '5', '6', '1', '2', '3'],
goog.dom.getElement('sortable-2'));
tableSorter2.dispose();
}
function assertOrder(arr, opt_table) {
var tbl = opt_table || table;
var actual = [];
goog.array.forEach(tbl.getElementsByTagName('TD'), function(td, idx) {
var txt = goog.dom.getTextContent(td);
if (txt) {
actual.push(txt);
}
});
assertArrayEquals(arr, actual);
}
</script>
</body>
</html>