xref: /aosp_15_r20/external/json-schema-validator/src/test/suite/tests/draft3/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": "unique array of strings is valid",
28                "data": ["foo", "bar", "baz"],
29                "valid": true
30            },
31            {
32                "description": "non-unique array of strings is invalid",
33                "data": ["foo", "bar", "foo"],
34                "valid": false
35            },
36            {
37                "description": "unique array of objects is valid",
38                "data": [{"foo": "bar"}, {"foo": "baz"}],
39                "valid": true
40            },
41            {
42                "description": "non-unique array of objects is invalid",
43                "data": [{"foo": "bar"}, {"foo": "bar"}],
44                "valid": false
45            },
46            {
47                "description": "unique array of nested objects is valid",
48                "data": [
49                    {"foo": {"bar" : {"baz" : true}}},
50                    {"foo": {"bar" : {"baz" : false}}}
51                ],
52                "valid": true
53            },
54            {
55                "description": "non-unique array of nested objects is invalid",
56                "data": [
57                    {"foo": {"bar" : {"baz" : true}}},
58                    {"foo": {"bar" : {"baz" : true}}}
59                ],
60                "valid": false
61            },
62            {
63                "description": "unique array of arrays is valid",
64                "data": [["foo"], ["bar"]],
65                "valid": true
66            },
67            {
68                "description": "non-unique array of arrays is invalid",
69                "data": [["foo"], ["foo"]],
70                "valid": false
71            },
72            {
73                "description": "non-unique array of more than two arrays is invalid",
74                "data": [["foo"], ["bar"], ["foo"]],
75                "valid": false
76            },
77            {
78                "description": "1 and true are unique",
79                "data": [1, true],
80                "valid": true
81            },
82            {
83                "description": "0 and false are unique",
84                "data": [0, false],
85                "valid": true
86            },
87            {
88                "description": "[1] and [true] are unique",
89                "data": [[1], [true]],
90                "valid": true
91            },
92            {
93                "description": "[0] and [false] are unique",
94                "data": [[0], [false]],
95                "valid": true
96            },
97            {
98                "description": "nested [1] and [true] are unique",
99                "data": [[[1], "foo"], [[true], "foo"]],
100                "valid": true
101            },
102            {
103                "description": "nested [0] and [false] are unique",
104                "data": [[[0], "foo"], [[false], "foo"]],
105                "valid": true
106            },
107            {
108                "description": "unique heterogeneous types are valid",
109                "data": [{}, [1], true, null, 1],
110                "valid": true
111            },
112            {
113                "description": "non-unique heterogeneous types are invalid",
114                "data": [{}, [1], true, null, {}, 1],
115                "valid": false
116            },
117            {
118                "description": "{\"a\": false} and {\"a\": 0} are unique",
119                "data": [{"a": false}, {"a": 0}],
120                "valid": true
121            },
122            {
123                "description": "{\"a\": true} and {\"a\": 1} are unique",
124                "data": [{"a": true}, {"a": 1}],
125                "valid": true
126            }
127        ]
128    },
129    {
130        "description": "uniqueItems with an array of items",
131        "schema": {
132            "items": [{"type": "boolean"}, {"type": "boolean"}],
133            "uniqueItems": true
134        },
135        "tests": [
136            {
137                "description": "[false, true] from items array is valid",
138                "data": [false, true],
139                "valid": true
140            },
141            {
142                "description": "[true, false] from items array is valid",
143                "data": [true, false],
144                "valid": true
145            },
146            {
147                "description": "[false, false] from items array is not valid",
148                "data": [false, false],
149                "valid": false
150            },
151            {
152                "description": "[true, true] from items array is not valid",
153                "data": [true, true],
154                "valid": false
155            },
156            {
157                "description": "unique array extended from [false, true] is valid",
158                "data": [false, true, "foo", "bar"],
159                "valid": true
160            },
161            {
162                "description": "unique array extended from [true, false] is valid",
163                "data": [true, false, "foo", "bar"],
164                "valid": true
165            },
166            {
167                "description": "non-unique array extended from [false, true] is not valid",
168                "data": [false, true, "foo", "foo"],
169                "valid": false
170            },
171            {
172                "description": "non-unique array extended from [true, false] is not valid",
173                "data": [true, false, "foo", "foo"],
174                "valid": false
175            }
176        ]
177    },
178    {
179        "description": "uniqueItems with an array of items and additionalItems=false",
180        "schema": {
181            "items": [{"type": "boolean"}, {"type": "boolean"}],
182            "uniqueItems": true,
183            "additionalItems": false
184        },
185        "tests": [
186            {
187                "description": "[false, true] from items array is valid",
188                "data": [false, true],
189                "valid": true
190            },
191            {
192                "description": "[true, false] from items array is valid",
193                "data": [true, false],
194                "valid": true
195            },
196            {
197                "description": "[false, false] from items array is not valid",
198                "data": [false, false],
199                "valid": false
200            },
201            {
202                "description": "[true, true] from items array is not valid",
203                "data": [true, true],
204                "valid": false
205            },
206            {
207                "description": "extra items are invalid even if unique",
208                "data": [false, true, null],
209                "valid": false
210            }
211        ]
212    },
213    {
214        "description": "uniqueItems=false validation",
215        "schema": { "uniqueItems": false },
216        "tests": [
217            {
218                "description": "unique array of integers is valid",
219                "data": [1, 2],
220                "valid": true
221            },
222            {
223                "description": "non-unique array of integers is valid",
224                "data": [1, 1],
225                "valid": true
226            },
227            {
228                "description": "numbers are unique if mathematically unequal",
229                "data": [1.0, 1.00, 1],
230                "valid": true
231            },
232            {
233                "description": "unique array of objects is valid",
234                "data": [{"foo": "bar"}, {"foo": "baz"}],
235                "valid": true
236            },
237            {
238                "description": "non-unique array of objects is valid",
239                "data": [{"foo": "bar"}, {"foo": "bar"}],
240                "valid": true
241            },
242            {
243                "description": "unique array of nested objects is valid",
244                "data": [
245                    {"foo": {"bar" : {"baz" : true}}},
246                    {"foo": {"bar" : {"baz" : false}}}
247                ],
248                "valid": true
249            },
250            {
251                "description": "non-unique array of nested objects is valid",
252                "data": [
253                    {"foo": {"bar" : {"baz" : true}}},
254                    {"foo": {"bar" : {"baz" : true}}}
255                ],
256                "valid": true
257            },
258            {
259                "description": "unique array of arrays is valid",
260                "data": [["foo"], ["bar"]],
261                "valid": true
262            },
263            {
264                "description": "non-unique array of arrays is valid",
265                "data": [["foo"], ["foo"]],
266                "valid": true
267            },
268            {
269                "description": "1 and true are unique",
270                "data": [1, true],
271                "valid": true
272            },
273            {
274                "description": "0 and false are unique",
275                "data": [0, false],
276                "valid": true
277            },
278            {
279                "description": "unique heterogeneous types are valid",
280                "data": [{}, [1], true, null, 1],
281                "valid": true
282            },
283            {
284                "description": "non-unique heterogeneous types are valid",
285                "data": [{}, [1], true, null, {}, 1],
286                "valid": true
287            }
288        ]
289    },
290    {
291        "description": "uniqueItems=false with an array of items",
292        "schema": {
293            "items": [{"type": "boolean"}, {"type": "boolean"}],
294            "uniqueItems": 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": "unique array extended from [false, true] is valid",
319                "data": [false, true, "foo", "bar"],
320                "valid": true
321            },
322            {
323                "description": "unique array extended from [true, false] is valid",
324                "data": [true, false, "foo", "bar"],
325                "valid": true
326            },
327            {
328                "description": "non-unique array extended from [false, true] is valid",
329                "data": [false, true, "foo", "foo"],
330                "valid": true
331            },
332            {
333                "description": "non-unique array extended from [true, false] is valid",
334                "data": [true, false, "foo", "foo"],
335                "valid": true
336            }
337        ]
338    },
339    {
340        "description": "uniqueItems=false with an array of items and additionalItems=false",
341        "schema": {
342            "items": [{"type": "boolean"}, {"type": "boolean"}],
343            "uniqueItems": false,
344            "additionalItems": false
345        },
346        "tests": [
347            {
348                "description": "[false, true] from items array is valid",
349                "data": [false, true],
350                "valid": true
351            },
352            {
353                "description": "[true, false] from items array is valid",
354                "data": [true, false],
355                "valid": true
356            },
357            {
358                "description": "[false, false] from items array is valid",
359                "data": [false, false],
360                "valid": true
361            },
362            {
363                "description": "[true, true] from items array is valid",
364                "data": [true, true],
365                "valid": true
366            },
367            {
368                "description": "extra items are invalid even if unique",
369                "data": [false, true, null],
370                "valid": false
371            }
372        ]
373    }
374]
375