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