UNPKG

5.83 kBJavaScriptView Raw
1
2var 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});
14tf.init();
15
16var dateType = tf.feature('dateType');
17
18module('Sanity checks');
19test('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
25module('Feature interface');
26test('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
42test('Can destroy', function() {
43 dateType.destroy();
44 deepEqual(dateType.initialized, false, 'not initialised');
45});
46test('Can reset', function() {
47 dateType.reset();
48 deepEqual(dateType.enabled, true, 'enabled');
49});
50test('Can disable', function() {
51 dateType.disable();
52 deepEqual(dateType.enabled, false, 'disabled');
53});
54test('Can enable', function() {
55 dateType.enable();
56 deepEqual(dateType.enabled, true, 'enabled');
57});
58test('Can init', function() {
59 dateType.destroy();
60 dateType.enable();
61 dateType.init();
62 deepEqual(dateType.initialized, true, 'initialised');
63});
64test('Can check is enabled', function() {
65 dateType.isEnabled();
66 deepEqual(dateType.enabled, true, 'enabled');
67});
68
69module('Behaviour');
70test('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
88test('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
108test('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
124test('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
139test('Can get locale for a column index retrieved from config', function() {
140 // act
141 var result = dateType.getLocale(6);
142
143 // assert
144 deepEqual(result, 'fr', 'Locale for given column');
145});
146
147test('Can get locale for a column index from global setting', function() {
148 // act
149 var result = dateType.getLocale(1);
150
151 // assert
152 deepEqual(result, 'en', 'Locale for given column');
153});
154
155module('Tear-down');
156test('can destroy TableFilter DOM elements', function() {
157 tf.destroy();
158 deepEqual(tf.isInitialized(), false, 'Filters removed');
159});