Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / src / ui / sortable_table_test.js
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.
4
5 'use strict';
6
7 base.require('base.utils');
8 base.require('ui');
9 base.require('ui.sortable_table');
10
11 base.unittest.testSuite('ui.sortable_table', function() {
12   var SortableTable = ui.SortableTable;
13
14   function convertToHTML(s) {
15     var res = '';
16     for (var i = 0; i < s.length; i++) {
17       res += s.charCodeAt(i) > 127 ?
18              '&#x' + s.charCodeAt(i).toString(16).toUpperCase() + ';' :
19              s.charAt(i);
20     }
21     return res;
22   }
23
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'));
44     return table;
45   }
46
47   test('instantiate', function() {
48     var table = SimpleTable();
49     SortableTable.decorate(table);
50     var headerRow = table.tHead.rows[0];
51     assertEquals('Name&nbsp;&#x25BF;',
52                  convertToHTML(headerRow.cells[0].innerHTML));
53     assertEquals('Value&nbsp;&#x25BF;',
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);
66   });
67
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&nbsp;&#x25BE;',
74                  convertToHTML(headerRow.cells[0].innerHTML));
75     assertEquals('Value&nbsp;&#x25BF;',
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);
88   });
89
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&nbsp;&#x25B4;',
96                  convertToHTML(headerRow.cells[0].innerHTML));
97     assertEquals('Value&nbsp;&#x25BF;',
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);
110   });
111
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&nbsp;&#x25BF;',
118                  convertToHTML(headerRow.cells[0].innerHTML));
119     assertEquals('Value&nbsp;&#x25BE;',
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);
132   });
133
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&nbsp;&#x25BF;',
140                  convertToHTML(headerRow.cells[0].innerHTML));
141     assertEquals('Value&nbsp;&#x25B4;',
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);
154   });
155
156   test('sortOnAColumnThenReverseIt', function() {
157     var table = SimpleTable();
158     SortableTable.decorate(table);
159     table.sort(0);
160     var headerRow = table.tHead.rows[0];
161     assertEquals('Name&nbsp;&#x25BE;',
162                  convertToHTML(headerRow.cells[0].innerHTML));
163     assertEquals('Value&nbsp;&#x25BF;',
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);
176     table.sort(0);
177     var headerRow = table.tHead.rows[0];
178     assertEquals('Name&nbsp;&#x25B4;',
179                  convertToHTML(headerRow.cells[0].innerHTML));
180     assertEquals('Value&nbsp;&#x25BF;',
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);
193   });
194
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&nbsp;&#x25B4;',
201                  convertToHTML(headerRow.cells[0].innerHTML));
202     assertEquals('Value&nbsp;&#x25BF;',
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&nbsp;&#x25BF;',
218                  convertToHTML(headerRow.cells[0].innerHTML));
219     assertEquals('Value&nbsp;&#x25BE;',
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);
232   });
233 });