UNPKG

8.83 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 });
17
18 module('Feature interface');
19 test('Properties', function() {
20 deepEqual(markActiveColumns.tf instanceof TableFilter, true,
21 'TableFilter instance');
22 deepEqual(markActiveColumns.feature, 'markActiveColumns',
23 'Feature name');
24 deepEqual(markActiveColumns.enabled, true, 'Feature enabled');
25 deepEqual(markActiveColumns.initialized, true, 'Feature initialized');
26 deepEqual(typeof markActiveColumns.emitter, 'object',
27 'Feature has emitter instance');
28 deepEqual(typeof markActiveColumns.config, 'object',
29 'TF configuration object');
30 deepEqual(typeof markActiveColumns.init, 'function',
31 'Feature init method');
32 deepEqual(typeof markActiveColumns.destroy, 'function',
33 'Feature destroy method');
34 deepEqual(typeof markActiveColumns.reset, 'function',
35 'Feature reset method');
36 deepEqual(typeof markActiveColumns.enable, 'function',
37 'Feature enable method');
38 deepEqual(typeof markActiveColumns.disable, 'function',
39 'Feature enable method');
40 deepEqual(typeof markActiveColumns.isEnabled, 'function',
41 'Feature enable method');
42 });
43 test('Can destroy', function() {
44 markActiveColumns.destroy();
45 deepEqual(markActiveColumns.initialized, false, 'not initialised');
46 });
47 test('Can reset', function() {
48 markActiveColumns.reset();
49 deepEqual(markActiveColumns.enabled, true, 'enabled');
50 });
51 test('Can disable', function() {
52 markActiveColumns.disable();
53 deepEqual(markActiveColumns.enabled, false, 'disabled');
54 });
55 test('Can enable', function() {
56 markActiveColumns.enable();
57 deepEqual(markActiveColumns.enabled, true, 'enabled');
58 });
59 test('Can init', function() {
60 markActiveColumns.destroy();
61 markActiveColumns.enable();
62 markActiveColumns.init();
63 deepEqual(markActiveColumns.enabled, true, 'enabled');
64 });
65 test('Can check is enabled', function() {
66 markActiveColumns.isEnabled();
67 deepEqual(markActiveColumns.enabled, true, 'enabled');
68 });
69
70 module('Behaviour');
71 test('Active columns', function() {
72 tf.setFilterValue(1, 'Bri');
73 tf.setFilterValue(3, '>2');
74 tf.filter();
75 var header1 = tf.getHeaderElement(1);
76 var header3 = tf.getHeaderElement(3);
77 deepEqual(
78 header1.className.indexOf('activeHeader') !== -1,
79 true,
80 'Active filter indicator');
81 deepEqual(
82 header3.className.indexOf('activeHeader') !== -1,
83 true,
84 'Active filter indicator');
85 });
86
87 test('Active columns with paging', function() {
88 tf.destroy();
89 tf = null;
90 tf = new TableFilter('demo', {
91 base_path: '../dist/tablefilter/',
92 mark_active_columns: true,
93 paging: true
94 });
95 tf.init();
96
97 tf.setFilterValue(1, 'Bri');
98 tf.setFilterValue(3, '>2');
99 tf.filter();
100 var header1 = tf.getHeaderElement(1);
101 var header3 = tf.getHeaderElement(3);
102 deepEqual(
103 header1.className.indexOf('activeHeader') !== -1,
104 true,
105 'Active filter indicator');
106 deepEqual(
107 header3.className.indexOf('activeHeader') !== -1,
108 true,
109 'Active filter indicator');
110 });
111
112 test('Grid layout active columns', function() {
113 tf.destroy();
114 tf = null;
115 tf = new TableFilter('demo', {
116 base_path: '../dist/tablefilter/',
117 mark_active_columns: true,
118 grid_layout: true
119 });
120 tf.init();
121
122 tf.setFilterValue(1, 'Bri');
123 tf.setFilterValue(3, '>2');
124 tf.filter();
125 var header1 = tf.getHeaderElement(1);
126 var header3 = tf.getHeaderElement(3);
127 deepEqual(
128 header1.className.indexOf('activeHeader') !== -1,
129 true,
130 'Active filter indicator');
131 deepEqual(
132 header3.className.indexOf('activeHeader') !== -1,
133 true,
134 'Active filter indicator');
135 });
136
137 test('Cannot destroy if not initialised', function() {
138 // setup
139 var clearActiveColumns = markActiveColumns.clearActiveColumns;
140 var hit = 0;
141 markActiveColumns.clearActiveColumns = function() { hit++; };
142 markActiveColumns.initialized = false;
143
144 // act
145 markActiveColumns.destroy();
146
147 // assert
148 deepEqual(hit, 0, 'clearActiveColumns not called');
149
150 markActiveColumns.clearActiveColumns = clearActiveColumns;
151 });
152
153 module('Callbacks');
154 test('Can trigger onBeforeActiveColumn callback', function() {
155 // setup
156 var colIndex;
157 markActiveColumns.onBeforeActiveColumn = function(feature, colIdx) {
158 colIndex = colIdx;
159 };
160
161 // act
162 markActiveColumns.markActiveColumn(2);
163
164 // assert
165 deepEqual(colIndex, 2,
166 'expected column index passed to onBeforeActiveColumn');
167 });
168
169 test('Can trigger onAfterActiveColumn callback', function() {
170 // setup
171 var colIndex;
172 markActiveColumns.onAfterActiveColumn = function(feature, colIdx) {
173 colIndex = colIdx;
174 };
175
176 // act
177 markActiveColumns.markActiveColumn(3);
178
179 // assert
180 deepEqual(colIndex, 3,
181 'expected column index passed to onAfterActiveColumn');
182 });
183
184 module('mark_active_columns as configuration object');
185 test('Sanity checks', function() {
186 tf.destroy();
187 var hit = 0;
188 tf = new TableFilter('demo', {
189 base_path: '../dist/tablefilter/',
190 mark_active_columns: {
191 header_css_class: 'myCssClass',
192 on_before_active_column: function(feature, colIndex) {
193 hit = colIndex;
194 },
195 on_after_active_column: function(feature, colIndex) {
196 hit = colIndex;
197 }
198 }
199 });
200 tf.init();
201 var markActiveColumns = tf.feature('markActiveColumns');
202
203 deepEqual(tf instanceof TableFilter, true, 'TableFilter instanciated');
204 notEqual(markActiveColumns, null, 'markActiveColumns instanciated');
205 deepEqual(tf.markActiveColumns, true, 'markActiveColumns property');
206
207 test('Custom header CSS class', function() {
208 // setup
209 tf.setFilterValue(1, 'Bri');
210 tf.setFilterValue(3, '>2');
211 var header1 = tf.getHeaderElement(1);
212 var header3 = tf.getHeaderElement(3);
213
214 // act
215 tf.filter();
216
217 // assert
218 deepEqual(
219 header1.className.indexOf('myCssClass') !== -1,
220 true,
221 'Active filter indicator');
222 deepEqual(
223 header3.className.indexOf('myCssClass') !== -1,
224 true,
225 'Active filter indicator');
226 });
227
228 test('on_before_active_column callback', function() {
229 // setup
230 tf.clearFilters();
231 tf.setFilterValue(1, 'Bri');
232
233 // act
234 tf.filter();
235
236 // assert
237 deepEqual(hit, 1,
238 'expected column index passed to on_before_active_column');
239 });
240
241 test('on_after_active_column callback', function() {
242 // setup
243 tf.clearFilters();
244 tf.setFilterValue(3, '>2');
245
246 // act
247 tf.filter();
248
249 // assert
250 deepEqual(hit, 3,
251 'expected column index passed to on_after_active_column');
252 });
253
254 module('Tear-down');
255 test('can destroy', function() {
256 tf.destroy();
257 deepEqual(tf.isInitialized(), false, 'Filters removed');
258 });
259 });
260
261})(window, TableFilter);