ejv 1.1.9 → 1.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,829 +1,832 @@
1
- import { expect } from 'chai';
2
-
3
- import { commonTestRunner } from './common-test-runner';
4
-
5
- import {
6
- arrayTester,
7
- arrayTypeOfTester,
8
- booleanTester,
9
- dateFormatTester,
10
- dateTester,
11
- dateTimeFormatTester,
12
- definedTester,
13
- emailTester,
14
- enumTester,
15
- exclusiveMaxDateTester,
16
- exclusiveMaxNumberTester,
17
- exclusiveMinDateTester,
18
- exclusiveMinNumberTester,
19
- hasPropertyTester,
20
- indexTester,
21
- integerTester, lengthTester,
22
- maxDateTester,
23
- maxLengthTester,
24
- maxNumberTester,
25
- minDateTester,
26
- minLengthTester,
27
- minNumberTester,
28
- numberTester,
29
- objectTester,
30
- regExpTester,
31
- stringRegExpTester,
32
- stringTester,
33
- timeFormatTester,
34
- uniqueItemsTester
35
- } from '../src/tester';
36
- import { DataType } from '../src/constants';
37
-
38
- describe('testers', function () {
39
- describe('common', () => {
40
- describe('definedTester()', () => {
41
- it('common test', () => {
42
- expect(commonTestRunner(
43
- definedTester,
44
- true,
45
- false,
46
- true,
47
- true,
48
- true,
49
- true,
50
- true
51
- )).to.be.true;
52
- });
53
- });
54
-
55
- describe('enumTester()', () => {
56
- it('logic test', () => {
57
- expect(enumTester('a', ['a', 'b', 'c'])).to.be.true;
58
- expect(enumTester('a', ['b', 'c'])).to.be.false;
59
-
60
- expect(enumTester(1, [1, 2, 3])).to.be.true;
61
- expect(enumTester(1, [2, 3])).to.be.false;
62
- });
63
- });
64
-
65
- describe('lengthTester()', () => {
66
- it('logic test', () => {
67
- expect(lengthTester('abcd', 3)).to.be.false;
68
- expect(lengthTester('abcd', 4)).to.be.true;
69
- expect(lengthTester('abcd', 5)).to.be.false;
70
-
71
- expect(lengthTester([1, 2, 3, 4], 3)).to.be.false;
72
- expect(lengthTester([1, 2, 3, 4], 4)).to.be.true;
73
- expect(lengthTester([1, 2, 3, 4], 5)).to.be.false;
74
- });
75
- });
76
-
77
- describe('minLengthTester()', () => {
78
- it('logic test', () => {
79
- expect(minLengthTester('abcd', 3)).to.be.true;
80
- expect(minLengthTester('abcd', 4)).to.be.true;
81
- expect(minLengthTester('abcd', 5)).to.be.false;
82
-
83
- expect(minLengthTester([1, 2, 3, 4], 3)).to.be.true;
84
- expect(minLengthTester([1, 2, 3, 4], 4)).to.be.true;
85
- expect(minLengthTester([1, 2, 3, 4], 5)).to.be.false;
86
- });
87
- });
88
-
89
- describe('maxLengthTester()', () => {
90
- it('logic test', () => {
91
- expect(maxLengthTester('abcd', 3)).to.be.false;
92
- expect(maxLengthTester('abcd', 4)).to.be.true;
93
- expect(maxLengthTester('abcd', 5)).to.be.true;
94
-
95
- expect(maxLengthTester([1, 2, 3, 4], 3)).to.be.false;
96
- expect(maxLengthTester([1, 2, 3, 4], 4)).to.be.true;
97
- expect(maxLengthTester([1, 2, 3, 4], 5)).to.be.true;
98
- });
99
- });
100
- });
101
-
102
- describe('boolean', () => {
103
- describe('booleanTester()', () => {
104
- it('common test', () => {
105
- expect(commonTestRunner(
106
- booleanTester,
107
- false,
108
- false,
109
- true,
110
- false,
111
- false,
112
- false,
113
- false
114
- )).to.be.true;
115
- });
116
-
117
- it('logic test', () => {
118
- expect(booleanTester(true)).to.be.true;
119
- expect(booleanTester(false)).to.be.true;
120
-
121
- expect(booleanTester('true')).to.be.false;
122
- expect(booleanTester('false')).to.be.false;
123
-
124
- expect(booleanTester(1)).to.be.false;
125
- expect(booleanTester(0)).to.be.false;
126
- });
127
- });
128
- });
129
-
130
- describe('number', () => {
131
- describe('numberTester()', () => {
132
- it('common test', () => {
133
- expect(commonTestRunner(
134
- numberTester,
135
- false,
136
- false,
137
- false,
138
- true,
139
- false,
140
- false,
141
- false
142
- )).to.be.true;
143
- });
144
-
145
- it('logic test', () => {
146
- expect(numberTester(true)).to.be.false;
147
- expect(numberTester(null)).to.be.false;
148
-
149
- expect(numberTester(-10.6)).to.be.true;
150
- expect(numberTester(-1)).to.be.true;
151
- expect(numberTester(0)).to.be.true;
152
- expect(numberTester(5)).to.be.true;
153
- expect(numberTester(5.5)).to.be.true;
154
-
155
- expect(numberTester('8')).to.be.false;
156
- expect(numberTester('8.5')).to.be.false;
157
- });
158
- });
159
-
160
- describe('integerTester()', () => {
161
- it('logic test', () => {
162
- expect(integerTester(-10.6)).to.be.false;
163
- expect(integerTester(-1)).to.be.true;
164
- expect(integerTester(0)).to.be.true;
165
- expect(integerTester(5)).to.be.true;
166
- expect(integerTester(5.5)).to.be.false;
167
- });
168
- });
169
-
170
- describe('indexTester()', () => {
171
- it('logic test', () => {
172
- expect(indexTester(-10.6)).to.be.false;
173
- expect(indexTester(-1)).to.be.false;
174
- expect(indexTester(0)).to.be.true;
175
- expect(indexTester(5)).to.be.true;
176
- expect(indexTester(5.5)).to.be.false;
177
- });
178
- });
179
-
180
- describe('minNumberTester()', () => {
181
- it('logic test', () => {
182
- expect(minNumberTester(-11, -12)).to.be.true;
183
- expect(minNumberTester(-11, -11)).to.be.true;
184
- expect(minNumberTester(-11, -10)).to.be.false;
185
-
186
- expect(minNumberTester(0, -1)).to.be.true;
187
- expect(minNumberTester(0, 0)).to.be.true;
188
- expect(minNumberTester(0, 1)).to.be.false;
189
-
190
- expect(minNumberTester(50, 49.9)).to.be.true;
191
- expect(minNumberTester(50, 50)).to.be.true;
192
- expect(minNumberTester(50, 50.1)).to.be.false;
193
- });
194
- });
195
-
196
- describe('exclusiveMinNumberTester()', () => {
197
- it('logic test', () => {
198
- expect(exclusiveMinNumberTester(-11, -12)).to.be.true;
199
- expect(exclusiveMinNumberTester(-11, -11)).to.be.false;
200
- expect(exclusiveMinNumberTester(-11, -10)).to.be.false;
201
-
202
- expect(exclusiveMinNumberTester(0, -1)).to.be.true;
203
- expect(exclusiveMinNumberTester(0, 0)).to.be.false;
204
- expect(exclusiveMinNumberTester(0, 1)).to.be.false;
205
-
206
- expect(exclusiveMinNumberTester(50, 49.9)).to.be.true;
207
- expect(exclusiveMinNumberTester(50, 50)).to.be.false;
208
- expect(exclusiveMinNumberTester(50, 50.1)).to.be.false;
209
- });
210
- });
211
-
212
- describe('maxNumberTester()', () => {
213
- it('logic test', () => {
214
- expect(maxNumberTester(-11, -12)).to.be.false;
215
- expect(maxNumberTester(-11, -11)).to.be.true;
216
- expect(maxNumberTester(-11, -10)).to.be.true;
217
-
218
- expect(maxNumberTester(0, -1)).to.be.false;
219
- expect(maxNumberTester(0, 0)).to.be.true;
220
- expect(maxNumberTester(0, 1)).to.be.true;
221
-
222
- expect(maxNumberTester(50, 49.9)).to.be.false;
223
- expect(maxNumberTester(50, 50)).to.be.true;
224
- expect(maxNumberTester(50, 50.1)).to.be.true;
225
- });
226
- });
227
-
228
- describe('exclusiveMaxNumberTester()', () => {
229
- it('logic test', () => {
230
- expect(exclusiveMaxNumberTester(-11, -12)).to.be.false;
231
- expect(exclusiveMaxNumberTester(-11, -11)).to.be.false;
232
- expect(exclusiveMaxNumberTester(-11, -10)).to.be.true;
233
-
234
- expect(exclusiveMaxNumberTester(0, -1)).to.be.false;
235
- expect(exclusiveMaxNumberTester(0, 0)).to.be.false;
236
- expect(exclusiveMaxNumberTester(0, 1)).to.be.true;
237
-
238
- expect(exclusiveMaxNumberTester(50, 49.9)).to.be.false;
239
- expect(exclusiveMaxNumberTester(50, 50)).to.be.false;
240
- expect(exclusiveMaxNumberTester(50, 50.1)).to.be.true;
241
- });
242
- });
243
- });
244
-
245
- describe('string', () => {
246
- describe('stringTester()', () => {
247
- it('common test', () => {
248
- expect(commonTestRunner(
249
- stringTester,
250
- false,
251
- false,
252
- false,
253
- false,
254
- true,
255
- false,
256
- false
257
- )).to.be.true;
258
- });
259
-
260
- it('logic test', () => {
261
- expect(stringTester('')).to.be.true;
262
- expect(stringTester(' ')).to.be.true;
263
- expect(stringTester('hello')).to.be.true;
264
- });
265
- });
266
-
267
- describe('stringRegExpTester()', () => {
268
- it('logic test', () => {
269
- expect(stringRegExpTester('abc', /abc/)).to.be.true;
270
- expect(stringRegExpTester('abc', /abcd/)).to.be.false;
271
-
272
- expect(stringRegExpTester('abc', new RegExp('abc'))).to.be.true;
273
- expect(stringRegExpTester('abc', new RegExp('abcd'))).to.be.false;
274
- });
275
- });
276
-
277
- describe('emailTester()', () => {
278
- it('logic test', () => {
279
- expect(emailTester('')).to.be.false;
280
- expect(emailTester(' ')).to.be.false;
281
- expect(emailTester('hello')).to.be.false;
282
- expect(emailTester('hello@')).to.be.false;
283
- expect(emailTester('hello@domain')).to.be.true;
284
- expect(emailTester('hello@domain.')).to.be.false;
285
- expect(emailTester('hello@domain.com')).to.be.true;
286
- expect(emailTester('hello@domain.com.')).to.be.false;
287
- expect(emailTester('hello@domain.com.another')).to.be.true;
288
-
289
- expect(emailTester('prettyandsimple@example.com')).to.be.true;
290
- expect(emailTester('very.common@example.com')).to.be.true;
291
- expect(emailTester('disposable.style.email.with+symbol@example.com')).to.be.true;
292
- expect(emailTester('other.email-with-dash@example.com')).to.be.true;
293
- expect(emailTester('x@example.com')).to.be.true;
294
- expect(emailTester('"much.more unusual"@example.com')).to.be.true;
295
- expect(emailTester('"very.unusual.@.unusual.com"@example.com')).to.be.true;
296
- expect(emailTester('example-indeed@strange-example.com')).to.be.true;
297
- expect(emailTester('admin@mailserver1')).to.be.true;
298
- expect(emailTester('#!$%&\'*+-/=?^_`{}|~@example.org')).to.be.true;
299
- expect(emailTester('"()<>[]:,;@\\\\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org')).to.be.true;
300
- expect(emailTester('" "@example.org')).to.be.true;
301
- expect(emailTester('example@localhost')).to.be.true;
302
- expect(emailTester('example@s.solutions')).to.be.true;
303
- expect(emailTester('user@localserver')).to.be.true;
304
- expect(emailTester('user@tt')).to.be.true;
305
- expect(emailTester('user@[IPv6:2001:DB8::1]')).to.be.true;
306
-
307
- expect(emailTester('Abc.example.com')).to.be.false;
308
- expect(emailTester('A@b@c@example.com')).to.be.false;
309
- expect(emailTester('"A@b@c"@example.com')).to.be.true;
310
-
311
- expect(emailTester('a"b(c)d,e:f;g<h>i[j\\k]l@example.com')).to.be.false;
312
- expect(emailTester('just"not"right@example.com')).to.be.false;
313
- expect(emailTester('this is"not\allowed@example.com')).to.be.false;
314
- expect(emailTester('this\ still\"not\\allowed@example.com')).to.be.false;
315
- expect(emailTester('1234567890123456789012345678901234567890123456789012345678901234+x@example.com')).to.be.false;
316
- expect(emailTester('john..doe@example.com')).to.be.false;
317
- expect(emailTester('john.doe@example..com')).to.be.false;
318
-
319
- expect(emailTester(' ejv@ejv.com')).to.be.false;
320
- expect(emailTester('ejv@ejv.com ')).to.be.false;
321
- });
322
- });
323
-
324
- describe('dateFormatTester()', () => {
325
- it('logic test', () => {
326
- //// ISO 8601
327
- // year
328
- expect(dateFormatTester('100')).to.be.false;
329
- expect(dateFormatTester('1000')).to.be.true;
330
- expect(dateFormatTester('+2000')).to.be.true;
331
- expect(dateFormatTester('-2000')).to.be.true;
332
-
333
- // calendar date
334
- expect(dateFormatTester('2018-1-17')).to.be.false;
335
- expect(dateFormatTester('2018-12-32')).to.be.false;
336
- expect(dateFormatTester('2018-12-17')).to.be.true;
337
- expect(dateFormatTester('2018-13-17')).to.be.false;
338
- expect(dateFormatTester('2018-12-7')).to.be.false;
339
-
340
- // expect(dateFormatTester('2018117')).to.be.false; // matching for ordinal dates
341
- expect(dateFormatTester('20181217')).to.be.true;
342
- expect(dateFormatTester('20181317')).to.be.false;
343
- expect(dateFormatTester('20181232')).to.be.false;
344
-
345
- expect(dateFormatTester('2018-1')).to.be.false;
346
- expect(dateFormatTester('2018-12')).to.be.true;
347
- expect(dateFormatTester('2018-13')).to.be.false;
348
-
349
- expect(dateFormatTester('--1-17')).to.be.false;
350
- expect(dateFormatTester('--12-1')).to.be.false;
351
- expect(dateFormatTester('--12-17')).to.be.true;
352
- expect(dateFormatTester('--13-17')).to.be.false;
353
- expect(dateFormatTester('--12-32')).to.be.false;
354
-
355
- expect(dateFormatTester('--117')).to.be.false;
356
- expect(dateFormatTester('--1317')).to.be.false;
357
- expect(dateFormatTester('--1232')).to.be.false;
358
- expect(dateFormatTester('--1217')).to.be.true;
359
-
360
- // week dates
361
- expect(dateFormatTester('2018-W01')).to.be.true;
362
- expect(dateFormatTester('2018-W53')).to.be.true;
363
-
364
- expect(dateFormatTester('2018-W00')).to.be.false;
365
- expect(dateFormatTester('2018-W54')).to.be.false;
366
-
367
- expect(dateFormatTester('2018-W01-3')).to.be.true;
368
- expect(dateFormatTester('2018-W53-7')).to.be.true;
369
-
370
- expect(dateFormatTester('2018-W01-0')).to.be.false;
371
- expect(dateFormatTester('2018-W53-8')).to.be.false;
372
-
373
- expect(dateFormatTester('2018W01')).to.be.true;
374
- expect(dateFormatTester('2018W53')).to.be.true;
375
-
376
- expect(dateFormatTester('2018W00')).to.be.false;
377
- expect(dateFormatTester('2018W54')).to.be.false;
378
-
379
- expect(dateFormatTester('2018W010')).to.be.false;
380
- expect(dateFormatTester('2018W538')).to.be.false;
381
-
382
- // ordinal dates
383
- expect(dateFormatTester('2018-052')).to.be.true;
384
-
385
- expect(dateFormatTester('2018-000')).to.be.false;
386
- expect(dateFormatTester('2018-367')).to.be.false;
387
-
388
- expect(dateFormatTester('2018052')).to.be.true;
389
-
390
- expect(dateFormatTester('2018000')).to.be.false;
391
- expect(dateFormatTester('2018367')).to.be.false;
392
- });
393
- });
394
-
395
- describe('timeFormatTester()', () => {
396
- it('logic test', () => {
397
- // hh:mm:ss.sss, hh:mm:ss
398
- expect(timeFormatTester('23:35:12.123')).to.be.true;
399
- expect(timeFormatTester('24:00:00')).to.be.true;
400
- expect(timeFormatTester('24:00:00.000')).to.be.true;
401
-
402
- expect(timeFormatTester('3:35:12.123')).to.be.false;
403
- expect(timeFormatTester('24:35:12.123')).to.be.false;
404
- expect(timeFormatTester('25:35:12.123')).to.be.false;
405
-
406
- expect(timeFormatTester('23:0:12.123')).to.be.false;
407
- expect(timeFormatTester('23:60:12.123')).to.be.false;
408
-
409
- expect(timeFormatTester('23:35:2.123')).to.be.false;
410
- expect(timeFormatTester('23:35:60.123')).to.be.true; // leap second
411
- expect(timeFormatTester('23:35:61.123')).to.be.false;
412
-
413
- expect(timeFormatTester('23:35:12')).to.be.true;
414
- expect(timeFormatTester('23:35:12.1')).to.be.true;
415
- expect(timeFormatTester('23:35:12.12')).to.be.true;
416
- expect(timeFormatTester('23:35:12.123')).to.be.true;
417
- expect(timeFormatTester('23:35:12.1234')).to.be.true;
418
- expect(timeFormatTester('23:35:12.12356789')).to.be.true;
419
-
420
- // hh:mm
421
- expect(timeFormatTester('23:52')).to.be.true;
422
- expect(timeFormatTester('24:00')).to.be.true;
423
-
424
- expect(timeFormatTester('2:52')).to.be.false;
425
- expect(timeFormatTester('24:52')).to.be.false;
426
-
427
- expect(timeFormatTester('23:2')).to.be.false;
428
- expect(timeFormatTester('23:60')).to.be.false;
429
-
430
- // hhmmss.sss, hhmmss
431
- expect(timeFormatTester('233512.123')).to.be.true;
432
- expect(timeFormatTester('240000')).to.be.true;
433
- expect(timeFormatTester('240000.000')).to.be.true;
434
-
435
- expect(timeFormatTester('33512.123')).to.be.false;
436
- expect(timeFormatTester('243512.123')).to.be.false;
437
- expect(timeFormatTester('253512.123')).to.be.false;
438
-
439
- expect(timeFormatTester('23012.123')).to.be.false;
440
- expect(timeFormatTester('236012.123')).to.be.false;
441
-
442
- expect(timeFormatTester('23352.123')).to.be.false;
443
- expect(timeFormatTester('233560.123')).to.be.true; // leap second
444
- expect(timeFormatTester('233561.123')).to.be.false;
445
-
446
- expect(timeFormatTester('233512')).to.be.true;
447
- expect(timeFormatTester('233512.1')).to.be.true;
448
- expect(timeFormatTester('233512.12')).to.be.true;
449
- expect(timeFormatTester('233512.123')).to.be.true;
450
- expect(timeFormatTester('233512.1234')).to.be.true;
451
- expect(timeFormatTester('233512.12356789')).to.be.true;
452
-
453
- // hhmm
454
- expect(timeFormatTester('2352')).to.be.true;
455
- expect(timeFormatTester('2400')).to.be.true;
456
-
457
- expect(timeFormatTester('252')).to.be.false;
458
- expect(timeFormatTester('2452')).to.be.false;
459
-
460
- expect(timeFormatTester('2360')).to.be.false;
461
-
462
- // hh
463
- expect(timeFormatTester('00')).to.be.true;
464
- expect(timeFormatTester('05')).to.be.true;
465
- expect(timeFormatTester('24')).to.be.true;
466
-
467
- expect(timeFormatTester('25')).to.be.false;
468
- });
469
- });
470
-
471
- describe('dateTimeFormatTester()', () => {
472
- it('logic test', () => {
473
- // RFC 3339
474
- expect(dateTimeFormatTester('2018-12-16T05:04:05')).to.be.true;
475
- expect(dateTimeFormatTester('2018-12-16T05:04:05.51')).to.be.true;
476
- expect(dateTimeFormatTester('2018-12-16T05:04:05.51Z')).to.be.true;
477
- expect(dateTimeFormatTester('2018-12-16T05:04:05+09:00')).to.be.true;
478
-
479
- expect(dateTimeFormatTester('2018-12-16T03:34:21')).to.be.true;
480
- expect(dateTimeFormatTester('2018-12-16T03:34:21Z')).to.be.true;
481
- expect(dateTimeFormatTester('2018-12-16T03:34:21.000')).to.be.true;
482
- expect(dateTimeFormatTester('2018-12-16T03:34:21.000Z')).to.be.true;
483
- expect(dateTimeFormatTester('2018-12-16T03:34:21.000+09:00')).to.be.true;
484
- expect(dateTimeFormatTester('2018-12-16T03:34:21.000-08:00')).to.be.true;
485
-
486
- expect(dateTimeFormatTester('2018-00-16T03:34:21')).to.be.false;
487
- expect(dateTimeFormatTester('2018-13-16T03:34:21')).to.be.false;
488
- expect(dateTimeFormatTester('2018-1-16T03:34:21')).to.be.false;
489
- expect(dateTimeFormatTester('2018-12-6T03:34:21')).to.be.false;
490
- expect(dateTimeFormatTester('2018-12-32T03:34:21')).to.be.false;
491
- expect(dateTimeFormatTester('2018-12-16T0:34:21')).to.be.false;
492
- expect(dateTimeFormatTester('2018-12-16T24:34:21')).to.be.false;
493
- expect(dateTimeFormatTester('2018-12-16T03:4:21')).to.be.false;
494
- expect(dateTimeFormatTester('2018-12-16T03:60:21')).to.be.false;
495
- expect(dateTimeFormatTester('2018-12-16T03:34:1')).to.be.false;
496
- expect(dateTimeFormatTester('2018-12-16T03:34:60')).to.be.false;
497
- expect(dateTimeFormatTester('2018-12-16T03:34:21.')).to.be.false;
498
-
499
- // // leap second inserted
500
- // expect(dateTimeFormatTester('1990-12-31T23:59:60Z')).to.be.true;
501
- // expect(dateTimeFormatTester('1990-12-31T15:59:60-08:00')).to.be.true;
502
-
503
- // ISO 8601
504
- expect(dateTimeFormatTester('20181219T00:38:05Z')).to.be.true;
505
- expect(dateTimeFormatTester('20181219T00:38:05+00:00')).to.be.true;
506
- });
507
- });
508
- });
509
-
510
- // describe('urlTester()', () => {
511
- // it('common test', () => {
512
- // expect(commonTestRunner(
513
- // urlTester,
514
- // false,
515
- // false,
516
- // false,
517
- // false,
518
- // false,
519
- // false,
520
- // false
521
- // )).to.be.true;
522
- // });
523
- //
524
- // it('logic test', () => {
525
- // expect(urlTester('')).to.be.false;
526
- // expect(urlTester(' ')).to.be.false;
527
- // expect(urlTester('hello')).to.be.false;
528
- // expect(urlTester('http://hello')).to.be.false;
529
- // expect(urlTester('https://hello')).to.be.false;
530
- // expect(urlTester('http://hello.com')).to.be.true;
531
- // expect(urlTester('http://hello.com/')).to.be.true;
532
- // expect(urlTester('http://hello.com/#1')).to.be.true;
533
- // expect(urlTester('http://hello.com/child')).to.be.true;
534
- // expect(urlTester('http://hello.com/child/grand')).to.be.true;
535
- // expect(urlTester('http://hello.com/child/grand?query=some')).to.be.true;
536
- // expect(urlTester('http://hello.com/child/grand(some:angular)')).to.be.true;
537
- // });
538
- // });
539
- //
540
- // describe('ipv4Tester()', () => {
541
- // it('common test', () => {
542
- // expect(commonTestRunner(
543
- // ipv4Tester,
544
- // false,
545
- // false,
546
- // false,
547
- // false,
548
- // false,
549
- // false,
550
- // false
551
- // )).to.be.true;
552
- // });
553
- //
554
- // it('logic test', () => {
555
- // expect(ipv4Tester('')).to.be.false;
556
- // expect(ipv4Tester(' ')).to.be.false;
557
- // expect(ipv4Tester('127.0.0')).to.be.false;
558
- // expect(ipv4Tester('127.0.0.1')).to.be.true;
559
- // expect(ipv4Tester('256.0.0.1')).to.be.false;
560
- // expect(ipv4Tester('255.-1.0.1')).to.be.false;
561
- // expect(ipv4Tester('255.256.267.1')).to.be.false;
562
- // expect(ipv4Tester('255.255.255.0')).to.be.true;
563
- // expect(ipv4Tester('255.255.255.0.5')).to.be.false;
564
- // });
565
- // });
566
- //
567
- // describe('ipv6Tester()', () => {
568
- // it('common test', () => {
569
- // expect(commonTestRunner(
570
- // ipv6Tester,
571
- // false,
572
- // false,
573
- // false,
574
- // false,
575
- // false,
576
- // false,
577
- // false
578
- // )).to.be.true;
579
- // });
580
- //
581
- // it('logic test', () => {
582
- // expect(ipv6Tester('')).to.be.false;
583
- // expect(ipv6Tester(' ')).to.be.false;
584
- // expect(ipv6Tester('127.0.0')).to.be.false;
585
- // // expect(ipv6Tester('1762:0:0:0:0:B03:1:AF18')).to.be.true;
586
- // // expect(ipv6Tester('fe80:0000:0000:0000:0204:61ff:fe9d:f156/1')).to.be.true;
587
- // expect(ipv6Tester('1200:0000:AB00:1234:O000:2552:7777:1313')).to.be.false; // has invalid character
588
- // });
589
- // });
590
-
591
- describe('object', () => {
592
- describe('objectTester()', () => {
593
- it('common test', () => {
594
- expect(commonTestRunner(
595
- objectTester,
596
- true, // null is object
597
- false,
598
- false,
599
- false,
600
- false,
601
- true, // array is object
602
- true
603
- )).to.be.true;
604
- });
605
-
606
- it('logic test', () => {
607
- expect(objectTester(null)).to.be.true;
608
- expect(objectTester({})).to.be.true;
609
- expect(objectTester({ a : 1 })).to.be.true;
610
- });
611
- });
612
-
613
- describe('hasPropertyTester()', () => {
614
- it('logic test', () => {
615
- expect(hasPropertyTester({})).to.be.false;
616
- expect(hasPropertyTester({ a : 1 })).to.be.true;
617
- });
618
- });
619
- });
620
-
621
- describe('date', () => {
622
- const now : Date = new Date();
623
-
624
- const year : number = now.getFullYear();
625
- const month : number = now.getMonth();
626
- const date : number = now.getDate();
627
-
628
- const hours : number = now.getHours();
629
- const minutes : number = now.getMinutes();
630
- const seconds : number = now.getSeconds();
631
- const ms : number = now.getMilliseconds();
632
-
633
- describe('dateTester()', () => {
634
- it('common test', () => {
635
- expect(commonTestRunner(
636
- dateTester,
637
- false,
638
- false,
639
- false,
640
- false,
641
- false,
642
- false,
643
- false
644
- )).to.be.true;
645
- });
646
-
647
- it('logic test', () => {
648
- expect(dateTester(new Date)).to.be.true;
649
- expect(dateTester((new Date).toISOString())).to.be.false;
650
- });
651
- });
652
-
653
- it('minDateTester()', () => {
654
- expect(minDateTester(
655
- new Date(year, month, date),
656
- new Date(year, month, date - 1)
657
- )).to.be.true;
658
- expect(minDateTester(
659
- new Date(year, month, date),
660
- new Date(year, month, date)
661
- )).to.be.true;
662
- expect(minDateTester(
663
- new Date(year, month, date),
664
- new Date(year, month, date + 1)
665
- )).to.be.false;
666
-
667
- expect(minDateTester(
668
- new Date(year, month, date, hours, minutes, seconds, ms),
669
- new Date(year, month, date, hours, minutes, seconds, ms - 1)
670
- )).to.be.true;
671
- expect(minDateTester(
672
- new Date(year, month, date, hours, minutes, seconds, ms),
673
- new Date(year, month, date, hours, minutes, seconds, ms)
674
- )).to.be.true;
675
- expect(minDateTester(
676
- new Date(year, month, date, hours, minutes, seconds, ms),
677
- new Date(year, month, date, hours, minutes, seconds, ms + 1)
678
- )).to.be.false;
679
- });
680
-
681
- it('exclusiveMinDateTester()', () => {
682
- expect(exclusiveMinDateTester(
683
- new Date(year, month, date),
684
- new Date(year, month, date - 1)
685
- )).to.be.true;
686
- expect(exclusiveMinDateTester(
687
- new Date(year, month, date),
688
- new Date(year, month, date)
689
- )).to.be.false;
690
- expect(exclusiveMinDateTester(
691
- new Date(year, month, date),
692
- new Date(year, month, date + 1)
693
- )).to.be.false;
694
-
695
- expect(exclusiveMinDateTester(
696
- new Date(year, month, date, hours, minutes, seconds, ms),
697
- new Date(year, month, date, hours, minutes, seconds, ms - 1)
698
- )).to.be.true;
699
- expect(exclusiveMinDateTester(
700
- new Date(year, month, date, hours, minutes, seconds, ms),
701
- new Date(year, month, date, hours, minutes, seconds, ms)
702
- )).to.be.false;
703
- expect(exclusiveMinDateTester(
704
- new Date(year, month, date, hours, minutes, seconds, ms),
705
- new Date(year, month, date, hours, minutes, seconds, ms + 1)
706
- )).to.be.false;
707
- });
708
-
709
- it('maxDateTester()', () => {
710
- expect(maxDateTester(
711
- new Date(year, month, date),
712
- new Date(year, month, date - 1)
713
- )).to.be.false;
714
- expect(maxDateTester(
715
- new Date(year, month, date),
716
- new Date(year, month, date)
717
- )).to.be.true;
718
- expect(maxDateTester(
719
- new Date(year, month, date),
720
- new Date(year, month, date + 1)
721
- )).to.be.true;
722
-
723
- expect(maxDateTester(
724
- new Date(year, month, date, hours, minutes, seconds, ms),
725
- new Date(year, month, date, hours, minutes, seconds, ms - 1)
726
- )).to.be.false;
727
- expect(maxDateTester(
728
- new Date(year, month, date, hours, minutes, seconds, ms),
729
- new Date(year, month, date, hours, minutes, seconds, ms)
730
- )).to.be.true;
731
- expect(maxDateTester(
732
- new Date(year, month, date, hours, minutes, seconds, ms),
733
- new Date(year, month, date, hours, minutes, seconds, ms + 1)
734
- )).to.be.true;
735
- });
736
-
737
- it('exclusiveMaxDateTester()', () => {
738
- expect(exclusiveMaxDateTester(
739
- new Date(year, month, date),
740
- new Date(year, month, date - 1)
741
- )).to.be.false;
742
- expect(exclusiveMaxDateTester(
743
- new Date(year, month, date),
744
- new Date(year, month, date)
745
- )).to.be.false;
746
- expect(exclusiveMaxDateTester(
747
- new Date(year, month, date),
748
- new Date(year, month, date + 1)
749
- )).to.be.true;
750
-
751
- expect(exclusiveMaxDateTester(
752
- new Date(year, month, date, hours, minutes, seconds, ms),
753
- new Date(year, month, date, hours, minutes, seconds, ms - 1)
754
- )).to.be.false;
755
- expect(exclusiveMaxDateTester(
756
- new Date(year, month, date, hours, minutes, seconds, ms),
757
- new Date(year, month, date, hours, minutes, seconds, ms)
758
- )).to.be.false;
759
- expect(exclusiveMaxDateTester(
760
- new Date(year, month, date, hours, minutes, seconds, ms),
761
- new Date(year, month, date, hours, minutes, seconds, ms + 1)
762
- )).to.be.true;
763
- });
764
- });
765
-
766
- describe('array', () => {
767
- describe('arrayTester()', () => {
768
- it('common test', () => {
769
- expect(commonTestRunner(
770
- arrayTester,
771
- false,
772
- false,
773
- false,
774
- false,
775
- false,
776
- true,
777
- false
778
- )).to.be.true;
779
- });
780
-
781
- it('logic test', () => {
782
- expect(arrayTester([])).to.be.true;
783
- expect(arrayTester('not_array')).to.be.false;
784
- });
785
- });
786
-
787
- describe('arrayTypeOfTester()', () => {
788
- it('logic test', () => {
789
- expect(arrayTypeOfTester([], DataType.NUMBER)).to.be.true;
790
- expect(arrayTypeOfTester([1, 2], DataType.NUMBER)).to.be.true;
791
- expect(arrayTypeOfTester([1, 2, '3'], DataType.NUMBER)).to.be.false;
792
-
793
- expect(arrayTypeOfTester([new Date, new Date, new Date], DataType.DATE)).to.be.true;
794
- });
795
- });
796
-
797
- describe('uniqueItemsTester()', () => {
798
- it('logic test', () => {
799
- expect(uniqueItemsTester([])).to.be.true;
800
- expect(uniqueItemsTester([1, 2])).to.be.true;
801
- expect(uniqueItemsTester([1, 2, 2])).to.be.false;
802
- });
803
- });
804
- });
805
-
806
- describe('regexp', () => {
807
- describe('regExpTester()', () => {
808
- it('common test', () => {
809
- expect(commonTestRunner(
810
- regExpTester,
811
- false,
812
- false,
813
- false,
814
- false,
815
- false,
816
- false,
817
- false
818
- )).to.be.true;
819
- });
820
-
821
- it('logic test', () => {
822
- expect(regExpTester(/\d/)).to.be.true;
823
- expect(regExpTester(new RegExp('\d'))).to.be.true;
824
-
825
- expect(regExpTester('\d')).to.be.false;
826
- });
827
- });
828
- });
829
- });
1
+ import { expect } from 'chai';
2
+
3
+ import { commonTestRunner } from './common-test-runner';
4
+
5
+ import {
6
+ arrayTester,
7
+ arrayTypeOfTester,
8
+ booleanTester,
9
+ dateFormatTester,
10
+ dateTester,
11
+ dateTimeFormatTester,
12
+ definedTester,
13
+ emailTester,
14
+ enumTester,
15
+ exclusiveMaxDateTester,
16
+ exclusiveMaxNumberTester,
17
+ exclusiveMinDateTester,
18
+ exclusiveMinNumberTester,
19
+ hasPropertyTester,
20
+ indexTester,
21
+ integerTester,
22
+ lengthTester,
23
+ maxDateTester,
24
+ maxLengthTester,
25
+ maxNumberTester,
26
+ minDateTester,
27
+ minLengthTester,
28
+ minNumberTester,
29
+ numberTester,
30
+ objectTester,
31
+ regExpTester,
32
+ stringRegExpTester,
33
+ stringTester,
34
+ timeFormatTester,
35
+ uniqueItemsTester
36
+ } from '../src/tester';
37
+ import { DataType } from '../src/constants';
38
+
39
+ describe('testers', function () {
40
+ describe('common', () => {
41
+ describe('definedTester()', () => {
42
+ it('common test', () => {
43
+ expect(commonTestRunner(
44
+ definedTester,
45
+ true,
46
+ false,
47
+ true,
48
+ true,
49
+ true,
50
+ true,
51
+ true
52
+ )).to.be.true;
53
+ });
54
+ });
55
+
56
+ describe('enumTester()', () => {
57
+ it('logic test', () => {
58
+ expect(enumTester('a', ['a', 'b', 'c'])).to.be.true;
59
+ expect(enumTester('a', ['b', 'c'])).to.be.false;
60
+
61
+ expect(enumTester(1, [1, 2, 3])).to.be.true;
62
+ expect(enumTester(1, [2, 3])).to.be.false;
63
+ });
64
+ });
65
+
66
+ describe('lengthTester()', () => {
67
+ it('logic test', () => {
68
+ expect(lengthTester('abcd', 3)).to.be.false;
69
+ expect(lengthTester('abcd', 4)).to.be.true;
70
+ expect(lengthTester('abcd', 5)).to.be.false;
71
+
72
+ expect(lengthTester([1, 2, 3, 4], 3)).to.be.false;
73
+ expect(lengthTester([1, 2, 3, 4], 4)).to.be.true;
74
+ expect(lengthTester([1, 2, 3, 4], 5)).to.be.false;
75
+ });
76
+ });
77
+
78
+ describe('minLengthTester()', () => {
79
+ it('logic test', () => {
80
+ expect(minLengthTester('abcd', 3)).to.be.true;
81
+ expect(minLengthTester('abcd', 4)).to.be.true;
82
+ expect(minLengthTester('abcd', 5)).to.be.false;
83
+
84
+ expect(minLengthTester([1, 2, 3, 4], 3)).to.be.true;
85
+ expect(minLengthTester([1, 2, 3, 4], 4)).to.be.true;
86
+ expect(minLengthTester([1, 2, 3, 4], 5)).to.be.false;
87
+ });
88
+ });
89
+
90
+ describe('maxLengthTester()', () => {
91
+ it('logic test', () => {
92
+ expect(maxLengthTester('abcd', 3)).to.be.false;
93
+ expect(maxLengthTester('abcd', 4)).to.be.true;
94
+ expect(maxLengthTester('abcd', 5)).to.be.true;
95
+
96
+ expect(maxLengthTester([1, 2, 3, 4], 3)).to.be.false;
97
+ expect(maxLengthTester([1, 2, 3, 4], 4)).to.be.true;
98
+ expect(maxLengthTester([1, 2, 3, 4], 5)).to.be.true;
99
+ });
100
+ });
101
+ });
102
+
103
+ describe('boolean', () => {
104
+ describe('booleanTester()', () => {
105
+ it('common test', () => {
106
+ expect(commonTestRunner(
107
+ booleanTester,
108
+ false,
109
+ false,
110
+ true,
111
+ false,
112
+ false,
113
+ false,
114
+ false
115
+ )).to.be.true;
116
+ });
117
+
118
+ it('logic test', () => {
119
+ expect(booleanTester(true)).to.be.true;
120
+ expect(booleanTester(false)).to.be.true;
121
+
122
+ expect(booleanTester('true')).to.be.false;
123
+ expect(booleanTester('false')).to.be.false;
124
+
125
+ expect(booleanTester(1)).to.be.false;
126
+ expect(booleanTester(0)).to.be.false;
127
+ });
128
+ });
129
+ });
130
+
131
+ describe('number', () => {
132
+ describe('numberTester()', () => {
133
+ it('common test', () => {
134
+ expect(commonTestRunner(
135
+ numberTester,
136
+ false,
137
+ false,
138
+ false,
139
+ true,
140
+ false,
141
+ false,
142
+ false
143
+ )).to.be.true;
144
+ });
145
+
146
+ it('logic test', () => {
147
+ expect(numberTester(true)).to.be.false;
148
+ expect(numberTester(null)).to.be.false;
149
+
150
+ expect(numberTester(-10.6)).to.be.true;
151
+ expect(numberTester(-1)).to.be.true;
152
+ expect(numberTester(0)).to.be.true;
153
+ expect(numberTester(5)).to.be.true;
154
+ expect(numberTester(5.5)).to.be.true;
155
+
156
+ expect(numberTester('8')).to.be.false;
157
+ expect(numberTester('8.5')).to.be.false;
158
+
159
+ expect(numberTester(NaN)).to.be.false;
160
+ });
161
+ });
162
+
163
+ describe('integerTester()', () => {
164
+ it('logic test', () => {
165
+ expect(integerTester(-10.6)).to.be.false;
166
+ expect(integerTester(-1)).to.be.true;
167
+ expect(integerTester(0)).to.be.true;
168
+ expect(integerTester(5)).to.be.true;
169
+ expect(integerTester(5.5)).to.be.false;
170
+ });
171
+ });
172
+
173
+ describe('indexTester()', () => {
174
+ it('logic test', () => {
175
+ expect(indexTester(-10.6)).to.be.false;
176
+ expect(indexTester(-1)).to.be.false;
177
+ expect(indexTester(0)).to.be.true;
178
+ expect(indexTester(5)).to.be.true;
179
+ expect(indexTester(5.5)).to.be.false;
180
+ });
181
+ });
182
+
183
+ describe('minNumberTester()', () => {
184
+ it('logic test', () => {
185
+ expect(minNumberTester(-11, -12)).to.be.true;
186
+ expect(minNumberTester(-11, -11)).to.be.true;
187
+ expect(minNumberTester(-11, -10)).to.be.false;
188
+
189
+ expect(minNumberTester(0, -1)).to.be.true;
190
+ expect(minNumberTester(0, 0)).to.be.true;
191
+ expect(minNumberTester(0, 1)).to.be.false;
192
+
193
+ expect(minNumberTester(50, 49.9)).to.be.true;
194
+ expect(minNumberTester(50, 50)).to.be.true;
195
+ expect(minNumberTester(50, 50.1)).to.be.false;
196
+ });
197
+ });
198
+
199
+ describe('exclusiveMinNumberTester()', () => {
200
+ it('logic test', () => {
201
+ expect(exclusiveMinNumberTester(-11, -12)).to.be.true;
202
+ expect(exclusiveMinNumberTester(-11, -11)).to.be.false;
203
+ expect(exclusiveMinNumberTester(-11, -10)).to.be.false;
204
+
205
+ expect(exclusiveMinNumberTester(0, -1)).to.be.true;
206
+ expect(exclusiveMinNumberTester(0, 0)).to.be.false;
207
+ expect(exclusiveMinNumberTester(0, 1)).to.be.false;
208
+
209
+ expect(exclusiveMinNumberTester(50, 49.9)).to.be.true;
210
+ expect(exclusiveMinNumberTester(50, 50)).to.be.false;
211
+ expect(exclusiveMinNumberTester(50, 50.1)).to.be.false;
212
+ });
213
+ });
214
+
215
+ describe('maxNumberTester()', () => {
216
+ it('logic test', () => {
217
+ expect(maxNumberTester(-11, -12)).to.be.false;
218
+ expect(maxNumberTester(-11, -11)).to.be.true;
219
+ expect(maxNumberTester(-11, -10)).to.be.true;
220
+
221
+ expect(maxNumberTester(0, -1)).to.be.false;
222
+ expect(maxNumberTester(0, 0)).to.be.true;
223
+ expect(maxNumberTester(0, 1)).to.be.true;
224
+
225
+ expect(maxNumberTester(50, 49.9)).to.be.false;
226
+ expect(maxNumberTester(50, 50)).to.be.true;
227
+ expect(maxNumberTester(50, 50.1)).to.be.true;
228
+ });
229
+ });
230
+
231
+ describe('exclusiveMaxNumberTester()', () => {
232
+ it('logic test', () => {
233
+ expect(exclusiveMaxNumberTester(-11, -12)).to.be.false;
234
+ expect(exclusiveMaxNumberTester(-11, -11)).to.be.false;
235
+ expect(exclusiveMaxNumberTester(-11, -10)).to.be.true;
236
+
237
+ expect(exclusiveMaxNumberTester(0, -1)).to.be.false;
238
+ expect(exclusiveMaxNumberTester(0, 0)).to.be.false;
239
+ expect(exclusiveMaxNumberTester(0, 1)).to.be.true;
240
+
241
+ expect(exclusiveMaxNumberTester(50, 49.9)).to.be.false;
242
+ expect(exclusiveMaxNumberTester(50, 50)).to.be.false;
243
+ expect(exclusiveMaxNumberTester(50, 50.1)).to.be.true;
244
+ });
245
+ });
246
+ });
247
+
248
+ describe('string', () => {
249
+ describe('stringTester()', () => {
250
+ it('common test', () => {
251
+ expect(commonTestRunner(
252
+ stringTester,
253
+ false,
254
+ false,
255
+ false,
256
+ false,
257
+ true,
258
+ false,
259
+ false
260
+ )).to.be.true;
261
+ });
262
+
263
+ it('logic test', () => {
264
+ expect(stringTester('')).to.be.true;
265
+ expect(stringTester(' ')).to.be.true;
266
+ expect(stringTester('hello')).to.be.true;
267
+ });
268
+ });
269
+
270
+ describe('stringRegExpTester()', () => {
271
+ it('logic test', () => {
272
+ expect(stringRegExpTester('abc', /abc/)).to.be.true;
273
+ expect(stringRegExpTester('abc', /abcd/)).to.be.false;
274
+
275
+ expect(stringRegExpTester('abc', new RegExp('abc'))).to.be.true;
276
+ expect(stringRegExpTester('abc', new RegExp('abcd'))).to.be.false;
277
+ });
278
+ });
279
+
280
+ describe('emailTester()', () => {
281
+ it('logic test', () => {
282
+ expect(emailTester('')).to.be.false;
283
+ expect(emailTester(' ')).to.be.false;
284
+ expect(emailTester('hello')).to.be.false;
285
+ expect(emailTester('hello@')).to.be.false;
286
+ expect(emailTester('hello@domain')).to.be.true;
287
+ expect(emailTester('hello@domain.')).to.be.false;
288
+ expect(emailTester('hello@domain.com')).to.be.true;
289
+ expect(emailTester('hello@domain.com.')).to.be.false;
290
+ expect(emailTester('hello@domain.com.another')).to.be.true;
291
+
292
+ expect(emailTester('prettyandsimple@example.com')).to.be.true;
293
+ expect(emailTester('very.common@example.com')).to.be.true;
294
+ expect(emailTester('disposable.style.email.with+symbol@example.com')).to.be.true;
295
+ expect(emailTester('other.email-with-dash@example.com')).to.be.true;
296
+ expect(emailTester('x@example.com')).to.be.true;
297
+ expect(emailTester('"much.more unusual"@example.com')).to.be.true;
298
+ expect(emailTester('"very.unusual.@.unusual.com"@example.com')).to.be.true;
299
+ expect(emailTester('example-indeed@strange-example.com')).to.be.true;
300
+ expect(emailTester('admin@mailserver1')).to.be.true;
301
+ expect(emailTester('#!$%&\'*+-/=?^_`{}|~@example.org')).to.be.true;
302
+ expect(emailTester('"()<>[]:,;@\\\\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org')).to.be.true;
303
+ expect(emailTester('" "@example.org')).to.be.true;
304
+ expect(emailTester('example@localhost')).to.be.true;
305
+ expect(emailTester('example@s.solutions')).to.be.true;
306
+ expect(emailTester('user@localserver')).to.be.true;
307
+ expect(emailTester('user@tt')).to.be.true;
308
+ expect(emailTester('user@[IPv6:2001:DB8::1]')).to.be.true;
309
+
310
+ expect(emailTester('Abc.example.com')).to.be.false;
311
+ expect(emailTester('A@b@c@example.com')).to.be.false;
312
+ expect(emailTester('"A@b@c"@example.com')).to.be.true;
313
+
314
+ expect(emailTester('a"b(c)d,e:f;g<h>i[j\\k]l@example.com')).to.be.false;
315
+ expect(emailTester('just"not"right@example.com')).to.be.false;
316
+ expect(emailTester('this is"not\allowed@example.com')).to.be.false;
317
+ expect(emailTester('this\ still\"not\\allowed@example.com')).to.be.false;
318
+ expect(emailTester('1234567890123456789012345678901234567890123456789012345678901234+x@example.com')).to.be.false;
319
+ expect(emailTester('john..doe@example.com')).to.be.false;
320
+ expect(emailTester('john.doe@example..com')).to.be.false;
321
+
322
+ expect(emailTester(' ejv@ejv.com')).to.be.false;
323
+ expect(emailTester('ejv@ejv.com ')).to.be.false;
324
+ });
325
+ });
326
+
327
+ describe('dateFormatTester()', () => {
328
+ it('logic test', () => {
329
+ //// ISO 8601
330
+ // year
331
+ expect(dateFormatTester('100')).to.be.false;
332
+ expect(dateFormatTester('1000')).to.be.true;
333
+ expect(dateFormatTester('+2000')).to.be.true;
334
+ expect(dateFormatTester('-2000')).to.be.true;
335
+
336
+ // calendar date
337
+ expect(dateFormatTester('2018-1-17')).to.be.false;
338
+ expect(dateFormatTester('2018-12-32')).to.be.false;
339
+ expect(dateFormatTester('2018-12-17')).to.be.true;
340
+ expect(dateFormatTester('2018-13-17')).to.be.false;
341
+ expect(dateFormatTester('2018-12-7')).to.be.false;
342
+
343
+ // expect(dateFormatTester('2018117')).to.be.false; // matching for ordinal dates
344
+ expect(dateFormatTester('20181217')).to.be.true;
345
+ expect(dateFormatTester('20181317')).to.be.false;
346
+ expect(dateFormatTester('20181232')).to.be.false;
347
+
348
+ expect(dateFormatTester('2018-1')).to.be.false;
349
+ expect(dateFormatTester('2018-12')).to.be.true;
350
+ expect(dateFormatTester('2018-13')).to.be.false;
351
+
352
+ expect(dateFormatTester('--1-17')).to.be.false;
353
+ expect(dateFormatTester('--12-1')).to.be.false;
354
+ expect(dateFormatTester('--12-17')).to.be.true;
355
+ expect(dateFormatTester('--13-17')).to.be.false;
356
+ expect(dateFormatTester('--12-32')).to.be.false;
357
+
358
+ expect(dateFormatTester('--117')).to.be.false;
359
+ expect(dateFormatTester('--1317')).to.be.false;
360
+ expect(dateFormatTester('--1232')).to.be.false;
361
+ expect(dateFormatTester('--1217')).to.be.true;
362
+
363
+ // week dates
364
+ expect(dateFormatTester('2018-W01')).to.be.true;
365
+ expect(dateFormatTester('2018-W53')).to.be.true;
366
+
367
+ expect(dateFormatTester('2018-W00')).to.be.false;
368
+ expect(dateFormatTester('2018-W54')).to.be.false;
369
+
370
+ expect(dateFormatTester('2018-W01-3')).to.be.true;
371
+ expect(dateFormatTester('2018-W53-7')).to.be.true;
372
+
373
+ expect(dateFormatTester('2018-W01-0')).to.be.false;
374
+ expect(dateFormatTester('2018-W53-8')).to.be.false;
375
+
376
+ expect(dateFormatTester('2018W01')).to.be.true;
377
+ expect(dateFormatTester('2018W53')).to.be.true;
378
+
379
+ expect(dateFormatTester('2018W00')).to.be.false;
380
+ expect(dateFormatTester('2018W54')).to.be.false;
381
+
382
+ expect(dateFormatTester('2018W010')).to.be.false;
383
+ expect(dateFormatTester('2018W538')).to.be.false;
384
+
385
+ // ordinal dates
386
+ expect(dateFormatTester('2018-052')).to.be.true;
387
+
388
+ expect(dateFormatTester('2018-000')).to.be.false;
389
+ expect(dateFormatTester('2018-367')).to.be.false;
390
+
391
+ expect(dateFormatTester('2018052')).to.be.true;
392
+
393
+ expect(dateFormatTester('2018000')).to.be.false;
394
+ expect(dateFormatTester('2018367')).to.be.false;
395
+ });
396
+ });
397
+
398
+ describe('timeFormatTester()', () => {
399
+ it('logic test', () => {
400
+ // hh:mm:ss.sss, hh:mm:ss
401
+ expect(timeFormatTester('23:35:12.123')).to.be.true;
402
+ expect(timeFormatTester('24:00:00')).to.be.true;
403
+ expect(timeFormatTester('24:00:00.000')).to.be.true;
404
+
405
+ expect(timeFormatTester('3:35:12.123')).to.be.false;
406
+ expect(timeFormatTester('24:35:12.123')).to.be.false;
407
+ expect(timeFormatTester('25:35:12.123')).to.be.false;
408
+
409
+ expect(timeFormatTester('23:0:12.123')).to.be.false;
410
+ expect(timeFormatTester('23:60:12.123')).to.be.false;
411
+
412
+ expect(timeFormatTester('23:35:2.123')).to.be.false;
413
+ expect(timeFormatTester('23:35:60.123')).to.be.true; // leap second
414
+ expect(timeFormatTester('23:35:61.123')).to.be.false;
415
+
416
+ expect(timeFormatTester('23:35:12')).to.be.true;
417
+ expect(timeFormatTester('23:35:12.1')).to.be.true;
418
+ expect(timeFormatTester('23:35:12.12')).to.be.true;
419
+ expect(timeFormatTester('23:35:12.123')).to.be.true;
420
+ expect(timeFormatTester('23:35:12.1234')).to.be.true;
421
+ expect(timeFormatTester('23:35:12.12356789')).to.be.true;
422
+
423
+ // hh:mm
424
+ expect(timeFormatTester('23:52')).to.be.true;
425
+ expect(timeFormatTester('24:00')).to.be.true;
426
+
427
+ expect(timeFormatTester('2:52')).to.be.false;
428
+ expect(timeFormatTester('24:52')).to.be.false;
429
+
430
+ expect(timeFormatTester('23:2')).to.be.false;
431
+ expect(timeFormatTester('23:60')).to.be.false;
432
+
433
+ // hhmmss.sss, hhmmss
434
+ expect(timeFormatTester('233512.123')).to.be.true;
435
+ expect(timeFormatTester('240000')).to.be.true;
436
+ expect(timeFormatTester('240000.000')).to.be.true;
437
+
438
+ expect(timeFormatTester('33512.123')).to.be.false;
439
+ expect(timeFormatTester('243512.123')).to.be.false;
440
+ expect(timeFormatTester('253512.123')).to.be.false;
441
+
442
+ expect(timeFormatTester('23012.123')).to.be.false;
443
+ expect(timeFormatTester('236012.123')).to.be.false;
444
+
445
+ expect(timeFormatTester('23352.123')).to.be.false;
446
+ expect(timeFormatTester('233560.123')).to.be.true; // leap second
447
+ expect(timeFormatTester('233561.123')).to.be.false;
448
+
449
+ expect(timeFormatTester('233512')).to.be.true;
450
+ expect(timeFormatTester('233512.1')).to.be.true;
451
+ expect(timeFormatTester('233512.12')).to.be.true;
452
+ expect(timeFormatTester('233512.123')).to.be.true;
453
+ expect(timeFormatTester('233512.1234')).to.be.true;
454
+ expect(timeFormatTester('233512.12356789')).to.be.true;
455
+
456
+ // hhmm
457
+ expect(timeFormatTester('2352')).to.be.true;
458
+ expect(timeFormatTester('2400')).to.be.true;
459
+
460
+ expect(timeFormatTester('252')).to.be.false;
461
+ expect(timeFormatTester('2452')).to.be.false;
462
+
463
+ expect(timeFormatTester('2360')).to.be.false;
464
+
465
+ // hh
466
+ expect(timeFormatTester('00')).to.be.true;
467
+ expect(timeFormatTester('05')).to.be.true;
468
+ expect(timeFormatTester('24')).to.be.true;
469
+
470
+ expect(timeFormatTester('25')).to.be.false;
471
+ });
472
+ });
473
+
474
+ describe('dateTimeFormatTester()', () => {
475
+ it('logic test', () => {
476
+ // RFC 3339
477
+ expect(dateTimeFormatTester('2018-12-16T05:04:05')).to.be.true;
478
+ expect(dateTimeFormatTester('2018-12-16T05:04:05.51')).to.be.true;
479
+ expect(dateTimeFormatTester('2018-12-16T05:04:05.51Z')).to.be.true;
480
+ expect(dateTimeFormatTester('2018-12-16T05:04:05+09:00')).to.be.true;
481
+
482
+ expect(dateTimeFormatTester('2018-12-16T03:34:21')).to.be.true;
483
+ expect(dateTimeFormatTester('2018-12-16T03:34:21Z')).to.be.true;
484
+ expect(dateTimeFormatTester('2018-12-16T03:34:21.000')).to.be.true;
485
+ expect(dateTimeFormatTester('2018-12-16T03:34:21.000Z')).to.be.true;
486
+ expect(dateTimeFormatTester('2018-12-16T03:34:21.000+09:00')).to.be.true;
487
+ expect(dateTimeFormatTester('2018-12-16T03:34:21.000-08:00')).to.be.true;
488
+
489
+ expect(dateTimeFormatTester('2018-00-16T03:34:21')).to.be.false;
490
+ expect(dateTimeFormatTester('2018-13-16T03:34:21')).to.be.false;
491
+ expect(dateTimeFormatTester('2018-1-16T03:34:21')).to.be.false;
492
+ expect(dateTimeFormatTester('2018-12-6T03:34:21')).to.be.false;
493
+ expect(dateTimeFormatTester('2018-12-32T03:34:21')).to.be.false;
494
+ expect(dateTimeFormatTester('2018-12-16T0:34:21')).to.be.false;
495
+ expect(dateTimeFormatTester('2018-12-16T24:34:21')).to.be.false;
496
+ expect(dateTimeFormatTester('2018-12-16T03:4:21')).to.be.false;
497
+ expect(dateTimeFormatTester('2018-12-16T03:60:21')).to.be.false;
498
+ expect(dateTimeFormatTester('2018-12-16T03:34:1')).to.be.false;
499
+ expect(dateTimeFormatTester('2018-12-16T03:34:60')).to.be.false;
500
+ expect(dateTimeFormatTester('2018-12-16T03:34:21.')).to.be.false;
501
+
502
+ // // leap second inserted
503
+ // expect(dateTimeFormatTester('1990-12-31T23:59:60Z')).to.be.true;
504
+ // expect(dateTimeFormatTester('1990-12-31T15:59:60-08:00')).to.be.true;
505
+
506
+ // ISO 8601
507
+ expect(dateTimeFormatTester('20181219T00:38:05Z')).to.be.true;
508
+ expect(dateTimeFormatTester('20181219T00:38:05+00:00')).to.be.true;
509
+ });
510
+ });
511
+ });
512
+
513
+ // describe('urlTester()', () => {
514
+ // it('common test', () => {
515
+ // expect(commonTestRunner(
516
+ // urlTester,
517
+ // false,
518
+ // false,
519
+ // false,
520
+ // false,
521
+ // false,
522
+ // false,
523
+ // false
524
+ // )).to.be.true;
525
+ // });
526
+ //
527
+ // it('logic test', () => {
528
+ // expect(urlTester('')).to.be.false;
529
+ // expect(urlTester(' ')).to.be.false;
530
+ // expect(urlTester('hello')).to.be.false;
531
+ // expect(urlTester('http://hello')).to.be.false;
532
+ // expect(urlTester('https://hello')).to.be.false;
533
+ // expect(urlTester('http://hello.com')).to.be.true;
534
+ // expect(urlTester('http://hello.com/')).to.be.true;
535
+ // expect(urlTester('http://hello.com/#1')).to.be.true;
536
+ // expect(urlTester('http://hello.com/child')).to.be.true;
537
+ // expect(urlTester('http://hello.com/child/grand')).to.be.true;
538
+ // expect(urlTester('http://hello.com/child/grand?query=some')).to.be.true;
539
+ // expect(urlTester('http://hello.com/child/grand(some:angular)')).to.be.true;
540
+ // });
541
+ // });
542
+ //
543
+ // describe('ipv4Tester()', () => {
544
+ // it('common test', () => {
545
+ // expect(commonTestRunner(
546
+ // ipv4Tester,
547
+ // false,
548
+ // false,
549
+ // false,
550
+ // false,
551
+ // false,
552
+ // false,
553
+ // false
554
+ // )).to.be.true;
555
+ // });
556
+ //
557
+ // it('logic test', () => {
558
+ // expect(ipv4Tester('')).to.be.false;
559
+ // expect(ipv4Tester(' ')).to.be.false;
560
+ // expect(ipv4Tester('127.0.0')).to.be.false;
561
+ // expect(ipv4Tester('127.0.0.1')).to.be.true;
562
+ // expect(ipv4Tester('256.0.0.1')).to.be.false;
563
+ // expect(ipv4Tester('255.-1.0.1')).to.be.false;
564
+ // expect(ipv4Tester('255.256.267.1')).to.be.false;
565
+ // expect(ipv4Tester('255.255.255.0')).to.be.true;
566
+ // expect(ipv4Tester('255.255.255.0.5')).to.be.false;
567
+ // });
568
+ // });
569
+ //
570
+ // describe('ipv6Tester()', () => {
571
+ // it('common test', () => {
572
+ // expect(commonTestRunner(
573
+ // ipv6Tester,
574
+ // false,
575
+ // false,
576
+ // false,
577
+ // false,
578
+ // false,
579
+ // false,
580
+ // false
581
+ // )).to.be.true;
582
+ // });
583
+ //
584
+ // it('logic test', () => {
585
+ // expect(ipv6Tester('')).to.be.false;
586
+ // expect(ipv6Tester(' ')).to.be.false;
587
+ // expect(ipv6Tester('127.0.0')).to.be.false;
588
+ // // expect(ipv6Tester('1762:0:0:0:0:B03:1:AF18')).to.be.true;
589
+ // // expect(ipv6Tester('fe80:0000:0000:0000:0204:61ff:fe9d:f156/1')).to.be.true;
590
+ // expect(ipv6Tester('1200:0000:AB00:1234:O000:2552:7777:1313')).to.be.false; // has invalid character
591
+ // });
592
+ // });
593
+
594
+ describe('object', () => {
595
+ describe('objectTester()', () => {
596
+ it('common test', () => {
597
+ expect(commonTestRunner(
598
+ objectTester,
599
+ true, // null is object
600
+ false,
601
+ false,
602
+ false,
603
+ false,
604
+ true, // array is object
605
+ true
606
+ )).to.be.true;
607
+ });
608
+
609
+ it('logic test', () => {
610
+ expect(objectTester(null)).to.be.true;
611
+ expect(objectTester({})).to.be.true;
612
+ expect(objectTester({ a : 1 })).to.be.true;
613
+ });
614
+ });
615
+
616
+ describe('hasPropertyTester()', () => {
617
+ it('logic test', () => {
618
+ expect(hasPropertyTester({})).to.be.false;
619
+ expect(hasPropertyTester({ a : 1 })).to.be.true;
620
+ });
621
+ });
622
+ });
623
+
624
+ describe('date', () => {
625
+ const now : Date = new Date();
626
+
627
+ const year : number = now.getFullYear();
628
+ const month : number = now.getMonth();
629
+ const date : number = now.getDate();
630
+
631
+ const hours : number = now.getHours();
632
+ const minutes : number = now.getMinutes();
633
+ const seconds : number = now.getSeconds();
634
+ const ms : number = now.getMilliseconds();
635
+
636
+ describe('dateTester()', () => {
637
+ it('common test', () => {
638
+ expect(commonTestRunner(
639
+ dateTester,
640
+ false,
641
+ false,
642
+ false,
643
+ false,
644
+ false,
645
+ false,
646
+ false
647
+ )).to.be.true;
648
+ });
649
+
650
+ it('logic test', () => {
651
+ expect(dateTester(new Date)).to.be.true;
652
+ expect(dateTester((new Date).toISOString())).to.be.false;
653
+ });
654
+ });
655
+
656
+ it('minDateTester()', () => {
657
+ expect(minDateTester(
658
+ new Date(year, month, date),
659
+ new Date(year, month, date - 1)
660
+ )).to.be.true;
661
+ expect(minDateTester(
662
+ new Date(year, month, date),
663
+ new Date(year, month, date)
664
+ )).to.be.true;
665
+ expect(minDateTester(
666
+ new Date(year, month, date),
667
+ new Date(year, month, date + 1)
668
+ )).to.be.false;
669
+
670
+ expect(minDateTester(
671
+ new Date(year, month, date, hours, minutes, seconds, ms),
672
+ new Date(year, month, date, hours, minutes, seconds, ms - 1)
673
+ )).to.be.true;
674
+ expect(minDateTester(
675
+ new Date(year, month, date, hours, minutes, seconds, ms),
676
+ new Date(year, month, date, hours, minutes, seconds, ms)
677
+ )).to.be.true;
678
+ expect(minDateTester(
679
+ new Date(year, month, date, hours, minutes, seconds, ms),
680
+ new Date(year, month, date, hours, minutes, seconds, ms + 1)
681
+ )).to.be.false;
682
+ });
683
+
684
+ it('exclusiveMinDateTester()', () => {
685
+ expect(exclusiveMinDateTester(
686
+ new Date(year, month, date),
687
+ new Date(year, month, date - 1)
688
+ )).to.be.true;
689
+ expect(exclusiveMinDateTester(
690
+ new Date(year, month, date),
691
+ new Date(year, month, date)
692
+ )).to.be.false;
693
+ expect(exclusiveMinDateTester(
694
+ new Date(year, month, date),
695
+ new Date(year, month, date + 1)
696
+ )).to.be.false;
697
+
698
+ expect(exclusiveMinDateTester(
699
+ new Date(year, month, date, hours, minutes, seconds, ms),
700
+ new Date(year, month, date, hours, minutes, seconds, ms - 1)
701
+ )).to.be.true;
702
+ expect(exclusiveMinDateTester(
703
+ new Date(year, month, date, hours, minutes, seconds, ms),
704
+ new Date(year, month, date, hours, minutes, seconds, ms)
705
+ )).to.be.false;
706
+ expect(exclusiveMinDateTester(
707
+ new Date(year, month, date, hours, minutes, seconds, ms),
708
+ new Date(year, month, date, hours, minutes, seconds, ms + 1)
709
+ )).to.be.false;
710
+ });
711
+
712
+ it('maxDateTester()', () => {
713
+ expect(maxDateTester(
714
+ new Date(year, month, date),
715
+ new Date(year, month, date - 1)
716
+ )).to.be.false;
717
+ expect(maxDateTester(
718
+ new Date(year, month, date),
719
+ new Date(year, month, date)
720
+ )).to.be.true;
721
+ expect(maxDateTester(
722
+ new Date(year, month, date),
723
+ new Date(year, month, date + 1)
724
+ )).to.be.true;
725
+
726
+ expect(maxDateTester(
727
+ new Date(year, month, date, hours, minutes, seconds, ms),
728
+ new Date(year, month, date, hours, minutes, seconds, ms - 1)
729
+ )).to.be.false;
730
+ expect(maxDateTester(
731
+ new Date(year, month, date, hours, minutes, seconds, ms),
732
+ new Date(year, month, date, hours, minutes, seconds, ms)
733
+ )).to.be.true;
734
+ expect(maxDateTester(
735
+ new Date(year, month, date, hours, minutes, seconds, ms),
736
+ new Date(year, month, date, hours, minutes, seconds, ms + 1)
737
+ )).to.be.true;
738
+ });
739
+
740
+ it('exclusiveMaxDateTester()', () => {
741
+ expect(exclusiveMaxDateTester(
742
+ new Date(year, month, date),
743
+ new Date(year, month, date - 1)
744
+ )).to.be.false;
745
+ expect(exclusiveMaxDateTester(
746
+ new Date(year, month, date),
747
+ new Date(year, month, date)
748
+ )).to.be.false;
749
+ expect(exclusiveMaxDateTester(
750
+ new Date(year, month, date),
751
+ new Date(year, month, date + 1)
752
+ )).to.be.true;
753
+
754
+ expect(exclusiveMaxDateTester(
755
+ new Date(year, month, date, hours, minutes, seconds, ms),
756
+ new Date(year, month, date, hours, minutes, seconds, ms - 1)
757
+ )).to.be.false;
758
+ expect(exclusiveMaxDateTester(
759
+ new Date(year, month, date, hours, minutes, seconds, ms),
760
+ new Date(year, month, date, hours, minutes, seconds, ms)
761
+ )).to.be.false;
762
+ expect(exclusiveMaxDateTester(
763
+ new Date(year, month, date, hours, minutes, seconds, ms),
764
+ new Date(year, month, date, hours, minutes, seconds, ms + 1)
765
+ )).to.be.true;
766
+ });
767
+ });
768
+
769
+ describe('array', () => {
770
+ describe('arrayTester()', () => {
771
+ it('common test', () => {
772
+ expect(commonTestRunner(
773
+ arrayTester,
774
+ false,
775
+ false,
776
+ false,
777
+ false,
778
+ false,
779
+ true,
780
+ false
781
+ )).to.be.true;
782
+ });
783
+
784
+ it('logic test', () => {
785
+ expect(arrayTester([])).to.be.true;
786
+ expect(arrayTester('not_array')).to.be.false;
787
+ });
788
+ });
789
+
790
+ describe('arrayTypeOfTester()', () => {
791
+ it('logic test', () => {
792
+ expect(arrayTypeOfTester([], DataType.NUMBER)).to.be.true;
793
+ expect(arrayTypeOfTester([1, 2], DataType.NUMBER)).to.be.true;
794
+ expect(arrayTypeOfTester([1, 2, '3'], DataType.NUMBER)).to.be.false;
795
+
796
+ expect(arrayTypeOfTester([new Date, new Date, new Date], DataType.DATE)).to.be.true;
797
+ });
798
+ });
799
+
800
+ describe('uniqueItemsTester()', () => {
801
+ it('logic test', () => {
802
+ expect(uniqueItemsTester([])).to.be.true;
803
+ expect(uniqueItemsTester([1, 2])).to.be.true;
804
+ expect(uniqueItemsTester([1, 2, 2])).to.be.false;
805
+ });
806
+ });
807
+ });
808
+
809
+ describe('regexp', () => {
810
+ describe('regExpTester()', () => {
811
+ it('common test', () => {
812
+ expect(commonTestRunner(
813
+ regExpTester,
814
+ false,
815
+ false,
816
+ false,
817
+ false,
818
+ false,
819
+ false,
820
+ false
821
+ )).to.be.true;
822
+ });
823
+
824
+ it('logic test', () => {
825
+ expect(regExpTester(/\d/)).to.be.true;
826
+ expect(regExpTester(new RegExp('\d'))).to.be.true;
827
+
828
+ expect(regExpTester('\d')).to.be.false;
829
+ });
830
+ });
831
+ });
832
+ });