Skip to content

Commit a42091c

Browse files
add tests for pattern matching with unicode semantics
Supporting this is now mandatory in draft2020-12.
1 parent e7f8b3e commit a42091c

File tree

4 files changed

+288
-0
lines changed

4 files changed

+288
-0
lines changed

tests/draft-future/pattern.json

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,68 @@
5555
"valid": true
5656
}
5757
]
58+
},
59+
{
60+
"description": "unicode semantics should be used for all pattern matching",
61+
"schema": { "pattern": "\\wcole" },
62+
"tests": [
63+
{
64+
"description": "literal unicode character in json string",
65+
"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.",
66+
"valid": true
67+
},
68+
{
69+
"description": "unicode character in hex format in string",
70+
"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.",
71+
"valid": true
72+
},
73+
{
74+
"description": "unicode matching is case-sensitive",
75+
"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.",
76+
"valid": false
77+
}
78+
]
79+
},
80+
{
81+
"description": "unicode characters do not match ascii ranges",
82+
"schema": { "pattern": "[a-z]cole" },
83+
"tests": [
84+
{
85+
"description": "literal unicode character in json string",
86+
"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.",
87+
"valid": false
88+
},
89+
{
90+
"description": "unicode character in hex format in string",
91+
"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.",
92+
"valid": false
93+
},
94+
{
95+
"description": "ascii characters match",
96+
"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.",
97+
"valid": true
98+
}
99+
]
100+
},
101+
{
102+
"description": "unicode digits are more than 0 through 9",
103+
"schema": { "pattern": "^\\d+$" },
104+
"tests": [
105+
{
106+
"description": "ascii digits",
107+
"data": "42",
108+
"valid": true
109+
},
110+
{
111+
"description": "ascii non-digits",
112+
"data": "-%#",
113+
"valid": false
114+
},
115+
{
116+
"description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
117+
"data": "৪২",
118+
"valid": true
119+
}
120+
]
58121
}
59122
]

tests/draft-future/patternProperties.json

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,86 @@
152152
"valid": true
153153
}
154154
]
155+
},
156+
{
157+
"description": "unicode semantics should be used for all pattern matching",
158+
"schema": {
159+
"type": "object",
160+
"patternProperties": {
161+
"\\wcole": true
162+
},
163+
"additionalProperties": false
164+
},
165+
"tests": [
166+
{
167+
"description": "literal unicode character in json string",
168+
"data": { "l'école": "pas de vraie vie" },
169+
"valid": true
170+
},
171+
{
172+
"description": "unicode character in hex format in string",
173+
"data": { "l'\u00e9cole": "pas de vraie vie" },
174+
"valid": true
175+
},
176+
{
177+
"description": "unicode matching is case-sensitive",
178+
"data": { "L'ÉCOLE": "PAS DE VRAIE VIE" },
179+
"valid": false
180+
}
181+
]
182+
},
183+
{
184+
"description": "unicode characters do not match ascii ranges",
185+
"schema": {
186+
"type": "object",
187+
"patternProperties": {
188+
"[a-z]cole": true
189+
},
190+
"additionalProperties": false
191+
},
192+
"tests": [
193+
{
194+
"description": "literal unicode character in json string",
195+
"data": { "l'école": "pas de vraie vie" },
196+
"valid": false
197+
},
198+
{
199+
"description": "unicode character in hex format in string",
200+
"data": { "l'\u00e9cole": "pas de vraie vie" },
201+
"valid": false
202+
},
203+
{
204+
"description": "ascii characters match",
205+
"data": { "l'ecole": "pas de vraie vie" },
206+
"valid": true
207+
}
208+
]
209+
},
210+
{
211+
"description": "unicode digits are more than 0 through 9",
212+
"schema": {
213+
"type": "object",
214+
"patternProperties": {
215+
"^\\d+$": true
216+
},
217+
"additionalProperties": false
218+
},
219+
"tests": [
220+
{
221+
"description": "ascii digits",
222+
"data": { "42": "life, the universe, and everything" },
223+
"valid": true
224+
},
225+
{
226+
"description": "ascii non-digits",
227+
"data": { "-%#": "spending the year dead for tax reasons" },
228+
"valid": false
229+
},
230+
{
231+
"description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
232+
"data": { "৪২": "khajit has wares if you have coin" },
233+
"valid": true
234+
}
235+
]
155236
}
156237
]

