@markuplint/types 3.5.0 → 3.6.0

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.
@@ -0,0 +1,336 @@
1
+ const { checkDateTime } = require('../../../lib/whatwg/check-datetime');
2
+ const { checkDateString } = require('../../../lib/whatwg/check-datetime/date-string');
3
+ const { getMaxWeekNum } = require('../../../lib/whatwg/check-datetime/datetime-tokens');
4
+ const {
5
+ checkDurationISO8601LikeString,
6
+ checkDurationComponentListString,
7
+ } = require('../../../lib/whatwg/check-datetime/duration-string');
8
+ const { checkGlobalDateAndTimeString } = require('../../../lib/whatwg/check-datetime/global-date-and-time-string');
9
+ const {
10
+ checkLocalDateAndTimeString,
11
+ checkNormalizedLocalDateAndTimeString,
12
+ } = require('../../../lib/whatwg/check-datetime/local-date-and-time-string');
13
+ const { checkMonthString } = require('../../../lib/whatwg/check-datetime/month-string');
14
+ const { checkTimeString } = require('../../../lib/whatwg/check-datetime/time-string');
15
+ const { checkTimeZoneOffsetString } = require('../../../lib/whatwg/check-datetime/time-zone-offset-string');
16
+ const { checkWeekString } = require('../../../lib/whatwg/check-datetime/week-string');
17
+ const { checkYearString } = require('../../../lib/whatwg/check-datetime/year-string');
18
+ const { checkYearlessDateString } = require('../../../lib/whatwg/check-datetime/yearless-date-string');
19
+
20
+ const isMonth = checkMonthString();
21
+ const isDate = checkDateString();
22
+ const isYearlessDate = checkYearlessDateString();
23
+ const isTimeString = checkTimeString();
24
+ const isLocalDateAndTime = checkLocalDateAndTimeString();
25
+ const isNormalizedLocalDateAndTime = checkNormalizedLocalDateAndTimeString();
26
+ const isTimeZoneOffset = checkTimeZoneOffsetString();
27
+ const isGlobalDateAndTime = checkGlobalDateAndTimeString();
28
+ const isWeek = checkWeekString();
29
+ const isYear = checkYearString();
30
+ const isDurationISO8601Like = checkDurationISO8601LikeString();
31
+ const isDurationComponentList = checkDurationComponentListString();
32
+ const isDateTime = checkDateTime();
33
+
34
+ test('max-week', () => {
35
+ expect(getMaxWeekNum(1976)).toBe(53);
36
+ expect(getMaxWeekNum(1977)).toBe(52);
37
+ expect(getMaxWeekNum(1978)).toBe(52);
38
+ expect(getMaxWeekNum(1979)).toBe(52);
39
+ expect(getMaxWeekNum(1981)).toBe(53);
40
+ });
41
+
42
+ test('month-string', () => {
43
+ expect(isMonth('').reason).toBe('empty-token');
44
+ expect(isMonth(' ').reason).toBe('unexpected-token');
45
+ expect(isMonth('a').reason).toBe('unexpected-token');
46
+ expect(isMonth('0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 4 });
47
+ expect(isMonth('0000').reason).toStrictEqual({ type: 'out-of-range', gt: 0 });
48
+ expect(isMonth('0001').reason).toBe('missing-token');
49
+ expect(isMonth('0001:').reason).toBe('unexpected-token');
50
+ expect(isMonth('0001-').reason).toBe('missing-token');
51
+ expect(isMonth('0001-a').reason).toBe('unexpected-token');
52
+ expect(isMonth('0001-0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
53
+ expect(isMonth('0001-001').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
54
+ expect(isMonth('0001-00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 12 });
55
+ expect(isMonth('0001-13').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 12 });
56
+ expect(isMonth('0001-01').matched).toBe(true);
57
+ expect(isMonth('0001-12').matched).toBe(true);
58
+ expect(isMonth('10001-01').matched).toBe(true);
59
+ expect(isMonth('0001-01-').reason).toBe('extra-token');
60
+ });
61
+
62
+ test('date-string', () => {
63
+ expect(isDate('').reason).toBe('empty-token');
64
+ expect(isDate(' ').reason).toBe('unexpected-token');
65
+ expect(isDate('a').reason).toBe('unexpected-token');
66
+ expect(isDate('0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 4 });
67
+ expect(isDate('0000').reason).toStrictEqual({ type: 'out-of-range', gt: 0 });
68
+ expect(isDate('2000').reason).toBe('missing-token');
69
+ expect(isDate('2000:').reason).toBe('unexpected-token');
70
+ expect(isDate('2000-').reason).toBe('missing-token');
71
+ expect(isDate('2000-a').reason).toBe('unexpected-token');
72
+ expect(isDate('2000-0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
73
+ expect(isDate('2000-00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 12 });
74
+ expect(isDate('2000-01').reason).toBe('missing-token');
75
+ expect(isDate('2000-01:').reason).toBe('unexpected-token');
76
+ expect(isDate('2000-01-').reason).toBe('missing-token');
77
+ expect(isDate('2000-01-a').reason).toBe('unexpected-token');
78
+ expect(isDate('2000-01-0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
79
+ expect(isDate('2000-01-001').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
80
+ expect(isDate('2000-01-00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 31 });
81
+ expect(isDate('2000-01-01').matched).toBe(true);
82
+ expect(isDate('2000-01-31').matched).toBe(true);
83
+ expect(isDate('2000-01-32').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 31 });
84
+ expect(isDate('2000-02-28').matched).toBe(true);
85
+ expect(isDate('2000-02-29').matched).toBe(true);
86
+ expect(isDate('2000-02-30').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 29 });
87
+ expect(isDate('2001-02-28').matched).toBe(true);
88
+ expect(isDate('2001-02-29').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 28 });
89
+ });
90
+
91
+ test('yearless-date-string', () => {
92
+ expect(isYearlessDate('').reason).toBe('empty-token');
93
+ expect(isYearlessDate(' ').reason).toBe('unexpected-token');
94
+ expect(isYearlessDate('a').reason).toBe('unexpected-token');
95
+ expect(isYearlessDate('0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
96
+ expect(isYearlessDate('00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 12 });
97
+ expect(isYearlessDate('01').reason).toBe('missing-token');
98
+ expect(isYearlessDate('01:').reason).toBe('unexpected-token');
99
+ expect(isYearlessDate('01-').reason).toBe('missing-token');
100
+ expect(isYearlessDate('01-a').reason).toBe('unexpected-token');
101
+ expect(isYearlessDate('01-0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
102
+ expect(isYearlessDate('01-00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 31 });
103
+ expect(isYearlessDate('01-01').matched).toBe(true);
104
+ expect(isYearlessDate('01-31').matched).toBe(true);
105
+ expect(isYearlessDate('01-32').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 31 });
106
+ expect(isYearlessDate('02-28').matched).toBe(true);
107
+ expect(isYearlessDate('02-29').matched).toBe(true);
108
+ expect(isYearlessDate('02-30').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 29 });
109
+ });
110
+
111
+ test('time-string', () => {
112
+ expect(isTimeString('').reason).toBe('empty-token');
113
+ expect(isTimeString(' ').reason).toBe('unexpected-token');
114
+ expect(isTimeString('a').reason).toBe('unexpected-token');
115
+ expect(isTimeString('0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
116
+ expect(isTimeString('000').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
117
+ expect(isTimeString('24').reason).toStrictEqual({ type: 'out-of-range', gte: 0, lte: 23 });
118
+ expect(isTimeString('00').reason).toBe('missing-token');
119
+ expect(isTimeString('00-').reason).toBe('unexpected-token');
120
+ expect(isTimeString('00:').reason).toBe('missing-token');
121
+ expect(isTimeString('00:a').reason).toBe('unexpected-token');
122
+ expect(isTimeString('00:0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
123
+ expect(isTimeString('00:000').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
124
+ expect(isTimeString('00:00').matched).toBe(true);
125
+ expect(isTimeString('00:59').matched).toBe(true);
126
+ expect(isTimeString('00:60').reason).toStrictEqual({ type: 'out-of-range', gte: 0, lte: 59 });
127
+ expect(isTimeString('00:00-').reason).toBe('unexpected-token');
128
+ expect(isTimeString('00:00:').reason).toBe('missing-token');
129
+ expect(isTimeString('00:00:a').reason).toBe('unexpected-token');
130
+ expect(isTimeString('00:00:0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
131
+ expect(isTimeString('00:00:000').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
132
+ expect(isTimeString('00:00:00').matched).toBe(true);
133
+ expect(isTimeString('00:00:59').matched).toBe(true);
134
+ expect(isTimeString('00:00:60').reason).toStrictEqual({ type: 'out-of-range', gte: 0, lte: 59 });
135
+ expect(isTimeString('00:00:00:').reason).toBe('unexpected-token');
136
+ expect(isTimeString('00:00:00.').reason).toBe('missing-token');
137
+ expect(isTimeString('00:00:00.a').reason).toBe('unexpected-token');
138
+ expect(isTimeString('00:00:00.0').matched).toBe(true);
139
+ expect(isTimeString('00:00:00.9').matched).toBe(true);
140
+ expect(isTimeString('00:00:00.00').matched).toBe(true);
141
+ expect(isTimeString('00:00:00.99').matched).toBe(true);
142
+ expect(isTimeString('00:00:00.000').matched).toBe(true);
143
+ expect(isTimeString('00:00:00.999').matched).toBe(true);
144
+ expect(isTimeString('00:00:00.0000').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 1, lte: 3 });
145
+ expect(isTimeString('00:00:00.1000').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 1, lte: 3 });
146
+ });
147
+
148
+ test('local-date-and-time-string', () => {
149
+ expect(isLocalDateAndTime('').reason).toBe('empty-token');
150
+ expect(isLocalDateAndTime(' ').reason).toBe('unexpected-token');
151
+ expect(isLocalDateAndTime('2020-12-31').reason).toBe('missing-token');
152
+ expect(isLocalDateAndTime('2020-12-31:').reason).toBe('unexpected-token');
153
+ expect(isLocalDateAndTime('2020-12-31T').reason).toBe('missing-token');
154
+ expect(isLocalDateAndTime('2020-12-31 ').reason).toBe('missing-token');
155
+ expect(isLocalDateAndTime('2020-12-31 ').reason).toBe('unexpected-token');
156
+ expect(isLocalDateAndTime('2020-12-31T00:00:00.000').matched).toBe(true);
157
+ });
158
+
159
+ test('normalized-local-date-and-time-string', () => {
160
+ expect(isNormalizedLocalDateAndTime('').reason).toBe('empty-token');
161
+ expect(isNormalizedLocalDateAndTime(' ').reason).toBe('unexpected-token');
162
+ expect(isNormalizedLocalDateAndTime('2020-12-31').reason).toBe('missing-token');
163
+ expect(isNormalizedLocalDateAndTime('2020-12-31:').reason).toBe('unexpected-token');
164
+ expect(isNormalizedLocalDateAndTime('2020-12-31T').reason).toBe('missing-token');
165
+ expect(isNormalizedLocalDateAndTime('2020-12-31 ').reason).toBe('unexpected-token');
166
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00').matched).toBe(true);
167
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:00').reason).toBe('extra-token');
168
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:01').matched).toBe(true);
169
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:00.0').reason).toBe('extra-token');
170
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:00.00').reason).toBe('extra-token');
171
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:00.000').reason).toBe('extra-token');
172
+ expect(isNormalizedLocalDateAndTime('2020-12-31T00:00:00.001').matched).toBe(true);
173
+ });
174
+
175
+ test('time-zone-offset', () => {
176
+ expect(isTimeZoneOffset('').reason).toBe('empty-token');
177
+ expect(isTimeZoneOffset(' ').reason).toBe('unexpected-token');
178
+ expect(isTimeZoneOffset('a').reason).toBe('unexpected-token');
179
+ expect(isTimeZoneOffset('z').reason).toBe('unexpected-token');
180
+ expect(isTimeZoneOffset('Z').matched).toBe(true);
181
+ expect(isTimeZoneOffset('Z:').reason).toBe('extra-token');
182
+ expect(isTimeZoneOffset('ZZ').reason).toBe('extra-token');
183
+ expect(isTimeZoneOffset('+').reason).toBe('missing-token');
184
+ expect(isTimeZoneOffset('-').reason).toBe('missing-token');
185
+ expect(isTimeZoneOffset('+-').reason).toBe('unexpected-token');
186
+ expect(isTimeZoneOffset('+00').reason).toBe('missing-token');
187
+ expect(isTimeZoneOffset('+00:').reason).toBe('missing-token');
188
+ expect(isTimeZoneOffset('+00:00').matched).toBe(true);
189
+ expect(isTimeZoneOffset('+24:00').matched).toBe(false);
190
+ expect(isTimeZoneOffset('+00:60').matched).toBe(false);
191
+ expect(isTimeZoneOffset('+000:00').matched).toBe(false);
192
+ expect(isTimeZoneOffset('+00:000').matched).toBe(false);
193
+ expect(isTimeZoneOffset('+00:00:').reason).toBe('extra-token');
194
+ expect(isTimeZoneOffset('+0000').matched).toBe(true);
195
+ expect(isTimeZoneOffset('+2400').matched).toBe(false);
196
+ expect(isTimeZoneOffset('+0060').matched).toBe(false);
197
+ expect(isTimeZoneOffset('+00000').matched).toBe(false);
198
+ expect(isTimeZoneOffset('+0000:').reason).toBe('extra-token');
199
+ });
200
+
201
+ test('global-date-and-time-string', () => {
202
+ expect(isGlobalDateAndTime('2000-01-01').reason).toBe('missing-token');
203
+ expect(isGlobalDateAndTime('2000-01-01T00:00').reason).toBe('missing-token');
204
+ expect(isGlobalDateAndTime('2000-01-01T00:00').reason).toBe('missing-token');
205
+ expect(isGlobalDateAndTime('2000-01-01T00:00+').reason).toBe('missing-token');
206
+ expect(isGlobalDateAndTime('2000-01-01T00:00Z').matched).toBe(true);
207
+ expect(isGlobalDateAndTime('2000-01-01T00:00+00').reason).toBe('missing-token');
208
+ expect(isGlobalDateAndTime('2000-01-01T00:00+0000').matched).toBe(true);
209
+ expect(isGlobalDateAndTime('2000-01-01T00:00+00:00').matched).toBe(true);
210
+ expect(isGlobalDateAndTime('2000-01-01T00:00-2359').matched).toBe(true);
211
+ expect(isGlobalDateAndTime('2000-01-01T00:00-23:59').matched).toBe(true);
212
+ expect(isGlobalDateAndTime('2000-01-01T00:00:00+0000').matched).toBe(true);
213
+ expect(isGlobalDateAndTime('2000-01-01T00:00:00.000+0000').matched).toBe(true);
214
+ expect(isGlobalDateAndTime('2000-01-01T00:00:00.000+0000a').reason).toBe('extra-token');
215
+ });
216
+
217
+ test('week-string', () => {
218
+ expect(isWeek('').reason).toBe('empty-token');
219
+ expect(isWeek(' ').reason).toBe('unexpected-token');
220
+ expect(isWeek('a').reason).toBe('unexpected-token');
221
+ expect(isWeek('2000').reason).toBe('missing-token');
222
+ expect(isWeek('2000-').reason).toBe('missing-token');
223
+ expect(isWeek('2000-a').reason).toBe('unexpected-token');
224
+ expect(isWeek('2000-W').reason).toBe('missing-token');
225
+ expect(isWeek('2000-Wa').reason).toBe('unexpected-token');
226
+ expect(isWeek('2000-W0').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 2, lte: 2 });
227
+ expect(isWeek('2000-W00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 52 });
228
+ expect(isWeek('2000-W53').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 52 });
229
+ expect(isWeek('2000-W01').matched).toBe(true);
230
+ expect(isWeek('2000-W52').matched).toBe(true);
231
+ expect(isWeek('2004-W00').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 53 });
232
+ expect(isWeek('2004-W54').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 53 });
233
+ expect(isWeek('2004-W01').matched).toBe(true);
234
+ expect(isWeek('2004-W53').matched).toBe(true);
235
+ expect(isWeek('2000-W01a').reason).toBe('extra-token');
236
+ });
237
+
238
+ test('year-string', () => {
239
+ expect(isYear('').reason).toBe('empty-token');
240
+ expect(isYear(' ').reason).toBe('unexpected-token');
241
+ expect(isYear('a').reason).toBe('unexpected-token');
242
+ expect(isYear('200').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 4 });
243
+ expect(isYear('2000').matched).toBe(true);
244
+ expect(isYear('20000').matched).toBe(true);
245
+ });
246
+
247
+ test('duration-string (IS08601 like)', () => {
248
+ expect(isDurationISO8601Like('').reason).toBe('empty-token');
249
+ expect(isDurationISO8601Like(' ').reason).toBe('unexpected-token');
250
+ expect(isDurationISO8601Like('a').reason).toBe('unexpected-token');
251
+ expect(isDurationISO8601Like('P').reason).toBe('missing-token');
252
+ expect(isDurationISO8601Like('P0').reason).toBe('missing-token');
253
+ expect(isDurationISO8601Like('P0D').reason).toBe('missing-token');
254
+ expect(isDurationISO8601Like('P0H').reason).toBe('unexpected-token');
255
+ expect(isDurationISO8601Like('P0Dt').reason).toBe('unexpected-token');
256
+ expect(isDurationISO8601Like('P0DT').reason).toBe('missing-token');
257
+ expect(isDurationISO8601Like('P0DT0').reason).toBe('missing-token');
258
+ expect(isDurationISO8601Like('P0DT0H').matched).toBe(true);
259
+ expect(isDurationISO8601Like('P0DT0H0').reason).toBe('missing-token');
260
+ expect(isDurationISO8601Like('P0DT0H0M').matched).toBe(true);
261
+ expect(isDurationISO8601Like('P0DT0H0M0').reason).toBe('missing-token');
262
+ expect(isDurationISO8601Like('P0DT0H0M0S').matched).toBe(true);
263
+ expect(isDurationISO8601Like('P0DT0H0M0.').reason).toBe('missing-token');
264
+ expect(isDurationISO8601Like('P0DT0H0M0M').reason).toBe('unexpected-token');
265
+ expect(isDurationISO8601Like('P0DT0H0M0.0').reason).toBe('missing-token');
266
+ expect(isDurationISO8601Like('P0DT0H0M0.0M').reason).toBe('unexpected-token');
267
+ expect(isDurationISO8601Like('P0DT0H0M0.000').reason).toBe('missing-token');
268
+ expect(isDurationISO8601Like('P0DT0H0M0.0000').reason).toStrictEqual({
269
+ gte: 1,
270
+ lte: 3,
271
+ type: 'out-of-range-length-digit',
272
+ });
273
+ expect(isDurationISO8601Like('P0DT0H0M0.000S').matched).toBe(true);
274
+ expect(isDurationISO8601Like('P0DT0H0M0.000S0').reason).toBe('extra-token');
275
+ expect(isDurationISO8601Like('P0DT0H0M0.000S0H').reason).toBe('extra-token');
276
+ expect(isDurationISO8601Like('P0DT0M').matched).toBe(true);
277
+ expect(isDurationISO8601Like('P0DT0S').matched).toBe(true);
278
+ expect(isDurationISO8601Like('P0DT0.0S').matched).toBe(true);
279
+ expect(isDurationISO8601Like('P0DT0M0S').matched).toBe(true);
280
+ expect(isDurationISO8601Like('P0DT0H0S').matched).toBe(true);
281
+ expect(isDurationISO8601Like('P0DT0H0.0S').matched).toBe(true);
282
+ expect(isDurationISO8601Like('P0DT0M0H').reason).toBe('unexpected-token');
283
+ expect(isDurationISO8601Like('P0DT0S0M').reason).toBe('extra-token');
284
+ expect(isDurationISO8601Like('P0DT0.0S0M').reason).toBe('extra-token');
285
+ expect(isDurationISO8601Like('PT4H18M3S').matched).toBe(true);
286
+ });
287
+
288
+ test('duration-string (duration component list)', () => {
289
+ expect(isDurationComponentList('').reason).toBe('empty-token');
290
+ expect(isDurationComponentList(' ').reason).toBe('missing-token');
291
+ expect(isDurationComponentList(' a').reason).toBe('unexpected-token');
292
+ expect(isDurationComponentList(' 0').reason).toBe('missing-token');
293
+ expect(isDurationComponentList(' 0a').reason).toBe('unexpected-token');
294
+ expect(isDurationComponentList(' 0w').matched).toBe(true);
295
+ expect(isDurationComponentList(' 0ww').reason).toBe('unexpected-token');
296
+ expect(isDurationComponentList('0w').matched).toBe(true);
297
+ expect(isDurationComponentList('0w ').matched).toBe(true);
298
+ expect(isDurationComponentList('0w 0').reason).toBe('missing-token');
299
+ expect(isDurationComponentList('0w 0w').reason).toBe('duplicated');
300
+ expect(isDurationComponentList('0w 0d').matched).toBe(true);
301
+ expect(isDurationComponentList('0w 0d').matched).toBe(true);
302
+ expect(isDurationComponentList(' 0w 0d').matched).toBe(true);
303
+ expect(isDurationComponentList(' 0w 0d ').matched).toBe(true);
304
+ expect(isDurationComponentList('0w 0d ').matched).toBe(true);
305
+ expect(isDurationComponentList('\n0w\n0d\n').matched).toBe(true);
306
+ expect(isDurationComponentList('0w 0.').reason).toBe('missing-token');
307
+ expect(isDurationComponentList('0w 0.0').reason).toBe('missing-token');
308
+ expect(isDurationComponentList('0w 0.0s').matched).toBe(true);
309
+ expect(isDurationComponentList('0w 0.0d').reason).toBe('unexpected-token');
310
+ expect(isDurationComponentList('0s 0.').reason).toBe('unexpected-token');
311
+ expect(isDurationComponentList('0s 0.0').reason).toBe('unexpected-token');
312
+ expect(isDurationComponentList('0s 0.0s').reason).toBe('unexpected-token');
313
+ expect(isDurationComponentList('0w 0.00s').matched).toBe(true);
314
+ expect(isDurationComponentList('0w 0.000s').matched).toBe(true);
315
+ expect(isDurationComponentList('0w 0.0000s').reason).toStrictEqual({
316
+ gte: 1,
317
+ lte: 3,
318
+ type: 'out-of-range-length-digit',
319
+ });
320
+ expect(isDurationComponentList('0s 0.000s').reason).toBe('unexpected-token');
321
+ expect(isDurationComponentList('0.000s 0s').reason).toBe('duplicated');
322
+ expect(isDurationComponentList('0w0d0h0m0.000s').matched).toBe(true);
323
+ expect(isDurationComponentList('0w 0d 0h 0m 0.000s').matched).toBe(true);
324
+ expect(isDurationComponentList('0w 0d0h 0m0.000s').matched).toBe(true);
325
+ expect(isDurationComponentList(' 2w 3d6m 3.4s 93xxxxxxx').reason).toBe('unexpected-token');
326
+ });
327
+
328
+ test('date-time', () => {
329
+ expect(isDateTime('200-1-1').reason).toStrictEqual({ type: 'out-of-range-length-digit', gte: 4 });
330
+ expect(isDateTime('2001-02-29').reason).toStrictEqual({ type: 'out-of-range', gte: 1, lte: 28 });
331
+ expect(isDateTime('2001-02-28T').reason).toBe('missing-token');
332
+ expect(isDateTime('2001-02-28T00').reason).toBe('missing-token');
333
+ expect(isDateTime('2001-02-28T00:0').reason).toStrictEqual({ gte: 2, lte: 2, type: 'out-of-range-length-digit' });
334
+ expect(isDateTime('2000-01-01T00:00:00.000+0000a').reason).toBe('extra-token');
335
+ expect(isDateTime('P0DT0M0H').reason).toBe('unexpected-token');
336
+ });
@@ -0,0 +1,59 @@
1
+ const { checkMIMEType } = require('../../lib/whatwg/check-mime-type');
2
+
3
+ const check = checkMIMEType();
4
+ const checkNoParam = checkMIMEType({ withoutParameters: true });
5
+
6
+ test('valid', () => {
7
+ expect(check('x/y').matched).toBe(true);
8
+ expect(check('x/y;a=b;c=D;E="F"').matched).toBe(true);
9
+ });
10
+
11
+ test('excrescence-token', () => {
12
+ expect(check('xy;')).toStrictEqual({
13
+ column: 1,
14
+ expects: [{ type: 'format', value: 'MIME Type' }],
15
+ length: 3,
16
+ line: 1,
17
+ matched: false,
18
+ offset: 0,
19
+ raw: 'xy;',
20
+ reason: 'syntax-error',
21
+ ref: null,
22
+ });
23
+ expect(check('x/y;')).toStrictEqual({
24
+ candidate: 'x/y',
25
+ column: 4,
26
+ expects: [{ type: 'format', value: 'MIME Type' }],
27
+ length: 1,
28
+ line: 1,
29
+ matched: false,
30
+ offset: 3,
31
+ raw: ';',
32
+ reason: 'extra-token',
33
+ ref: null,
34
+ });
35
+ expect(checkNoParam('x/y;')).toStrictEqual({
36
+ candidate: 'x/y',
37
+ column: 4,
38
+ expects: [{ type: 'format', value: 'MIME Type with no parameters' }],
39
+ length: 1,
40
+ line: 1,
41
+ matched: false,
42
+ offset: 3,
43
+ raw: ';',
44
+ reason: 'extra-token',
45
+ ref: null,
46
+ });
47
+ expect(checkNoParam('x/y;a=b;c=D;E="F"')).toStrictEqual({
48
+ candidate: 'x/y',
49
+ column: 4,
50
+ expects: [{ type: 'format', value: 'MIME Type with no parameters' }],
51
+ length: 14,
52
+ line: 1,
53
+ matched: false,
54
+ offset: 3,
55
+ raw: ';a=b;c=D;E="F"',
56
+ reason: 'extra-token',
57
+ ref: null,
58
+ });
59
+ });
@@ -0,0 +1,8 @@
1
+ const { isAbsURL } = require('../../lib/whatwg/is-abs-url');
2
+
3
+ const is = isAbsURL();
4
+
5
+ test('valid', () => {
6
+ expect(is('https://markuplint.dev')).toBe(true);
7
+ expect(is('markuplint.dev')).toBe(false);
8
+ });