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