UNPKG

10.8 kBJavaScriptView Raw
1
2var tf = new TableFilter('demo', {
3 base_path: '../dist/tablefilter/',
4 alternate_rows: true
5});
6tf.init();
7var tbl = tf.dom();
8var altRows = tf.feature('alternateRows');
9
10module('Sanity checks');
11test('AlternateRows component', function() {
12 deepEqual(typeof altRows, 'object', 'AlternateRows instanciated');
13 deepEqual(altRows.evenCss, 'even', 'Expected even css class');
14 deepEqual(altRows.oddCss, 'odd', 'Expected odd css class');
15});
16
17module('Feature interface');
18test('Properties', function() {
19 deepEqual(
20 altRows.tf instanceof TableFilter, true, 'TableFilter instance');
21 deepEqual(altRows.feature, 'alternateRows', 'Feature name');
22 deepEqual(altRows.enabled, true, 'Feature enabled');
23 deepEqual(altRows.initialized, true, 'Feature enabled');
24 deepEqual(typeof altRows.emitter, 'object', 'Feature has emitter instance');
25 deepEqual(typeof altRows.config, 'object', 'TF configuration object');
26 deepEqual(typeof altRows.init, 'function', 'Feature init method');
27 deepEqual(typeof altRows.destroy, 'function', 'Feature destroy method');
28 deepEqual(typeof altRows.reset, 'function', 'Feature reset method');
29 deepEqual(typeof altRows.enable, 'function', 'Feature enable method');
30 deepEqual(typeof altRows.disable, 'function', 'Feature enable method');
31 deepEqual(
32 typeof altRows.isEnabled, 'function', 'Feature enable method');
33});
34test('Can destroy', function() {
35 altRows.destroy();
36 deepEqual(altRows.initialized, false, 'not initialised');
37 deepEqual(
38 altRows.emitter.events['row-processed'].length,
39 0,
40 '`row-processed` event handler removed'
41 );
42 deepEqual(
43 altRows.emitter.events['row-paged'].length,
44 0,
45 '`row-paged` event handler removed'
46 );
47 deepEqual(
48 altRows.emitter.events['column-sorted'].length,
49 0,
50 '`column-sorted` event handler removed'
51 );
52 deepEqual(
53 altRows.emitter.events['rows-changed'].length,
54 0,
55 '`rows-changed` event handler removed'
56 );
57});
58test('Can reset', function() {
59 altRows.reset();
60 deepEqual(altRows.enabled, true, 'enabled');
61});
62test('Can disable', function() {
63 altRows.disable();
64 deepEqual(altRows.enabled, false, 'disabled');
65});
66test('Can enable', function() {
67 altRows.enable();
68 deepEqual(altRows.enabled, true, 'enabled');
69});
70test('Can init', function() {
71 altRows.destroy();
72 altRows.enable();
73 altRows.init();
74 deepEqual(altRows.enabled, true, 'enabled');
75});
76test('Can check is enabled', function() {
77 altRows.isEnabled();
78 deepEqual(altRows.enabled, true, 'enabled');
79});
80
81module('Actions');
82test('Filter column', function() {
83 tf.setFilterValue(2, '>1400');
84 tf.filter();
85
86 deepEqual(tbl.querySelectorAll('tr.odd').length, 2, 'Odd bgs removed');
87 deepEqual(tbl.querySelectorAll('tr.even').length, 2, 'Even bg removed');
88});
89
90test('Clear filters', function() {
91 tf.clearFilters();
92 tf.filter();
93
94 deepEqual(tbl.querySelectorAll('tr.odd').length, 3, 'Odd bgs removed');
95 deepEqual(tbl.querySelectorAll('tr.even').length, 4, 'Even bg removed');
96});
97
98test('Set background on a row', function() {
99 altRows.setRowBg(4);
100 deepEqual(tbl.rows[4].className, 'odd', 'Bg set on expected row');
101});
102
103test('Remove background on a row', function() {
104 altRows.removeRowBg(4);
105 deepEqual(tbl.rows[4].querySelectorAll('.odd').length,
106 0, 'Bg set on expected row');
107});
108
109test('Cannot init if initialised', function() {
110 // setup
111 var processAll = altRows.processAll;
112 var hit = 0;
113 altRows.processAll = function() { hit++; };
114 altRows.initialized = true;
115
116 // act
117 altRows.init();
118
119 // assert
120 deepEqual(hit, 0, 'processAll not called');
121
122 altRows.processAll = processAll;
123});
124
125test('Cannot processAll if not enabled', function() {
126 // setup
127 var setRowBg = altRows.setRowBg;
128 var hit = 0;
129 altRows.setRowBg = function() { hit++; };
130 altRows.enabled = false;
131
132 // act
133 altRows.processAll();
134
135 // assert
136 deepEqual(hit, 0, 'setRowBg not called');
137
138 altRows.setRowBg = setRowBg;
139});
140
141test('Cannot setRowBg if not enabled', function() {
142 // setup
143 var removeRowBg = altRows.removeRowBg;
144 var hit = 0;
145 altRows.removeRowBg = function() { hit++; };
146 altRows.enabled = false;
147
148 // act
149 altRows.setRowBg(3, 5);
150
151 // assert
152 deepEqual(hit, 0, 'removeRowBg not called');
153
154 altRows.removeRowBg = removeRowBg;
155});
156
157test('Cannot removeRowBg if row index is NaN', function() {
158 // setup
159 tf.clearFilters();
160 tf.filter();
161
162 // act
163 altRows.removeRowBg('hello');
164
165 // assert
166 deepEqual(tbl.querySelectorAll('tr.odd').length, 3, 'Expected odd bgs');
167 deepEqual(tbl.querySelectorAll('tr.even').length, 3, 'Expected even bgs');
168});
169
170test('Cannot destroy if not initialised', function() {
171 // setup
172 var getRowsNb = altRows.tf.getRowsNb;
173 var hit = 0;
174 altRows.tf.getRowsNb = function() { hit++; };
175 altRows.initialized = false;
176
177 // act
178 altRows.destroy();
179
180 // assert
181 deepEqual(hit, 0, 'tf.getRowsNb not called');
182
183 altRows.tf.getRowsNb = getRowsNb;
184});
185
186test('Remove alternating rows', function() {
187 // setup
188 altRows.initialized = true;
189
190 // act
191 altRows.destroy();
192
193 // assert
194 deepEqual(tbl.querySelectorAll('tr.odd').length, 0, 'Odd bgs removed');
195 deepEqual(tbl.querySelectorAll('tr.even').length, 0, 'Even bg removed');
196});
197
198module('Events');
199test('Can handle `row-processed` event', function() {
200 // setup
201 var processRow = altRows.processRow;
202 var hit = 0;
203 var args;
204 altRows.processRow = function() {
205 args = [].slice.call(arguments);
206 hit++;
207 };
208
209 // act
210 altRows.init();
211 tf.emitter.emit('row-processed', tf, 1, 0, true);
212
213 // assert
214 deepEqual(hit, 1, 'processRow called');
215 deepEqual(args[0], 1, 'processRow called with expected row index');
216 deepEqual(args[1], 0, 'processRow called with expected array index');
217 deepEqual(args[2], true, 'processRow called with expected isValid value');
218
219 altRows.processRow = processRow;
220});
221
222test('Can handle `row-paged` event', function() {
223 // setup
224 var processRow = altRows.processRow;
225 var hit = 0;
226 var args;
227 altRows.processRow = function() {
228 args = [].slice.call(arguments);
229 hit++;
230 };
231
232 // act
233 altRows.init();
234 tf.emitter.emit('row-paged', tf, 1, 0, true);
235
236 // assert
237 deepEqual(hit, 1, 'processRow called');
238 deepEqual(args[0], 1, 'processRow called with expected row index');
239 deepEqual(args[1], 0, 'processRow called with expected array index');
240 deepEqual(args[2], true, 'processRow called with expected isValid value');
241
242 altRows.processRow = processRow;
243});
244
245test('Can handle `column-sorted` event', function() {
246 // setup
247 var processAll = altRows.processAll;
248 var hit = 0;
249 altRows.processAll = function() {
250 hit++;
251 };
252
253 // act
254 altRows.init();
255 tf.emitter.emit('column-sorted');
256
257 // assert
258 deepEqual(hit, 1, 'processAll called');
259
260 altRows.processAll = processAll;
261});
262
263test('Can handle `rows-changed` event', function() {
264 // setup
265 var processAll = altRows.processAll;
266 var hit = 0;
267 altRows.processAll = function() {
268 hit++;
269 };
270
271 // act
272 altRows.init();
273 tf.emitter.emit('rows-changed');
274
275 // assert
276 deepEqual(hit, 1, 'processAll called');
277
278 altRows.processAll = processAll;
279});
280
281module('Grid layout');
282test('Grid layout: initialising alternating rows', function() {
283 tf.destroy();
284 tf = null;
285 tf = new TableFilter('demo', {
286 base_path: '../dist/tablefilter/',
287 grid_layout: true,
288 alternate_rows: true
289 });
290 tf.init();
291 tbl = tf.dom();
292 altRows = tf.feature('alternateRows');
293
294 deepEqual(
295 tbl.querySelectorAll('tr.odd').length, 4, 'Expected bg for odd rows');
296 deepEqual(
297 tbl.querySelectorAll('tr.even').length, 3, 'Expected bg for even rows');
298});
299
300test('Grid layout: filter column', function() {
301 tf.setFilterValue(3, '<2');
302 tf.filter();
303
304 deepEqual(tbl.querySelectorAll('tr.odd').length, 2, 'Odd bgs removed');
305 deepEqual(tbl.querySelectorAll('tr.even').length, 2, 'Even bg removed');
306});
307
308test('Grid layout: clear filters', function() {
309 tf.clearFilters();
310 tf.filter();
311
312 deepEqual(tbl.querySelectorAll('tr.odd').length, 3, 'Odd bgs removed');
313 deepEqual(tbl.querySelectorAll('tr.even').length, 4, 'Even bg removed');
314});
315
316test('Grid layout: set background on a row', function() {
317 altRows.setRowBg(4);
318 deepEqual(tbl.rows[4].className, 'odd', 'Bg set on expected row');
319});
320
321test('Grid layout: remove background on a row', function() {
322 altRows.removeRowBg(4);
323 deepEqual(tbl.rows[4].querySelectorAll('.odd').length,
324 0, 'Bg set on expected row');
325});
326
327test('Grid layout: remove alternating rows', function() {
328 altRows.destroy();
329 deepEqual(tbl.querySelectorAll('tr.odd').length, 0, 'Odd bgs removed');
330 deepEqual(tbl.querySelectorAll('tr.even').length, 0, 'Even bg removed');
331});
332
333module('Fixes');
334// Issue 365: alternating rows with column sorted at start
335test('Sort: alternating rows with column sorted at start', function() {
336 tf.destroy();
337 tf = null;
338 tf = new TableFilter('demo', {
339 base_path: '../dist/tablefilter/',
340 alternate_rows: true,
341 extensions:[{
342 name: 'sort',
343 sort_col_at_start: [2, true],
344 on_sort_loaded: checkAlternateRows
345 }]
346 });
347 tf.init();
348 altRows = tf.feature('alternateRows');
349
350 deepEqual(typeof altRows, 'object', 'AlternateRows instanciated');
351 deepEqual(altRows.evenCss, 'even', 'Expected even css class');
352 deepEqual(altRows.oddCss, 'odd', 'Expected odd css class');
353
354 function checkAlternateRows(tf) {
355 tbl = tf.dom();
356 altRows = tf.feature('alternateRows');
357
358 test('Alternate rows with sort column at start option', function() {
359 deepEqual(
360 tbl.rows[2].classList.contains('odd'),
361 true,
362 'Expected bg for rows[2]'
363 );
364 deepEqual(
365 tbl.rows[5].classList.contains('even'),
366 true,
367 'Expected bg for rows[5]'
368 );
369 });
370 }
371});