xref: /aosp_15_r20/external/json-schema-validator/src/test/suite/tests/draft4/uniqueItems.json (revision 78c4dd6aa35290980cdcd1623a7e337e8d021c7c)
1[
2    {
3        "description": "uniqueItems validation",
4        "schema": {"uniqueItems": true},
5        "tests": [
6            {
7                "description": "unique array of integers is valid",
8                "data": [1, 2],
9                "valid": true
10            },
11            {
12                "description": "non-unique array of integers is invalid",
13                "data": [1, 1],
14                "valid": false
15            },
16            {
17                "description": "non-unique array of more than two integers is invalid",
18                "data": [1, 2, 1],
19                "valid": false
20            },
21            {
22                "description": "numbers are unique if mathematically unequal",
23                "data": [1.0, 1.00, 1],
24                "valid": false
25            },
26            {
27                "description": "false is not equal to zero",
28                "data": [0, false],
29                "valid": true
30            },
31            {
32                "description": "true is not equal to one",
33                "data": [1, true],
34                "valid": true
35            },
36            {
37                "description": "unique array of strings is valid",
38                "data": ["foo", "bar", "baz"],
39                "valid": true
40            },
41            {
42                "description": "non-unique array of strings is invalid",
43                "data": ["foo", "bar", "foo"],
44                "valid": false
45            },
46            {
47                "description": "unique array of objects is valid",
48                "data": [{"foo": "bar"}, {"foo": "baz"}],
49                "valid": true
50            },
51            {
52                "description": "non-unique array of objects is invalid",
53                "data": [{"foo": "bar"}, {"foo": "bar"}],
54                "valid": false
55            },
56            {
57                "description": "property order of array of objects is ignored",
58                "data": [{"foo": "bar", "bar": "foo"}, {"bar": "foo", "foo": "bar"}],
59                "valid": false
60            },
61            {
62                "description": "unique array of nested objects is valid",
63                "data": [
64                    {"foo": {"bar" : {"baz" : true}}},
65                    {"foo": {"bar" : {"baz" : false}}}
66                ],
67                "valid": true
68            },
69            {
70                "description": "non-unique array of nested objects is invalid",
71                "data": [
72                    {"foo": {"bar" : {"baz" : true}}},
73                    {"foo": {"bar" : {"baz" : true}}}
74                ],
75                "valid": false
76            },
77            {
78                "description": "unique array of arrays is valid",
79                "data": [["foo"], ["bar"]],
80                "valid": true
81            },
82            {
83                "description": "non-unique array of arrays is invalid",
84                "data": [["foo"], ["foo"]],
85                "valid": false
86            },
87            {
88                "description": "non-unique array of more than two arrays is invalid",
89                "data": [["foo"], ["bar"], ["foo"]],
90                "valid": false
91            },
92            {
93                "description": "1 and true are unique",
94                "data": [1, true],
95                "valid": true
96            },
97            {
98                "description": "0 and false are unique",
99                "data": [0, false],
100                "valid": true
101            },
102            {
103                "description": "[1] and [true] are unique",
104                "data": [[1], [true]],
105                "valid": true
106            },
107            {
108                "description": "[0] and [false] are unique",
109                "data": [[0], [false]],
110                "valid": true
111            },
112            {
113                "description": "nested [1] and [true] are unique",
114                "data": [[[1], "foo"], [[true], "foo"]],
115                "valid": true
116            },
117            {
118                "description": "nested [0] and [false] are unique",
119                "data": [[[0], "foo"], [[false], "foo"]],
120                "valid": true
121            },
122            {
123                "description": "unique heterogeneous types are valid",
124                "data": [{}, [1], true, null, 1, "{}"],
125                "valid": true
126            },
127            {
128                "description": "non-unique heterogeneous types are invalid",
129                "data": [{}, [1], true, null, {}, 1],
130                "valid": false
131            },
132            {
133                "description": "different objects are unique",
134                "data": [{"a": 1, "b": 2}, {"a": 2, "b": 1}],
135                "valid": true
136            },
137            {
138                "description": "objects are non-unique despite key order",
139                "data": [{"a": 1, "b": 2}, {"b": 2, "a": 1}],
140                "valid": false
141            },
142            {
143                "description": "{\"a\": false} and {\"a\": 0} are unique",
144                "data": [{"a": false}, {"a": 0}],
145                "valid": true
146            },
147            {
148                "description": "{\"a\": true} and {\"a\": 1} are unique",
149                "data": [{"a": true}, {"a": 1}],
150                "valid": true
151            }
152        ]
153    },
154    {
155        "description": "uniqueItems with an array of items",
156        "schema": {
157            "items": [{"type": "boolean"}, {"type": "boolean"}],
158            "uniqueItems": true
159        },
160        "tests": [
161            {
162                "description": "[false, true] from items array is valid",
163                "data": [false, true],
164                "valid": true
165            },
166            {
167                "description": "[true, false] from items array is valid",
168                "data": [true, false],
169                "valid": true
170            },
171            {
172                "description": "[false, false] from items array is not valid",
173                "data": [false, false],
174                "valid": false
175            },
176            {
177                "description": "[true, true] from items array is not valid",
178                "data": [true, true],
179                "valid": false
180            },
181            {
182                "description": "unique array extended from [false, true] is valid",
183                "data": [false, true, "foo", "bar"],
184                "valid": true
185            },
186            {
187                "description": "unique array extended from [true, false] is valid",
188                "data": [true, false, "foo", "bar"],
189                "valid": true
190            },
191            {
192                "description": "non-unique array extended from [false, true] is not valid",
193                "data": [false, true, "foo", "foo"],
194                "valid": false
195            },
196            {
197                "description": "non-unique array extended from [true, false] is not valid",
198                "data": [true, false, "foo", "foo"],
199                "valid": false
200            }
201        ]
202    },
203    {
204        "description": "uniqueItems with an array of items and additionalItems=false",
205        "schema": {
206            "items": [{"type": "boolean"}, {"type": "boolean"}],
207            "uniqueItems": true,
208            "additionalItems": false
209        },
210        "tests": [
211            {
212                "description": "[false, true] from items array is valid",
213                "data": [false, true],
214                "valid": true
215            },
216            {
217                "description": "[true, false] from items array is valid",
218                "data": [true, false],
219                "valid": true
220            },
221            {
222                "description": "[false, false] from items array is not valid",
223                "data": [false, false],
224                "valid": false
225            },
226            {
227                "description": "[true, true] from items array is not valid",
228                "data": [true, true],
229                "valid": false
230            },
231            {
232                "description": "extra items are invalid even if unique",
233                "data": [false, true, null],
234                "valid": false
235            }
236        ]
237    },
238    {
239        "description": "uniqueItems=false validation",
240        "schema": { "uniqueItems": false },
241        "tests": [
242            {
243                "description": "unique array of integers is valid",
244                "data": [1, 2],
245                "valid": true
246            },
247            {
248                "description": "non-unique array of integers is valid",
249                "data": [1, 1],
250                "valid": true
251            },
252            {
253                "description": "numbers are unique if mathematically unequal",
254                "data": [1.0, 1.00, 1],
255                "valid": true
256            },
257            {
258                "description": "false is not equal to zero",
259                "data": [0, false],
260                "valid": true
261            },
262            {
263                "description": "true is not equal to one",
264                "data": [1, true],
265                "valid": true
266            },
267            {
268                "description": "unique array of objects is valid",
269                "data": [{"foo": "bar"}, {"foo": "baz"}],
270                "valid": true
271            },
272            {
273                "description": "non-unique array of objects is valid",
274                "data": [{"foo": "bar"}, {"foo": "bar"}],
275                "valid": true
276            },
277            {
278                "description": "unique array of nested objects is valid",
279                "data": [
280                    {"foo": {"bar" : {"baz" : true}}},
281                    {"foo": {"bar" : {"baz" : false}}}
282                ],
283                "valid": true
284            },
285            {
286                "description": "non-unique array of nested objects is valid",
287                "data": [
288                    {"foo": {"bar" : {"baz" : true}}},
289                    {"foo": {"bar" : {"baz" : true}}}
290                ],
291                "valid": true
292            },
293            {
294                "description": "unique array of arrays is valid",
295                "data": [["foo"], ["bar"]],
296                "valid": true
297            },
298            {
299                "description": "non-unique array of arrays is valid",
300                "data": [["foo"], ["foo"]],
301                "valid": true
302            },
303            {
304                "description": "1 and true are unique",
305                "data": [1, true],
306                "valid": true
307            },
308            {
309                "description": "0 and false are unique",
310                "data": [0, false],
311                "valid": true
312            },
313            {
314                "description": "unique heterogeneous types are valid",
315                "data": [{}, [1], true, null, 1],
316                "valid": true
317            },
318            {
319                "description": "non-unique heterogeneous types are valid",
320                "data": [{}, [1], true, null, {}, 1],
321                "valid": true
322            }
323        ]
324    },
325    {
326        "description": "uniqueItems=false with an array of items",
327        "schema": {
328            "items": [{"type": "boolean"}, {"type": "boolean"}],
329            "uniqueItems": false
330        },
331        "tests": [
332            {
333                "description": "[false, true] from items array is valid",
334                "data": [false, true],
335                "valid": true
336            },
337            {
338                "description": "[true, false] from items array is valid",
339                "data": [true, false],
340                "valid": true
341            },
342            {
343                "description": "[false, false] from items array is valid",
344                "data": [false, false],
345                "valid": true
346            },
347            {
348                "description": "[true, true] from items array is valid",
349                "data": [true, true],
350                "valid": true
351            },
352            {
353                "description": "unique array extended from [false, true] is valid",
354                "data": [false, true, "foo", "bar"],
355                "valid": true
356            },
357            {
358                "description": "unique array extended from [true, false] is valid",
359                "data": [true, false, "foo", "bar"],
360                "valid": true
361            },
362            {
363                "description": "non-unique array extended from [false, true] is valid",
364                "data": [false, true, "foo", "foo"],
365                "valid": true
366            },
367            {
368                "description": "non-unique array extended from [true, false] is valid",
369                "data": [true, false, "foo", "foo"],
370                "valid": true
371            }
372        ]
373    },
374    {
375        "description": "uniqueItems=false with an array of items and additionalItems=false",
376        "schema": {
377            "items": [{"type": "boolean"}, {"type": "boolean"}],
378            "uniqueItems": false,
379            "additionalItems": false
380        },
381        "tests": [
382            {
383                "description": "[false, true] from items array is valid",
384                "data": [false, true],
385                "valid": true
386            },
387            {
388                "description": "[true, false] from items array is valid",
389                "data": [true, false],
390                "valid": true
391            },
392            {
393                "description": "[false, false] from items array is valid",
394                "data": [false, false],
395                "valid": true
396            },
397            {
398                "description": "[true, true] from items array is valid",
399                "data": [true, true],
400                "valid": true
401            },
402            {
403                "description": "extra items are invalid even if unique",
404                "data": [false, true, null],
405                "valid": false
406            }
407        ]
408    }
409]
410