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