Skip to content

Commit a5302a4

Browse files
committed
[329] Add tests for uniqueItems=false
This simply duplicates all the uniqueItems=true tests and makes appropriate changes. All drafts are affected.
1 parent 0bf6358 commit a5302a4

File tree

5 files changed

+857
-12
lines changed

5 files changed

+857
-12
lines changed

tests/draft2019-09/uniqueItems.json

Lines changed: 174 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
{
9090
"description": "uniqueItems with an array of items",
9191
"schema": {
92-
"items": [{"type": "boolean"}, {"type": "boolean"}],
92+
"items": [{"type": "boolean"}, {"type": "boolean"}],
9393
"uniqueItems": true
9494
},
9595
"tests": [
@@ -138,8 +138,8 @@
138138
{
139139
"description": "uniqueItems with an array of items and additionalItems=false",
140140
"schema": {
141-
"items": [{"type": "boolean"}, {"type": "boolean"}],
142-
"uniqueItems": true,
141+
"items": [{"type": "boolean"}, {"type": "boolean"}],
142+
"uniqueItems": true,
143143
"additionalItems": false
144144
},
145145
"tests": [
@@ -169,5 +169,176 @@
169169
"valid": false
170170
}
171171
]
172+
},
173+
{
174+
"description": "uniqueItems=false validation",
175+
"schema": { "uniqueItems": false },
176+
"tests": [
177+
{
178+
"description": "unique array of integers is valid",
179+
"data": [1, 2],
180+
"valid": true
181+
},
182+
{
183+
"description": "non-unique array of integers is valid",
184+
"data": [1, 1],
185+
"valid": true
186+
},
187+
{
188+
"description": "numbers are unique if mathematically unequal",
189+
"data": [1.0, 1.00, 1],
190+
"valid": true
191+
},
192+
{
193+
"description": "false is not equal to zero",
194+
"data": [0, false],
195+
"valid": true
196+
},
197+
{
198+
"description": "true is not equal to one",
199+
"data": [1, true],
200+
"valid": true
201+
},
202+
{
203+
"description": "unique array of objects is valid",
204+
"data": [{"foo": "bar"}, {"foo": "baz"}],
205+
"valid": true
206+
},
207+
{
208+
"description": "non-unique array of objects is valid",
209+
"data": [{"foo": "bar"}, {"foo": "bar"}],
210+
"valid": true
211+
},
212+
{
213+
"description": "unique array of nested objects is valid",
214+
"data": [
215+
{"foo": {"bar" : {"baz" : true}}},
216+
{"foo": {"bar" : {"baz" : false}}}
217+
],
218+
"valid": true
219+
},
220+
{
221+
"description": "non-unique array of nested objects is valid",
222+
"data": [
223+
{"foo": {"bar" : {"baz" : true}}},
224+
{"foo": {"bar" : {"baz" : true}}}
225+
],
226+
"valid": true
227+
},
228+
{
229+
"description": "unique array of arrays is valid",
230+
"data": [["foo"], ["bar"]],
231+
"valid": true
232+
},
233+
{
234+
"description": "non-unique array of arrays is valid",
235+
"data": [["foo"], ["foo"]],
236+
"valid": true
237+
},
238+
{
239+
"description": "1 and true are unique",
240+
"data": [1, true],
241+
"valid": true
242+
},
243+
{
244+
"description": "0 and false are unique",
245+
"data": [0, false],
246+
"valid": true
247+
},
248+
{
249+
"description": "unique heterogeneous types are valid",
250+
"data": [{}, [1], true, null, 1],
251+
"valid": true
252+
},
253+
{
254+
"description": "non-unique heterogeneous types are valid",
255+
"data": [{}, [1], true, null, {}, 1],
256+
"valid": true
257+
}
258+
]
259+
},
260+
{
261+
"description": "uniqueItems=false with an array of items",
262+
"schema": {
263+
"items": [{"type": "boolean"}, {"type": "boolean"}],
264+
"uniqueItems": false
265+
},
266+
"tests": [
267+
{
268+
"description": "[false, true] from items array is valid",
269+
"data": [false, true],
270+
"valid": true
271+
},
272+
{
273+
"description": "[true, false] from items array is valid",
274+
"data": [true, false],
275+
"valid": true
276+
},
277+
{
278+
"description": "[false, false] from items array is valid",
279+
"data": [false, false],
280+
"valid": true
281+
},
282+
{
283+
"description": "[true, true] from items array is valid",
284+
"data": [true, true],
285+
"valid": true
286+
},
287+
{
288+
"description": "unique array extended from [false, true] is valid",
289+
"data": [false, true, "foo", "bar"],
290+
"valid": true
291+
},
292+
{
293+
"description": "unique array extended from [true, false] is valid",
294+
"data": [true, false, "foo", "bar"],
295+
"valid": true
296+
},
297+
{
298+
"description": "non-unique array extended from [false, true] is valid",
299+
"data": [false, true, "foo", "foo"],
300+
"valid": true
301+
},
302+
{
303+
"description": "non-unique array extended from [true, false] is valid",
304+
"data": [true, false, "foo", "foo"],
305+
"valid": true
306+
}
307+
]
308+
},
309+
{
310+
"description": "uniqueItems=false with an array of items and additionalItems=false",
311+
"schema": {
312+
"items": [{"type": "boolean"}, {"type": "boolean"}],
313+
"uniqueItems": false,
314+
"additionalItems": false
315+
},
316+
"tests": [
317+
{
318+
"description": "[false, true] from items array is valid",
319+
"data": [false, true],
320+
"valid": true
321+
},
322+
{
323+
"description": "[true, false] from items array is valid",
324+
"data": [true, false],
325+
"valid": true
326+
},
327+
{
328+
"description": "[false, false] from items array is valid",
329+
"data": [false, false],
330+
"valid": true
331+
},
332+
{
333+
"description": "[true, true] from items array is valid",
334+
"data": [true, true],
335+
"valid": true
336+
},
337+
{
338+
"description": "extra items are invalid even if unique",
339+
"data": [false, true, null],
340+
"valid": false
341+
}
342+
]
172343
}
173344
]

