1 |
|
2 | var tf = new TableFilter('demo', {
|
3 | base_path: '../dist/tablefilter/',
|
4 | col_types: [
|
5 | null, null, null,
|
6 | { type: 'formatted-number', decimal: ',', thousands: ','},
|
7 | 'formatted-number', null,
|
8 | { type: 'date', locale: 'fr', },
|
9 | { type: 'date', locale: 'en', format: '{dd}-{MM}-{yyyy|yy}' },
|
10 | { type: 'date', locale: 'en', format: ['{dd}-{months}-{yyyy|yy}'] },
|
11 | 'IpAddress'
|
12 | ]
|
13 | });
|
14 | tf.init();
|
15 |
|
16 | var dateType = tf.feature('dateType');
|
17 |
|
18 | module('Sanity checks');
|
19 | test('DateType feature', function() {
|
20 | deepEqual(typeof dateType, 'object', 'DateType instanciated');
|
21 | deepEqual(dateType.locale, 'en', 'DateType default locale');
|
22 | notEqual(dateType.datetime, null, 'Sugar date instance');
|
23 | });
|
24 |
|
25 | module('Feature interface');
|
26 | test('Properties', function() {
|
27 | deepEqual(dateType.tf instanceof TableFilter, true, 'TableFilter instance');
|
28 | deepEqual(dateType.feature, 'dateType', 'Feature name');
|
29 | deepEqual(dateType.enabled, true, 'Feature enabled');
|
30 | deepEqual(dateType.initialized, true, 'Feature enabled');
|
31 | deepEqual(typeof dateType.emitter, 'object',
|
32 | 'Feature has emitter instance');
|
33 | deepEqual(typeof dateType.config, 'object', 'TF configuration object');
|
34 | deepEqual(typeof dateType.init, 'function', 'Feature init method');
|
35 | deepEqual(typeof dateType.destroy, 'function', 'Feature destroy method');
|
36 | deepEqual(typeof dateType.reset, 'function', 'Feature reset method');
|
37 | deepEqual(typeof dateType.enable, 'function', 'Feature enable method');
|
38 | deepEqual(typeof dateType.disable, 'function', 'Feature enable method');
|
39 | deepEqual(typeof dateType.isEnabled, 'function', 'Feature enable method');
|
40 | });
|
41 |
|
42 | test('Can destroy', function() {
|
43 | dateType.destroy();
|
44 | deepEqual(dateType.initialized, false, 'not initialised');
|
45 | });
|
46 | test('Can reset', function() {
|
47 | dateType.reset();
|
48 | deepEqual(dateType.enabled, true, 'enabled');
|
49 | });
|
50 | test('Can disable', function() {
|
51 | dateType.disable();
|
52 | deepEqual(dateType.enabled, false, 'disabled');
|
53 | });
|
54 | test('Can enable', function() {
|
55 | dateType.enable();
|
56 | deepEqual(dateType.enabled, true, 'enabled');
|
57 | });
|
58 | test('Can init', function() {
|
59 | dateType.destroy();
|
60 | dateType.enable();
|
61 | dateType.init();
|
62 | deepEqual(dateType.initialized, true, 'initialised');
|
63 | });
|
64 | test('Can check is enabled', function() {
|
65 | dateType.isEnabled();
|
66 | deepEqual(dateType.enabled, true, 'enabled');
|
67 | });
|
68 |
|
69 | module('Behaviour');
|
70 | test('Can parse date', function() {
|
71 | var date0 = dateType.parse('10/25/2017', 'en-US');
|
72 | var date1 = dateType.parse('25/10/2017', 'en-GB');
|
73 | var date2 = dateType.parse('1997-07-16T19:20:30+01:00', 'en');
|
74 | var date3 = dateType.parse('14-Jul-2005', 'fr');
|
75 | var date4 = dateType.parse(null);
|
76 | var date5 = dateType.parse(undefined);
|
77 | var date6 = dateType.parse('');
|
78 |
|
79 | deepEqual(date0, new Date(2017, 9, 25, 0, 0, 0, 0), 'en-US date');
|
80 | deepEqual(date1, new Date(2017, 9, 25, 0, 0, 0, 0), 'en-GB date');
|
81 | deepEqual(date2.toISOString(), '1997-07-16T18:20:30.000Z', 'ISO date');
|
82 | deepEqual(date3, new Date(2005, 6, 14, 0, 0, 0, 0), 'fr date');
|
83 | deepEqual(date4.toISOString(), '1970-01-01T00:00:00.000Z', 'null date');
|
84 | deepEqual(date5 instanceof Date, true, 'undefined date');
|
85 | deepEqual(isNaN(date6), true, 'Invalid date');
|
86 | });
|
87 |
|
88 | test('Can validate date', function() {
|
89 | var v0 = dateType.isValid('10/25/2017', 'en-US');
|
90 | var v1 = dateType.isValid('25/10/2017', 'en-GB');
|
91 | var v2 = dateType.isValid('1997-07-16T19:20:30+01:00', 'en');
|
92 | var v3 = dateType.isValid('14-Jul-2005', 'fr');
|
93 | var v4 = dateType.isValid('hello', 'en');
|
94 | var v5 = dateType.isValid(null, 'en');
|
95 | var v6 = dateType.isValid(undefined, 'en');
|
96 | var v7 = dateType.isValid('');
|
97 |
|
98 | deepEqual(v0, true, 'valid en-US date');
|
99 | deepEqual(v1, true, 'valid en-GB date');
|
100 | deepEqual(v2, true, 'valid ISO date');
|
101 | deepEqual(v3, true, 'valid fr date');
|
102 | deepEqual(v4, false, 'Invalid date');
|
103 | deepEqual(v5, true, 'Valid date');
|
104 | deepEqual(v6, true, 'Valid date');
|
105 | deepEqual(v7, false, 'Invalid date');
|
106 | });
|
107 |
|
108 | test('Can get column date type options', function() {
|
109 | var opts0 = dateType.getOptions(0);
|
110 | var opts8 = dateType.getOptions(8);
|
111 | var opts99 = dateType.getOptions(99);
|
112 | var opts = dateType.getOptions(0, [{ type: 'date'}]);
|
113 |
|
114 | deepEqual(opts0, {}, 'no column date type options');
|
115 | deepEqual(
|
116 | opts8,
|
117 | { type: 'date', locale: 'en', format: ['{dd}-{months}-{yyyy|yy}'] },
|
118 | 'column options'
|
119 | );
|
120 | deepEqual(opts99, {}, 'out of range column index');
|
121 | deepEqual(opts, {type: 'date'}, 'column date type from passed collection');
|
122 | });
|
123 |
|
124 | test('Can add date formats from config', function() {
|
125 | var nbFormats = dateType.datetime.getLocale('fr').compiledFormats.length;
|
126 |
|
127 | dateType.addConfigFormats([{
|
128 | type: 'date', locale: 'fr',
|
129 | format: ['{dd}-{months}-{yyyy|yy}']
|
130 | }]);
|
131 |
|
132 | deepEqual(
|
133 | dateType.datetime.getLocale('fr').compiledFormats.length,
|
134 | nbFormats+1,
|
135 | 'Expected number of formats for current locale'
|
136 | );
|
137 | });
|
138 |
|
139 | test('Can get locale for a column index retrieved from config', function() {
|
140 |
|
141 | var result = dateType.getLocale(6);
|
142 |
|
143 |
|
144 | deepEqual(result, 'fr', 'Locale for given column');
|
145 | });
|
146 |
|
147 | test('Can get locale for a column index from global setting', function() {
|
148 |
|
149 | var result = dateType.getLocale(1);
|
150 |
|
151 |
|
152 | deepEqual(result, 'en', 'Locale for given column');
|
153 | });
|
154 |
|
155 | module('Tear-down');
|
156 | test('can destroy TableFilter DOM elements', function() {
|
157 | tf.destroy();
|
158 | deepEqual(tf.isInitialized(), false, 'Filters removed');
|
159 | });
|