1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 tvcm.require('tvcm.utils');
8 tvcm.require('tvcm.ui');
9 tvcm.require('tvcm.ui.sortable_table');
11 tvcm.unittest.testSuite('tvcm.ui.sortable_table_test', function() {
12 var SortableTable = tvcm.ui.SortableTable;
14 function convertToHTML(s) {
16 for (var i = 0; i < s.length; i++) {
17 res += s.charCodeAt(i) > 127 ?
18 '&#x' + s.charCodeAt(i).toString(16).toUpperCase() + ';' :
24 function SimpleTable() {
25 var table = document.createElement('table');
26 var thead = table.createTHead();
27 var tfoot = table.createTFoot();
28 var tbody = table.createTBody();
29 var headerRow = thead.insertRow(0);
30 headerRow.insertCell(0).appendChild(document.createTextNode('Name'));
31 headerRow.insertCell(1).appendChild(document.createTextNode('Value'));
32 var row1 = tbody.insertRow(0);
33 row1.insertCell(0).appendChild(document.createTextNode('First'));
34 row1.insertCell(1).appendChild(document.createTextNode('2'));
35 var row2 = tbody.insertRow(1);
36 row2.insertCell(0).appendChild(document.createTextNode('Middle'));
37 row2.insertCell(1).appendChild(document.createTextNode('18'));
38 var row3 = tbody.insertRow(2);
39 row3.insertCell(0).appendChild(document.createTextNode('Last'));
40 row3.insertCell(1).appendChild(document.createTextNode('1'));
41 var footerRow = tfoot.insertRow(0);
42 footerRow.insertCell(0).appendChild(document.createTextNode('Average'));
43 footerRow.insertCell(1).appendChild(document.createTextNode('7'));
47 test('instantiate', function() {
48 var table = SimpleTable();
49 SortableTable.decorate(table);
50 var headerRow = table.tHead.rows[0];
51 assertEquals('Name ▿',
52 convertToHTML(headerRow.cells[0].innerHTML));
53 assertEquals('Value ▿',
54 convertToHTML(headerRow.cells[1].innerHTML));
55 var tableRows = table.tBodies[0].rows;
56 assertEquals('First', tableRows[0].cells[0].innerText);
57 assertEquals('2', tableRows[0].cells[1].innerText);
58 assertEquals('Middle', tableRows[1].cells[0].innerText);
59 assertEquals('18', tableRows[1].cells[1].innerText);
60 assertEquals('Last', tableRows[2].cells[0].innerText);
61 assertEquals('1', tableRows[2].cells[1].innerText);
62 // the footer should never change.
63 var footerRow = table.tFoot.rows[0];
64 assertEquals('Average', footerRow.cells[0].innerText);
65 assertEquals('7', footerRow.cells[1].innerText);
68 test('sortOnAlphabeticColumnAscending', function() {
69 var table = SimpleTable();
70 SortableTable.decorate(table);
71 table.sort(0 /*, 'downward' */);
72 var headerRow = table.tHead.rows[0];
73 assertEquals('Name ▾',
74 convertToHTML(headerRow.cells[0].innerHTML));
75 assertEquals('Value ▿',
76 convertToHTML(headerRow.cells[1].innerHTML));
77 var tableRows = table.tBodies[0].rows;
78 assertEquals('First', tableRows[0].cells[0].innerText);
79 assertEquals('2', tableRows[0].cells[1].innerText);
80 assertEquals('Last', tableRows[1].cells[0].innerText);
81 assertEquals('1', tableRows[1].cells[1].innerText);
82 assertEquals('Middle', tableRows[2].cells[0].innerText);
83 assertEquals('18', tableRows[2].cells[1].innerText);
84 // the footer should never change.
85 var footerRow = table.tFoot.rows[0];
86 assertEquals('Average', footerRow.cells[0].innerText);
87 assertEquals('7', footerRow.cells[1].innerText);
90 test('sortOnAlphabeticColumnDescending', function() {
91 var table = SimpleTable();
92 SortableTable.decorate(table);
93 table.sort(0 , 'upward');
94 var headerRow = table.tHead.rows[0];
95 assertEquals('Name ▴',
96 convertToHTML(headerRow.cells[0].innerHTML));
97 assertEquals('Value ▿',
98 convertToHTML(headerRow.cells[1].innerHTML));
99 var tableRows = table.tBodies[0].rows;
100 assertEquals('Middle', tableRows[0].cells[0].innerText);
101 assertEquals('18', tableRows[0].cells[1].innerText);
102 assertEquals('Last', tableRows[1].cells[0].innerText);
103 assertEquals('1', tableRows[1].cells[1].innerText);
104 assertEquals('First', tableRows[2].cells[0].innerText);
105 assertEquals('2', tableRows[2].cells[1].innerText);
106 // the footer should never change.
107 var footerRow = table.tFoot.rows[0];
108 assertEquals('Average', footerRow.cells[0].innerText);
109 assertEquals('7', footerRow.cells[1].innerText);
112 test('sortOnNumericColumnAscending', function() {
113 var table = SimpleTable();
114 SortableTable.decorate(table);
115 table.sort(1 /*, 'downward' */);
116 var headerRow = table.tHead.rows[0];
117 assertEquals('Name ▿',
118 convertToHTML(headerRow.cells[0].innerHTML));
119 assertEquals('Value ▾',
120 convertToHTML(headerRow.cells[1].innerHTML));
121 var tableRows = table.tBodies[0].rows;
122 assertEquals('Last', tableRows[0].cells[0].innerText);
123 assertEquals('1', tableRows[0].cells[1].innerText);
124 assertEquals('First', tableRows[1].cells[0].innerText);
125 assertEquals('2', tableRows[1].cells[1].innerText);
126 assertEquals('Middle', tableRows[2].cells[0].innerText);
127 assertEquals('18', tableRows[2].cells[1].innerText);
128 // the footer should never change.
129 var footerRow = table.tFoot.rows[0];
130 assertEquals('Average', footerRow.cells[0].innerText);
131 assertEquals('7', footerRow.cells[1].innerText);
134 test('sortOnNumericColumnDescending', function() {
135 var table = SimpleTable();
136 SortableTable.decorate(table);
137 table.sort(1 , 'upward');
138 var headerRow = table.tHead.rows[0];
139 assertEquals('Name ▿',
140 convertToHTML(headerRow.cells[0].innerHTML));
141 assertEquals('Value ▴',
142 convertToHTML(headerRow.cells[1].innerHTML));
143 var tableRows = table.tBodies[0].rows;
144 assertEquals('Middle', tableRows[0].cells[0].innerText);
145 assertEquals('18', tableRows[0].cells[1].innerText);
146 assertEquals('First', tableRows[1].cells[0].innerText);
147 assertEquals('2', tableRows[1].cells[1].innerText);
148 assertEquals('Last', tableRows[2].cells[0].innerText);
149 assertEquals('1', tableRows[2].cells[1].innerText);
150 // the footer should never change.
151 var footerRow = table.tFoot.rows[0];
152 assertEquals('Average', footerRow.cells[0].innerText);
153 assertEquals('7', footerRow.cells[1].innerText);
156 test('sortOnAColumnThenReverseIt', function() {
157 var table = SimpleTable();
158 SortableTable.decorate(table);
160 var headerRow = table.tHead.rows[0];
161 assertEquals('Name ▾',
162 convertToHTML(headerRow.cells[0].innerHTML));
163 assertEquals('Value ▿',
164 convertToHTML(headerRow.cells[1].innerHTML));
165 var tableRows = table.tBodies[0].rows;
166 assertEquals('First', tableRows[0].cells[0].innerText);
167 assertEquals('2', tableRows[0].cells[1].innerText);
168 assertEquals('Last', tableRows[1].cells[0].innerText);
169 assertEquals('1', tableRows[1].cells[1].innerText);
170 assertEquals('Middle', tableRows[2].cells[0].innerText);
171 assertEquals('18', tableRows[2].cells[1].innerText);
172 // the footer should never change.
173 var footerRow = table.tFoot.rows[0];
174 assertEquals('Average', footerRow.cells[0].innerText);
175 assertEquals('7', footerRow.cells[1].innerText);
177 var headerRow = table.tHead.rows[0];
178 assertEquals('Name ▴',
179 convertToHTML(headerRow.cells[0].innerHTML));
180 assertEquals('Value ▿',
181 convertToHTML(headerRow.cells[1].innerHTML));
182 var tableRows = table.tBodies[0].rows;
183 assertEquals('Middle', tableRows[0].cells[0].innerText);
184 assertEquals('18', tableRows[0].cells[1].innerText);
185 assertEquals('Last', tableRows[1].cells[0].innerText);
186 assertEquals('1', tableRows[1].cells[1].innerText);
187 assertEquals('First', tableRows[2].cells[0].innerText);
188 assertEquals('2', tableRows[2].cells[1].innerText);
189 // the footer should never change.
190 var footerRow = table.tFoot.rows[0];
191 assertEquals('Average', footerRow.cells[0].innerText);
192 assertEquals('7', footerRow.cells[1].innerText);
195 test('sortOnAColumnThenOnAnotherColumn', function() {
196 var table = SimpleTable();
197 SortableTable.decorate(table);
198 table.sort(0 , 'upward');
199 var headerRow = table.tHead.rows[0];
200 assertEquals('Name ▴',
201 convertToHTML(headerRow.cells[0].innerHTML));
202 assertEquals('Value ▿',
203 convertToHTML(headerRow.cells[1].innerHTML));
204 var tableRows = table.tBodies[0].rows;
205 assertEquals('Middle', tableRows[0].cells[0].innerText);
206 assertEquals('18', tableRows[0].cells[1].innerText);
207 assertEquals('Last', tableRows[1].cells[0].innerText);
208 assertEquals('1', tableRows[1].cells[1].innerText);
209 assertEquals('First', tableRows[2].cells[0].innerText);
210 assertEquals('2', tableRows[2].cells[1].innerText);
211 // the footer should never change.
212 var footerRow = table.tFoot.rows[0];
213 assertEquals('Average', footerRow.cells[0].innerText);
214 assertEquals('7', footerRow.cells[1].innerText);
215 table.sort(1 /*, 'downward' */);
216 var headerRow = table.tHead.rows[0];
217 assertEquals('Name ▿',
218 convertToHTML(headerRow.cells[0].innerHTML));
219 assertEquals('Value ▾',
220 convertToHTML(headerRow.cells[1].innerHTML));
221 var tableRows = table.tBodies[0].rows;
222 assertEquals('Last', tableRows[0].cells[0].innerText);
223 assertEquals('1', tableRows[0].cells[1].innerText);
224 assertEquals('First', tableRows[1].cells[0].innerText);
225 assertEquals('2', tableRows[1].cells[1].innerText);
226 assertEquals('Middle', tableRows[2].cells[0].innerText);
227 assertEquals('18', tableRows[2].cells[1].innerText);
228 // the footer should never change.
229 var footerRow = table.tFoot.rows[0];
230 assertEquals('Average', footerRow.cells[0].innerText);
231 assertEquals('7', footerRow.cells[1].innerText);