tests/draft3/uniqueItems.json

Lines changed: 164 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
{
8080
"description": "uniqueItems with an array of items",
8181
"schema": {
82-
"items": [{"type": "boolean"}, {"type": "boolean"}],
82+
"items": [{"type": "boolean"}, {"type": "boolean"}],
8383
"uniqueItems": true
8484
},
8585
"tests": [
@@ -128,8 +128,8 @@
128128
{
129129
"description": "uniqueItems with an array of items and additionalItems=false",
130130
"schema": {
131-
"items": [{"type": "boolean"}, {"type": "boolean"}],
132-
"uniqueItems": true,
131+
"items": [{"type": "boolean"}, {"type": "boolean"}],
132+
"uniqueItems": true,
133133
"additionalItems": false
134134
},
135135
"tests": [
@@ -159,5 +159,166 @@
159159
"valid": false
160160
}
161161
]
162+
},
163+
{
164+
"description": "uniqueItems=false validation",
165+
"schema": { "uniqueItems": false },
166+
"tests": [
167+
{
168+
"description": "unique array of integers is valid",
169+
"data": [1, 2],
170+
"valid": true
171+
},
172+
{
173+
"description": "non-unique array of integers is valid",
174+
"data": [1, 1],
175+
"valid": true
176+
},
177+
{
178+
"description": "numbers are unique if mathematically unequal",
179+
"data": [1.0, 1.00, 1],
180+
"valid": true
181+
},
182+
{
183+
"description": "unique array of objects is valid",
184+
"data": [{"foo": "bar"}, {"foo": "baz"}],
185+
"valid": true
186+
},
187+
{
188+
"description": "non-unique array of objects is valid",
189+
"data": [{"foo": "bar"}, {"foo": "bar"}],
190+
"valid": true
191+
},
192+
{
193+
"description": "unique array of nested objects is valid",
194+
"data": [
195+
{"foo": {"bar" : {"baz" : true}}},
196+
{"foo": {"bar" : {"baz" : false}}}
197+
],
198+
"valid": true
199+
},
200+
{
201+
"description": "non-unique array of nested objects is valid",
202+
"data": [
203+
{"foo": {"bar" : {"baz" : true}}},
204+
{"foo": {"bar" : {"baz" : true}}}
205+
],
206+
"valid": true
207+
},
208+
{
209+
"description": "unique array of arrays is valid",
210+
"data": [["foo"], ["bar"]],
211+
"valid": true
212+
},
213+
{
214+
"description": "non-unique array of arrays is valid",
215+
"data": [["foo"], ["foo"]],
216+
"valid": true
217+
},
218+
{
219+
"description": "1 and true are unique",
220+
"data": [1, true],
221+
"valid": true
222+
},
223+
{
224+
"description": "0 and false are unique",
225+
"data": [0, false],
226+
"valid": true
227+
},
228+
{
229+
"description": "unique heterogeneous types are valid",
230+
"data": [{}, [1], true, null, 1],
231+
"valid": true
232+
},
233+
{
234+
"description": "non-unique heterogeneous types are valid",
235+
"data": [{}, [1], true, null, {}, 1],
236+
"valid": true
237+
}
238+
]
239+
},
240+
{
241+
"description": "uniqueItems=false with an array of items",
242+
"schema": {
243+
"items": [{"type": "boolean"}, {"type": "boolean"}],
244+
"uniqueItems": false
245+
},
246+
"tests": [
247+
{
248+
"description": "[false, true] from items array is valid",
249+
"data": [false, true],
250+
"valid": true
251+
},
252+
{
253+
"description": "[true, false] from items array is valid",
254+
"data": [true, false],
255+
"valid": true
256+
},
257+
{
258+
"description": "[false, false] from items array is valid",
259+
"data": [false, false],
260+
"valid": true
261+
},
262+
{
263+
"description": "[true, true] from items array is valid",
264+
"data": [true, true],
265+
"valid": true
266+
},
267+
{
268+
"description": "unique array extended from [false, true] is valid",
269+
"data": [false, true, "foo", "bar"],
270+
"valid": true
271+
},
272+
{
273+
"description": "unique array extended from [true, false] is valid",
274+
"data": [true, false, "foo", "bar"],
275+
"valid": true
276+
},
277+
{
278+
"description": "non-unique array extended from [false, true] is valid",
279+
"data": [false, true, "foo", "foo"],
280+
"valid": true
281+
},
282+
{
283+
"description": "non-unique array extended from [true, false] is valid",
284+
"data": [true, false, "foo", "foo"],
285+
"valid": true
286+
}
287+
]
288+
},
289+
{
290+
"description": "uniqueItems=false with an array of items and additionalItems=false",
291+
"schema": {
292+
"items": [{"type": "boolean"}, {"type": "boolean"}],
293+
"uniqueItems": false,
294+
"additionalItems": false
295+
},
296+
"tests": [
297+
{
298+
"description": "[false, true] from items array is valid",
299+
"data": [false, true],
300+
"valid": true
301+
},
302+
{
303+
"description": "[true, false] from items array is valid",
304+
"data": [true, false],
305+
"valid": true
306+
},
307+
{
308+
"description": "[false, false] from items array is valid",
309+
"data": [false, false],
310+
"valid": true
311+
},
312+
{
313+
"description": "[true, true] from items array is valid",
314+
"data": [true, true],
315+
"valid": true
316+
},
317+
{
318+
"description": "extra items are invalid even if unique",
319+
"data": [false, true, null],
320+
"valid": false
321+
}
322+
]
162323
}
163324
]

0 commit comments

Comments
 (0)