• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[
2    {
3        "description": "ECMA 262 regex $ does not match trailing newline",
4        "schema": {
5            "$schema": "https://json-schema.org/draft/next/schema",
6            "type": "string",
7            "pattern": "^abc$"
8        },
9        "tests": [
10            {
11                "description": "matches in Python, but not in ECMA 262",
12                "data": "abc\\n",
13                "valid": false
14            },
15            {
16                "description": "matches",
17                "data": "abc",
18                "valid": true
19            }
20        ]
21    },
22    {
23        "description": "ECMA 262 regex converts \\t to horizontal tab",
24        "schema": {
25            "$schema": "https://json-schema.org/draft/next/schema",
26            "type": "string",
27            "pattern": "^\\t$"
28        },
29        "tests": [
30            {
31                "description": "does not match",
32                "data": "\\t",
33                "valid": false
34            },
35            {
36                "description": "matches",
37                "data": "\u0009",
38                "valid": true
39            }
40        ]
41    },
42    {
43        "description": "ECMA 262 regex escapes control codes with \\c and upper letter",
44        "schema": {
45            "$schema": "https://json-schema.org/draft/next/schema",
46            "type": "string",
47            "pattern": "^\\cC$"
48        },
49        "tests": [
50            {
51                "description": "does not match",
52                "data": "\\cC",
53                "valid": false
54            },
55            {
56                "description": "matches",
57                "data": "\u0003",
58                "valid": true
59            }
60        ]
61    },
62    {
63        "description": "ECMA 262 regex escapes control codes with \\c and lower letter",
64        "schema": {
65            "$schema": "https://json-schema.org/draft/next/schema",
66            "type": "string",
67            "pattern": "^\\cc$"
68        },
69        "tests": [
70            {
71                "description": "does not match",
72                "data": "\\cc",
73                "valid": false
74            },
75            {
76                "description": "matches",
77                "data": "\u0003",
78                "valid": true
79            }
80        ]
81    },
82    {
83        "description": "ECMA 262 \\d matches ascii digits only",
84        "schema": {
85            "$schema": "https://json-schema.org/draft/next/schema",
86            "type": "string",
87            "pattern": "^\\d$"
88        },
89        "tests": [
90            {
91                "description": "ASCII zero matches",
92                "data": "0",
93                "valid": true
94            },
95            {
96                "description": "NKO DIGIT ZERO does not match (unlike e.g. Python)",
97                "data": "߀",
98                "valid": false
99            },
100            {
101                "description": "NKO DIGIT ZERO (as \\u escape) does not match",
102                "data": "\u07c0",
103                "valid": false
104            }
105        ]
106    },
107    {
108        "description": "ECMA 262 \\D matches everything but ascii digits",
109        "schema": {
110            "$schema": "https://json-schema.org/draft/next/schema",
111            "type": "string",
112            "pattern": "^\\D$"
113        },
114        "tests": [
115            {
116                "description": "ASCII zero does not match",
117                "data": "0",
118                "valid": false
119            },
120            {
121                "description": "NKO DIGIT ZERO matches (unlike e.g. Python)",
122                "data": "߀",
123                "valid": true
124            },
125            {
126                "description": "NKO DIGIT ZERO (as \\u escape) matches",
127                "data": "\u07c0",
128                "valid": true
129            }
130        ]
131    },
132    {
133        "description": "ECMA 262 \\w matches ascii letters only",
134        "schema": {
135            "$schema": "https://json-schema.org/draft/next/schema",
136            "type": "string",
137            "pattern": "^\\w$"
138        },
139        "tests": [
140            {
141                "description": "ASCII 'a' matches",
142                "data": "a",
143                "valid": true
144            },
145            {
146                "description": "latin-1 e-acute does not match (unlike e.g. Python)",
147                "data": "é",
148                "valid": false
149            }
150        ]
151    },
152    {
153        "description": "ECMA 262 \\W matches everything but ascii letters",
154        "schema": {
155            "$schema": "https://json-schema.org/draft/next/schema",
156            "type": "string",
157            "pattern": "^\\W$"
158        },
159        "tests": [
160            {
161                "description": "ASCII 'a' does not match",
162                "data": "a",
163                "valid": false
164            },
165            {
166                "description": "latin-1 e-acute matches (unlike e.g. Python)",
167                "data": "é",
168                "valid": true
169            }
170        ]
171    },
172    {
173        "description": "ECMA 262 \\s matches whitespace",
174        "schema": {
175            "$schema": "https://json-schema.org/draft/next/schema",
176            "type": "string",
177            "pattern": "^\\s$"
178        },
179        "tests": [
180            {
181                "description": "ASCII space matches",
182                "data": " ",
183                "valid": true
184            },
185            {
186                "description": "Character tabulation matches",
187                "data": "\t",
188                "valid": true
189            },
190            {
191                "description": "Line tabulation matches",
192                "data": "\u000b",
193                "valid": true
194            },
195            {
196                "description": "Form feed matches",
197                "data": "\u000c",
198                "valid": true
199            },
200            {
201                "description": "latin-1 non-breaking-space matches",
202                "data": "\u00a0",
203                "valid": true
204            },
205            {
206                "description": "zero-width whitespace matches",
207                "data": "\ufeff",
208                "valid": true
209            },
210            {
211                "description": "line feed matches (line terminator)",
212                "data": "\u000a",
213                "valid": true
214            },
215            {
216                "description": "paragraph separator matches (line terminator)",
217                "data": "\u2029",
218                "valid": true
219            },
220            {
221                "description": "EM SPACE matches (Space_Separator)",
222                "data": "\u2003",
223                "valid": true
224            },
225            {
226                "description": "Non-whitespace control does not match",
227                "data": "\u0001",
228                "valid": false
229            },
230            {
231                "description": "Non-whitespace does not match",
232                "data": "\u2013",
233                "valid": false
234            }
235        ]
236    },
237    {
238        "description": "ECMA 262 \\S matches everything but whitespace",
239        "schema": {
240            "$schema": "https://json-schema.org/draft/next/schema",
241            "type": "string",
242            "pattern": "^\\S$"
243        },
244        "tests": [
245            {
246                "description": "ASCII space does not match",
247                "data": " ",
248                "valid": false
249            },
250            {
251                "description": "Character tabulation does not match",
252                "data": "\t",
253                "valid": false
254            },
255            {
256                "description": "Line tabulation does not match",
257                "data": "\u000b",
258                "valid": false
259            },
260            {
261                "description": "Form feed does not match",
262                "data": "\u000c",
263                "valid": false
264            },
265            {
266                "description": "latin-1 non-breaking-space does not match",
267                "data": "\u00a0",
268                "valid": false
269            },
270            {
271                "description": "zero-width whitespace does not match",
272                "data": "\ufeff",
273                "valid": false
274            },
275            {
276                "description": "line feed does not match (line terminator)",
277                "data": "\u000a",
278                "valid": false
279            },
280            {
281                "description": "paragraph separator does not match (line terminator)",
282                "data": "\u2029",
283                "valid": false
284            },
285            {
286                "description": "EM SPACE does not match (Space_Separator)",
287                "data": "\u2003",
288                "valid": false
289            },
290            {
291                "description": "Non-whitespace control matches",
292                "data": "\u0001",
293                "valid": true
294            },
295            {
296                "description": "Non-whitespace matches",
297                "data": "\u2013",
298                "valid": true
299            }
300        ]
301    },
302    {
303        "description": "patterns always use unicode semantics with pattern",
304        "schema": {
305            "$schema": "https://json-schema.org/draft/next/schema",
306            "pattern": "\\p{Letter}cole"
307        },
308        "tests": [
309            {
310                "description": "ascii character in json string",
311                "data": "Les hivers de mon enfance etaient des saisons longues, longues. Nous vivions en trois lieux: l'ecole, l'eglise et la patinoire; mais la vraie vie etait sur la patinoire.",
312                "valid": true
313            },
314            {
315                "description": "literal unicode character in json string",
316                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'école, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
317                "valid": true
318            },
319            {
320                "description": "unicode character in hex format in string",
321                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'\u00e9cole, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
322                "valid": true
323            },
324            {
325                "description": "unicode matching is case-sensitive",
326                "data": "LES HIVERS DE MON ENFANCE ÉTAIENT DES SAISONS LONGUES, LONGUES. NOUS VIVIONS EN TROIS LIEUX: L'ÉCOLE, L'ÉGLISE ET LA PATINOIRE; MAIS LA VRAIE VIE ÉTAIT SUR LA PATINOIRE.",
327                "valid": false
328            }
329        ]
330    },
331    {
332        "description": "\\w in patterns matches [A-Za-z0-9_], not unicode letters",
333        "schema": {
334            "$schema": "https://json-schema.org/draft/next/schema",
335            "pattern": "\\wcole"
336        },
337        "tests": [
338            {
339                "description": "ascii character in json string",
340                "data": "Les hivers de mon enfance etaient des saisons longues, longues. Nous vivions en trois lieux: l'ecole, l'eglise et la patinoire; mais la vraie vie etait sur la patinoire.",
341                "valid": true
342            },
343            {
344                "description": "literal unicode character in json string",
345                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'école, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
346                "valid": false
347            },
348            {
349                "description": "unicode character in hex format in string",
350                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'\u00e9cole, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
351                "valid": false
352            },
353            {
354                "description": "unicode matching is case-sensitive",
355                "data": "LES HIVERS DE MON ENFANCE ÉTAIENT DES SAISONS LONGUES, LONGUES. NOUS VIVIONS EN TROIS LIEUX: L'ÉCOLE, L'ÉGLISE ET LA PATINOIRE; MAIS LA VRAIE VIE ÉTAIT SUR LA PATINOIRE.",
356                "valid": false
357            }
358        ]
359    },
360    {
361        "description": "pattern with ASCII ranges",
362        "schema": {
363            "$schema": "https://json-schema.org/draft/next/schema",
364            "pattern": "[a-z]cole"
365        },
366        "tests": [
367            {
368                "description": "literal unicode character in json string",
369                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'école, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
370                "valid": false
371            },
372            {
373                "description": "unicode character in hex format in string",
374                "data": "Les hivers de mon enfance étaient des saisons longues, longues. Nous vivions en trois lieux: l'\u00e9cole, l'église et la patinoire; mais la vraie vie était sur la patinoire.",
375                "valid": false
376            },
377            {
378                "description": "ascii characters match",
379                "data": "Les hivers de mon enfance etaient des saisons longues, longues. Nous vivions en trois lieux: l'ecole, l'eglise et la patinoire; mais la vraie vie etait sur la patinoire.",
380                "valid": true
381            }
382        ]
383    },
384    {
385        "description": "\\d in pattern matches [0-9], not unicode digits",
386        "schema": {
387            "$schema": "https://json-schema.org/draft/next/schema",
388            "pattern": "^\\d+$"
389        },
390        "tests": [
391            {
392                "description": "ascii digits",
393                "data": "42",
394                "valid": true
395            },
396            {
397                "description": "ascii non-digits",
398                "data": "-%#",
399                "valid": false
400            },
401            {
402                "description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
403                "data": "৪২",
404                "valid": false
405            }
406        ]
407    },
408    {
409        "description": "\\a is not an ECMA 262 control escape",
410        "schema": {
411            "$schema": "https://json-schema.org/draft/next/schema",
412            "$ref": "https://json-schema.org/draft/next/schema"
413        },
414        "tests": [
415            {
416                "description": "when used as a pattern",
417                "data": { "pattern": "\\a" },
418                "valid": false
419            }
420        ]
421    },
422    {
423        "description": "pattern with non-ASCII digits",
424        "schema": {
425            "$schema": "https://json-schema.org/draft/next/schema",
426            "pattern": "^\\p{digit}+$"
427        },
428        "tests": [
429            {
430                "description": "ascii digits",
431                "data": "42",
432                "valid": true
433            },
434            {
435                "description": "ascii non-digits",
436                "data": "-%#",
437                "valid": false
438            },
439            {
440                "description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
441                "data": "৪২",
442                "valid": true
443            }
444        ]
445    },
446    {
447        "description": "patterns always use unicode semantics with patternProperties",
448        "schema": {
449            "$schema": "https://json-schema.org/draft/next/schema",
450            "type": "object",
451            "patternProperties": {
452                "\\p{Letter}cole": true
453            },
454            "additionalProperties": false
455        },
456        "tests": [
457            {
458                "description": "ascii character in json string",
459                "data": { "l'ecole": "pas de vraie vie" },
460                "valid": true
461            },
462            {
463                "description": "literal unicode character in json string",
464                "data": { "l'école": "pas de vraie vie" },
465                "valid": true
466            },
467            {
468                "description": "unicode character in hex format in string",
469                "data": { "l'\u00e9cole": "pas de vraie vie" },
470                "valid": true
471            },
472            {
473                "description": "unicode matching is case-sensitive",
474                "data": { "L'ÉCOLE": "PAS DE VRAIE VIE" },
475                "valid": false
476            }
477        ]
478    },
479    {
480        "description": "\\w in patternProperties matches [A-Za-z0-9_], not unicode letters",
481        "schema": {
482            "$schema": "https://json-schema.org/draft/next/schema",
483            "type": "object",
484            "patternProperties": {
485                "\\wcole": true
486            },
487            "additionalProperties": false
488        },
489        "tests": [
490            {
491                "description": "ascii character in json string",
492                "data": { "l'ecole": "pas de vraie vie" },
493                "valid": true
494            },
495            {
496                "description": "literal unicode character in json string",
497                "data": { "l'école": "pas de vraie vie" },
498                "valid": false
499            },
500            {
501                "description": "unicode character in hex format in string",
502                "data": { "l'\u00e9cole": "pas de vraie vie" },
503                "valid": false
504            },
505            {
506                "description": "unicode matching is case-sensitive",
507                "data": { "L'ÉCOLE": "PAS DE VRAIE VIE" },
508                "valid": false
509            }
510        ]
511    },
512    {
513        "description": "patternProperties with ASCII ranges",
514        "schema": {
515            "$schema": "https://json-schema.org/draft/next/schema",
516            "type": "object",
517            "patternProperties": {
518                "[a-z]cole": true
519            },
520            "additionalProperties": false
521        },
522        "tests": [
523            {
524                "description": "literal unicode character in json string",
525                "data": { "l'école": "pas de vraie vie" },
526                "valid": false
527            },
528            {
529                "description": "unicode character in hex format in string",
530                "data": { "l'\u00e9cole": "pas de vraie vie" },
531                "valid": false
532            },
533            {
534                "description": "ascii characters match",
535                "data": { "l'ecole": "pas de vraie vie" },
536                "valid": true
537            }
538        ]
539    },
540    {
541        "description": "\\d in patternProperties matches [0-9], not unicode digits",
542        "schema": {
543            "$schema": "https://json-schema.org/draft/next/schema",
544            "type": "object",
545            "patternProperties": {
546                "^\\d+$": true
547            },
548            "additionalProperties": false
549        },
550        "tests": [
551            {
552                "description": "ascii digits",
553                "data": { "42": "life, the universe, and everything" },
554                "valid": true
555            },
556            {
557                "description": "ascii non-digits",
558                "data": { "-%#": "spending the year dead for tax reasons" },
559                "valid": false
560            },
561            {
562                "description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
563                "data": { "৪২": "khajit has wares if you have coin" },
564                "valid": false
565            }
566        ]
567    },
568    {
569        "description": "patternProperties with non-ASCII digits",
570        "schema": {
571            "$schema": "https://json-schema.org/draft/next/schema",
572            "type": "object",
573            "patternProperties": {
574                "^\\p{digit}+$": true
575            },
576            "additionalProperties": false
577        },
578        "tests": [
579            {
580                "description": "ascii digits",
581                "data": { "42": "life, the universe, and everything" },
582                "valid": true
583            },
584            {
585                "description": "ascii non-digits",
586                "data": { "-%#": "spending the year dead for tax reasons" },
587                "valid": false
588            },
589            {
590                "description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
591                "data": { "৪২": "khajit has wares if you have coin" },
592                "valid": true
593            }
594        ]
595    }
596]
597