1 |
|
2 | module('Sanity checks');
|
3 | test('No Results Feature', function() {
|
4 | var tf = new TableFilter('demo0', {
|
5 | base_path: '../dist/tablefilter/',
|
6 | no_results_message: true
|
7 | });
|
8 | tf.init();
|
9 | var noResults = tf.feature('noResults');
|
10 |
|
11 | deepEqual(tf instanceof TableFilter, true, 'TableFilter instantiated');
|
12 | notEqual(noResults, null, 'noResults instantiated');
|
13 | deepEqual(tf.noResults, true, 'noResults property');
|
14 |
|
15 | module('Feature interface');
|
16 | test('Properties', function() {
|
17 | deepEqual(noResults.tf instanceof TableFilter, true,
|
18 | 'TableFilter instance');
|
19 | deepEqual(noResults.feature, 'noResults', 'Feature name');
|
20 | deepEqual(noResults.enabled, true, 'Feature enabled');
|
21 | deepEqual(noResults.initialized, true, 'Feature initialized');
|
22 | deepEqual(typeof noResults.emitter, 'object',
|
23 | 'Feature has emitter instance');
|
24 | deepEqual(typeof noResults.config, 'object', 'TF configuration object');
|
25 | deepEqual(typeof noResults.init, 'function', 'Feature init method');
|
26 | deepEqual(typeof noResults.destroy, 'function',
|
27 | 'Feature destroy method');
|
28 | deepEqual(typeof noResults.reset, 'function', 'Feature reset method');
|
29 | deepEqual(typeof noResults.enable, 'function', 'Feature enable method');
|
30 | deepEqual(typeof noResults.disable, 'function',
|
31 | 'Feature enable method');
|
32 | deepEqual(typeof noResults.isEnabled, 'function',
|
33 | 'Feature enable method');
|
34 | });
|
35 | test('Can destroy', function() {
|
36 | noResults.destroy();
|
37 | deepEqual(noResults.initialized, false, 'not initialised');
|
38 | });
|
39 | test('Can reset', function() {
|
40 | noResults.reset();
|
41 | deepEqual(noResults.enabled, true, 'enabled');
|
42 | });
|
43 | test('Can disable', function() {
|
44 | noResults.disable();
|
45 | deepEqual(noResults.enabled, false, 'disabled');
|
46 | });
|
47 | test('Can enable', function() {
|
48 | noResults.enable();
|
49 | deepEqual(noResults.enabled, true, 'enabled');
|
50 | });
|
51 | test('Can init', function() {
|
52 | noResults.destroy();
|
53 | noResults.enable();
|
54 | noResults.init();
|
55 | deepEqual(noResults.enabled, true, 'enabled');
|
56 | });
|
57 | test('Can check is enabled', function() {
|
58 | noResults.isEnabled();
|
59 | deepEqual(noResults.enabled, true, 'enabled');
|
60 | });
|
61 |
|
62 | module('Behaviour');
|
63 | test('Can display no results message', function() {
|
64 | tf.setFilterValue(0, 'sadasd');
|
65 | tf.filter();
|
66 | deepEqual(tf.getValidRows().length, 0, 'Filtered rows number');
|
67 | deepEqual(noResults.cont.innerHTML, 'No results', 'No results message');
|
68 | deepEqual(noResults.cont.style.display, 'block',
|
69 | 'No results message displayed');
|
70 | });
|
71 |
|
72 | test('Can hide no results message', function() {
|
73 | tf.clearFilters();
|
74 | deepEqual(tf.getValidRows().length, 7, 'Filtered rows number');
|
75 | deepEqual(noResults.cont.innerHTML, 'No results', 'No results message');
|
76 | deepEqual(noResults.cont.style.display, 'none', 'Message hidden');
|
77 | });
|
78 |
|
79 | test('can destroy TableFilter DOM elements', function() {
|
80 | tf.destroy();
|
81 | deepEqual(tf.isInitialized(), false, 'Filters removed');
|
82 | tf = null;
|
83 | });
|
84 | });
|
85 |
|
86 | module('Customisation');
|
87 | test('External container sanity checks', function() {
|
88 | var tfCustom = new TableFilter('demo1', {
|
89 | base_path: '../dist/tablefilter/',
|
90 | no_results_message: {
|
91 | custom_container: document.querySelector('#ext-cont'),
|
92 | content: '<h3>No results found</h3>',
|
93 | css_class: 'test'
|
94 | }
|
95 | });
|
96 | tfCustom.init();
|
97 | var noResultsCustom = tfCustom.feature('noResults');
|
98 |
|
99 | deepEqual(tfCustom instanceof TableFilter, true,
|
100 | 'TableFilter instanciated');
|
101 | notEqual(noResultsCustom, null, 'noResults instantiated');
|
102 | deepEqual(tfCustom.noResults, true, 'noResults property');
|
103 | deepEqual(noResultsCustom.cont.nodeName, 'DIV',
|
104 | 'external container element');
|
105 | deepEqual(noResultsCustom.cont.className, 'test',
|
106 | 'external container element CSS class');
|
107 |
|
108 | test('Can display external no results message', function() {
|
109 | tfCustom.setFilterValue(0, 'sadasd');
|
110 | tfCustom.filter();
|
111 | deepEqual(noResultsCustom.cont.innerHTML, '<h3>No results found</h3>',
|
112 | 'No results message markup');
|
113 | deepEqual(noResultsCustom.cont.style.display, 'block',
|
114 | 'No results message displayed');
|
115 | });
|
116 |
|
117 | test('Can hide external no results message', function() {
|
118 | tfCustom.clearFilters();
|
119 | deepEqual(tfCustom.getValidRows().length, 7, 'Filtered rows number');
|
120 | deepEqual(noResultsCustom.cont.style.display, 'none', 'Message hidden');
|
121 | });
|
122 |
|
123 | test('can destroy TableFilter DOM elements', function() {
|
124 | tfCustom.destroy();
|
125 | deepEqual(tfCustom.isInitialized(), false, 'Filters removed');
|
126 | tfCustom = null;
|
127 | });
|
128 | });
|
129 |
|
130 | module('Integration with grid layout');
|
131 | test('Sanity checks', function() {
|
132 | var tfGl = new TableFilter('demo2', {
|
133 | base_path: '../dist/tablefilter/',
|
134 | grid_layout: true,
|
135 | no_results_message: true
|
136 | });
|
137 | tfGl.init();
|
138 | var noResultsGl = tfGl.feature('noResults');
|
139 | var gridLayout = tfGl.feature('gridLayout');
|
140 |
|
141 | deepEqual(tfGl instanceof TableFilter, true, 'TableFilter instanciated');
|
142 | notEqual(noResultsGl, null, 'noResults instantiated');
|
143 | deepEqual(tfGl.noResults, true, 'noResults property');
|
144 | deepEqual(noResultsGl.cont.nodeName, 'DIV', 'Container element');
|
145 | deepEqual(noResultsGl.cont.className, 'no-results',
|
146 | 'Container element default CSS class');
|
147 |
|
148 | test('Can display no results message in grid layout', function() {
|
149 | tfGl.setFilterValue(0, 'sadasd');
|
150 | tfGl.filter();
|
151 | deepEqual(noResultsGl.cont.innerHTML, 'No results',
|
152 | 'No results message');
|
153 | deepEqual(noResultsGl.cont.style.display, 'block',
|
154 | 'No results message displayed');
|
155 | deepEqual(
|
156 | parseInt(noResultsGl.cont.style.width, 10),
|
157 | gridLayout.headTbl.clientWidth,
|
158 | 'Container element width'
|
159 | );
|
160 | });
|
161 |
|
162 | test('Can hide no results message', function() {
|
163 | tfGl.clearFilters();
|
164 | deepEqual(noResultsGl.cont.style.display, 'none', 'Message hidden');
|
165 | });
|
166 |
|
167 | test('can destroy TableFilter DOM elements', function() {
|
168 | tfGl.destroy();
|
169 | deepEqual(tfGl.isInitialized(), false, 'Filters removed');
|
170 | tfGl = null;
|
171 | });
|
172 | });
|
173 |
|
174 | module('Callbacks');
|
175 | test('External container sanity checks', function() {
|
176 | var tfCall = new TableFilter('demo3', {
|
177 | base_path: '../dist/tablefilter/',
|
178 | no_results_message: {
|
179 | on_before_show_msg: function(tfCall, noResultsCall) {
|
180 | callback(tfCall, noResultsCall, 'onBeforeShowMessage');
|
181 | },
|
182 | on_after_show_msg: function(tfCall, noResultsCall) {
|
183 | callback(tfCall, noResultsCall, 'onAfterShowMessage');
|
184 | },
|
185 | on_before_hide_msg: function(tfCall, noResultsCall) {
|
186 | callback(tfCall, noResultsCall, 'onBeforeHideMessage');
|
187 | },
|
188 | on_after_hide_msg: function(tfCall, noResultsCall) {
|
189 | callback(tfCall, noResultsCall, 'onAfterHideMessage');
|
190 | }
|
191 | }
|
192 | });
|
193 | tfCall.init();
|
194 | var noResultsCall = tfCall.feature('noResults');
|
195 |
|
196 | deepEqual(tfCall instanceof TableFilter, true, 'TableFilter instanciated');
|
197 | notEqual(noResultsCall, null, 'noResults instantiated');
|
198 | deepEqual(tfCall.noResults, true, 'noResults property');
|
199 | deepEqual(noResultsCall.cont.nodeName, 'DIV', 'container element');
|
200 |
|
201 | tfCall.setFilterValue(0, 'sadasd');
|
202 | tfCall.filter();
|
203 |
|
204 | tfCall.setFilterValue(0, 'Sydney');
|
205 | tfCall.filter();
|
206 |
|
207 | function callback(tfCall, noResultsCall, type) {
|
208 | module('Callbacks');
|
209 | test(type, function() {
|
210 | deepEqual(tfCall instanceof TableFilter, true,
|
211 | 'First argument type');
|
212 | deepEqual(typeof noResultsCall.onBeforeShow, 'function',
|
213 | 'Second argument type');
|
214 | });
|
215 | }
|
216 |
|
217 | test('can destroy TableFilter DOM elements', function() {
|
218 | tfCall.destroy();
|
219 | deepEqual(tfCall.isInitialized(), false, 'Filters removed');
|
220 | tfCall = null;
|
221 | });
|
222 | });
|