UNPKG

10.6 kBJavaScriptView Raw
1
2(function(win, TableFilter){
3
4 var tf = new TableFilter('demo', {
5 base_path: '../dist/tablefilter/',
6 mark_active_columns: true
7 });
8 tf.init();
9 var markActiveColumns = tf.feature('markActiveColumns');
10
11 module('Sanity checks');
12 test('Active columns', function() {
13 deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated');
14 notEqual(markActiveColumns, null, 'markActiveColumns instanciated');
15 deepEqual(tf.markActiveColumns, true, 'markActiveColumns property');
16 equal(markActiveColumns.emitter.events['before-filtering'].length, 1,
17 'subscribed to `before-filtering` event');
18 equal(markActiveColumns.emitter.events['cell-processed'].length, 1,
19 'subscribed to `cell-processed` event');
20 });
21
22 module('Feature interface');
23 test('Properties', function() {
24 deepEqual(markActiveColumns.tf instanceof TableFilter, true,
25 'TableFilter instance');
26 deepEqual(markActiveColumns.feature, 'markActiveColumns',
27 'Feature name');
28 deepEqual(markActiveColumns.enabled, true, 'Feature enabled');
29 deepEqual(markActiveColumns.initialized, true, 'Feature initialized');
30 deepEqual(typeof markActiveColumns.emitter, 'object',
31 'Feature has emitter instance');
32 deepEqual(typeof markActiveColumns.config, 'object',
33 'TF configuration object');
34 deepEqual(typeof markActiveColumns.init, 'function',
35 'Feature init method');
36 deepEqual(typeof markActiveColumns.destroy, 'function',
37 'Feature destroy method');
38 deepEqual(typeof markActiveColumns.reset, 'function',
39 'Feature reset method');
40 deepEqual(typeof markActiveColumns.enable, 'function',
41 'Feature enable method');
42 deepEqual(typeof markActiveColumns.disable, 'function',
43 'Feature enable method');
44 deepEqual(typeof markActiveColumns.isEnabled, 'function',
45 'Feature enable method');
46 });
47 test('Can destroy', function() {
48 markActiveColumns.destroy();
49 deepEqual(markActiveColumns.initialized, false, 'not initialised');
50 });
51 test('Can reset', function() {
52 markActiveColumns.reset();
53 deepEqual(markActiveColumns.enabled, true, 'enabled');
54 });
55 test('Can disable', function() {
56 markActiveColumns.disable();
57 deepEqual(markActiveColumns.enabled, false, 'disabled');
58 });
59 test('Can enable', function() {
60 markActiveColumns.enable();
61 deepEqual(markActiveColumns.enabled, true, 'enabled');
62 });
63 test('Can init', function() {
64 markActiveColumns.destroy();
65 markActiveColumns.enable();
66 markActiveColumns.init();
67 deepEqual(markActiveColumns.enabled, true, 'enabled');
68 });
69 test('Can check is enabled', function() {
70 markActiveColumns.isEnabled();
71 deepEqual(markActiveColumns.enabled, true, 'enabled');
72 });
73
74 module('Behaviour');
75 test('Active columns', function() {
76 tf.setFilterValue(1, 'Bri');
77 tf.setFilterValue(3, '>2');
78 tf.filter();
79 var header1 = tf.getHeaderElement(1);
80 var header3 = tf.getHeaderElement(3);
81 deepEqual(
82 header1.className.indexOf('activeHeader') !== -1,
83 true,
84 'Active filter indicator');
85 deepEqual(
86 header3.className.indexOf('activeHeader') !== -1,
87 true,
88 'Active filter indicator');
89 });
90
91 test('can highlight column cells', function() {
92 // setup
93 tf.clearFilters();
94 var markActiveColumns = tf.feature('markActiveColumns');
95 markActiveColumns.highlightColumn = true;
96
97 // act
98 tf.setFilterValue(3, '>2');
99 tf.filter();
100
101 // assert
102 deepEqual(tf.dom().rows[6].cells[3].className,
103 markActiveColumns.cellCssClass, 'cell has expected css class');
104 deepEqual(
105 tf.dom()
106 .querySelectorAll('.' + markActiveColumns.cellCssClass).length,
107 7,
108 'number of highlighted column cells'
109 );
110 });
111
112 test('can unhighlight column cells', function() {
113 // act
114 tf.clearFilters();
115
116 // assert
117 deepEqual(
118 tf.dom()
119 .querySelectorAll('.' + markActiveColumns.cellCssClass).length,
120 0,
121 'number of highlighted column cells'
122 );
123
124 markActiveColumns.highlightColumn = false;
125 });
126
127 test('cannot initialiase if already initialised', function() {
128 // setup
129 var hit = 0;
130 var emitterOn = markActiveColumns.emitter.on;
131 markActiveColumns.emitter.on = function() {
132 hit++;
133 };
134
135 // act
136 markActiveColumns.init();
137
138 // assert
139 deepEqual(hit, 0, 'init exited');
140
141 markActiveColumns.emitter.on = emitterOn;
142 });
143
144 test('Active columns with paging', function() {
145 tf.destroy();
146 tf = null;
147 tf = new TableFilter('demo', {
148 base_path: '../dist/tablefilter/',
149 mark_active_columns: true,
150 paging: true
151 });
152 tf.init();
153
154 tf.setFilterValue(1, 'Bri');
155 tf.setFilterValue(3, '>2');
156 tf.filter();
157 var header1 = tf.getHeaderElement(1);
158 var header3 = tf.getHeaderElement(3);
159 deepEqual(
160 header1.className.indexOf('activeHeader') !== -1,
161 true,
162 'Active filter indicator');
163 deepEqual(
164 header3.className.indexOf('activeHeader') !== -1,
165 true,
166 'Active filter indicator');
167 });
168
169 test('Grid layout active columns', function() {
170 tf.destroy();
171 tf = null;
172 tf = new TableFilter('demo', {
173 base_path: '../dist/tablefilter/',
174 mark_active_columns: true,
175 grid_layout: true
176 });
177 tf.init();
178
179 tf.setFilterValue(1, 'Bri');
180 tf.setFilterValue(3, '>2');
181 tf.filter();
182 var header1 = tf.getHeaderElement(1);
183 var header3 = tf.getHeaderElement(3);
184 deepEqual(
185 header1.className.indexOf('activeHeader') !== -1,
186 true,
187 'Active filter indicator');
188 deepEqual(
189 header3.className.indexOf('activeHeader') !== -1,
190 true,
191 'Active filter indicator');
192 });
193
194 test('Cannot destroy if not initialised', function() {
195 // setup
196 var clearActiveColumns = markActiveColumns.clearActiveColumns;
197 var hit = 0;
198 markActiveColumns.clearActiveColumns = function() { hit++; };
199 markActiveColumns.initialized = false;
200
201 // act
202 markActiveColumns.destroy();
203
204 // assert
205 deepEqual(hit, 0, 'clearActiveColumns not called');
206
207 markActiveColumns.clearActiveColumns = clearActiveColumns;
208 });
209
210 module('Callbacks');
211 test('Can trigger onBeforeActiveColumn callback', function() {
212 // setup
213 var colIndex;
214 markActiveColumns.onBeforeActiveColumn = function(feature, colIdx) {
215 colIndex = colIdx;
216 };
217
218 // act
219 markActiveColumns.markActiveColumn(2);
220
221 // assert
222 deepEqual(colIndex, 2,
223 'expected column index passed to onBeforeActiveColumn');
224 });
225
226 test('Can trigger onAfterActiveColumn callback', function() {
227 // setup
228 var colIndex;
229 markActiveColumns.onAfterActiveColumn = function(feature, colIdx) {
230 colIndex = colIdx;
231 };
232
233 // act
234 markActiveColumns.markActiveColumn(3);
235
236 // assert
237 deepEqual(colIndex, 3,
238 'expected column index passed to onAfterActiveColumn');
239 });
240
241 module('mark_active_columns as configuration object');
242 test('Sanity checks', function() {
243 tf.destroy();
244 var hit = 0;
245 tf = new TableFilter('demo', {
246 base_path: '../dist/tablefilter/',
247 mark_active_columns: {
248 header_css_class: 'myCssClass',
249 on_before_active_column: function(feature, colIndex) {
250 hit = colIndex;
251 },
252 on_after_active_column: function(feature, colIndex) {
253 hit = colIndex;
254 }
255 }
256 });
257 tf.init();
258 var markActiveColumns = tf.feature('markActiveColumns');
259
260 deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated');
261 notEqual(markActiveColumns, null, 'markActiveColumns instanciated');
262 deepEqual(tf.markActiveColumns, true, 'markActiveColumns property');
263
264 test('Custom header CSS class', function() {
265 // setup
266 tf.setFilterValue(1, 'Bri');
267 tf.setFilterValue(3, '>2');
268 var header1 = tf.getHeaderElement(1);
269 var header3 = tf.getHeaderElement(3);
270
271 // act
272 tf.filter();
273
274 // assert
275 deepEqual(
276 header1.className.indexOf('myCssClass') !== -1,
277 true,
278 'Active filter indicator');
279 deepEqual(
280 header3.className.indexOf('myCssClass') !== -1,
281 true,
282 'Active filter indicator');
283 });
284
285 test('on_before_active_column callback', function() {
286 // setup
287 tf.clearFilters();
288 tf.setFilterValue(1, 'Bri');
289
290 // act
291 tf.filter();
292
293 // assert
294 deepEqual(hit, 1,
295 'expected column index passed to on_before_active_column');
296 });
297
298 test('on_after_active_column callback', function() {
299 // setup
300 tf.clearFilters();
301 tf.setFilterValue(3, '>2');
302
303 // act
304 tf.filter();
305
306 // assert
307 deepEqual(hit, 3,
308 'expected column index passed to on_after_active_column');
309 });
310
311 module('Tear-down');
312 test('can destroy', function() {
313 tf.destroy();
314 deepEqual(tf.isInitialized(), false, 'Filters removed');
315 });
316 });
317
318})(window, TableFilter);