tests/draft2020-12/pattern.json

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,68 @@
5555
"valid": true
5656
}
5757
]
58+
},
59+
{
60+
"description": "unicode semantics should be used for all pattern matching",
61+
"schema": { "pattern": "\\wcole" },
62+
"tests": [
63+
{
64+
"description": "literal unicode character in json string",
65+
"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.",
66+
"valid": true
67+
},
68+
{
69+
"description": "unicode character in hex format in string",
70+
"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.",
71+
"valid": true
72+
},
73+
{
74+
"description": "unicode matching is case-sensitive",
75+
"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.",
76+
"valid": false
77+
}
78+
]
79+
},
80+
{
81+
"description": "unicode characters do not match ascii ranges",
82+
"schema": { "pattern": "[a-z]cole" },
83+
"tests": [
84+
{
85+
"description": "literal unicode character in json string",
86+
"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.",
87+
"valid": false
88+
},
89+
{
90+
"description": "unicode character in hex format in string",
91+
"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.",
92+
"valid": false
93+
},
94+
{
95+
"description": "ascii characters match",
96+
"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.",
97+
"valid": true
98+
}
99+
]
100+
},
101+
{
102+
"description": "unicode digits are more than 0 through 9",
103+
"schema": { "pattern": "^\\d+$" },
104+
"tests": [
105+
{
106+
"description": "ascii digits",
107+
"data": "42",
108+
"valid": true
109+
},
110+
{
111+
"description": "ascii non-digits",
112+
"data": "-%#",
113+
"valid": false
114+
},
115+
{
116+
"description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
117+
"data": "৪২",
118+
"valid": true
119+
}
120+
]
58121
}
59122
]

tests/draft2020-12/patternProperties.json

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,86 @@
152152
"valid": true
153153
}
154154
]
155+
},
156+
{
157+
"description": "unicode semantics should be used for all pattern matching",
158+
"schema": {
159+
"type": "object",
160+
"patternProperties": {
161+
"\\wcole": true
162+
},
163+
"additionalProperties": false
164+
},
165+
"tests": [
166+
{
167+
"description": "literal unicode character in json string",
168+
"data": { "l'école": "pas de vraie vie" },
169+
"valid": true
170+
},
171+
{
172+
"description": "unicode character in hex format in string",
173+
"data": { "l'\u00e9cole": "pas de vraie vie" },
174+
"valid": true
175+
},
176+
{
177+
"description": "unicode matching is case-sensitive",
178+
"data": { "L'ÉCOLE": "PAS DE VRAIE VIE" },
179+
"valid": false
180+
}
181+
]
182+
},
183+
{
184+
"description": "unicode characters do not match ascii ranges",
185+
"schema": {
186+
"type": "object",
187+
"patternProperties": {
188+
"[a-z]cole": true
189+
},
190+
"additionalProperties": false
191+
},
192+
"tests": [
193+
{
194+
"description": "literal unicode character in json string",
195+
"data": { "l'école": "pas de vraie vie" },
196+
"valid": false
197+
},
198+
{
199+
"description": "unicode character in hex format in string",
200+
"data": { "l'\u00e9cole": "pas de vraie vie" },
201+
"valid": false
202+
},
203+
{
204+
"description": "ascii characters match",
205+
"data": { "l'ecole": "pas de vraie vie" },
206+
"valid": true
207+
}
208+
]
209+
},
210+
{
211+
"description": "unicode digits are more than 0 through 9",
212+
"schema": {
213+
"type": "object",
214+
"patternProperties": {
215+
"^\\d+$": true
216+
},
217+
"additionalProperties": false
218+
},
219+
"tests": [
220+
{
221+
"description": "ascii digits",
222+
"data": { "42": "life, the universe, and everything" },
223+
"valid": true
224+
},
225+
{
226+
"description": "ascii non-digits",
227+
"data": { "-%#": "spending the year dead for tax reasons" },
228+
"valid": false
229+
},
230+
{
231+
"description": "non-ascii digits (BENGALI DIGIT FOUR, BENGALI DIGIT TWO)",
232+
"data": { "৪২": "khajit has wares if you have coin" },
233+
"valid": true
234+
}
235+
]
155236
}
156237
]

0 commit comments

Comments
 (0)