1[
2 {
3 "description": "root pointer ref",
4 "schema": {
5 "properties": {
6 "foo": {"$ref": "#"}
7 },
8 "additionalProperties": false
9 },
10 "tests": [
11 {
12 "description": "match",
13 "data": {"foo": false},
14 "valid": true
15 },
16 {
17 "description": "recursive match",
18 "data": {"foo": {"foo": false}},
19 "valid": true
20 },
21 {
22 "description": "mismatch",
23 "data": {"bar": false},
24 "valid": false
25 },
26 {
27 "description": "recursive mismatch",
28 "data": {"foo": {"bar": false}},
29 "valid": false
30 }
31 ]
32 },
33 {
34 "description": "relative pointer ref to object",
35 "schema": {
36 "properties": {
37 "foo": {"type": "integer"},
38 "bar": {"$ref": "#/properties/foo"}
39 }
40 },
41 "tests": [
42 {
43 "description": "match",
44 "data": {"bar": 3},
45 "valid": true
46 },
47 {
48 "description": "mismatch",
49 "data": {"bar": true},
50 "valid": false
51 }
52 ]
53 },
54 {
55 "description": "relative pointer ref to array",
56 "schema": {
57 "items": [
58 {"type": "integer"},
59 {"$ref": "#/items/0"}
60 ]
61 },
62 "tests": [
63 {
64 "description": "match array",
65 "data": [1, 2],
66 "valid": true
67 },
68 {
69 "description": "mismatch array",
70 "data": [1, "foo"],
71 "valid": false
72 }
73 ]
74 },
75 {
76 "description": "escaped pointer ref",
77 "schema": {
78 "tilda~field": {"type": "integer"},
79 "slash/field": {"type": "integer"},
80 "percent%field": {"type": "integer"},
81 "properties": {
82 "tilda": {"$ref": "#/tilda~0field"},
83 "slash": {"$ref": "#/slash~1field"},
84 "percent": {"$ref": "#/percent%25field"}
85 }
86 },
87 "tests": [
88 {
89 "description": "slash invalid",
90 "data": {"slash": "aoeu"},
91 "valid": false
92 },
93 {
94 "description": "tilda invalid",
95 "data": {"tilda": "aoeu"},
96 "valid": false
97 },
98 {
99 "description": "percent invalid",
100 "data": {"percent": "aoeu"},
101 "valid": false
102 },
103 {
104 "description": "slash valid",
105 "data": {"slash": 123},
106 "valid": true
107 },
108 {
109 "description": "tilda valid",
110 "data": {"tilda": 123},
111 "valid": true
112 },
113 {
114 "description": "percent valid",
115 "data": {"percent": 123},
116 "valid": true
117 }
118 ]
119 },
120 {
121 "description": "nested refs",
122 "schema": {
123 "definitions": {
124 "a": {"type": "integer"},
125 "b": {"$ref": "#/definitions/a"},
126 "c": {"$ref": "#/definitions/b"}
127 },
128 "$ref": "#/definitions/c"
129 },
130 "tests": [
131 {
132 "description": "nested ref valid",
133 "data": 5,
134 "valid": true
135 },
136 {
137 "description": "nested ref invalid",
138 "data": "a",
139 "valid": false
140 }
141 ]
142 },
143 {
144 "description": "ref overrides any sibling keywords",
145 "schema": {
146 "definitions": {
147 "reffed": {
148 "type": "array"
149 }
150 },
151 "properties": {
152 "foo": {
153 "$ref": "#/definitions/reffed",
154 "maxItems": 2
155 }
156 }
157 },
158 "tests": [
159 {
160 "description": "ref valid",
161 "data": { "foo": [] },
162 "valid": true
163 },
164 {
165 "description": "ref valid, maxItems ignored",
166 "data": { "foo": [ 1, 2, 3] },
167 "valid": true
168 },
169 {
170 "description": "ref invalid",
171 "data": { "foo": "string" },
172 "valid": false
173 }
174 ]
175 },
176 {
177 "description": "remote ref, containing refs itself",
178 "schema": {"$ref": "http://json-schema.org/draft-06/schema#"},
179 "tests": [
180 {
181 "description": "remote ref valid",
182 "data": {"minLength": 1},
183 "valid": true
184 },
185 {
186 "description": "remote ref invalid",
187 "data": {"minLength": -1},
188 "valid": false
189 }
190 ]
191 },
192 {
193 "description": "property named $ref that is not a reference",
194 "schema": {
195 "properties": {
196 "$ref": {"type": "string"}
197 }
198 },
199 "tests": [
200 {
201 "description": "property named $ref valid",
202 "data": {"$ref": "a"},
203 "valid": true
204 },
205 {
206 "description": "property named $ref invalid",
207 "data": {"$ref": 2},
208 "valid": false
209 }
210 ]
211 },
212 {
213 "description": "$ref to boolean schema true",
214 "schema": {
215 "$ref": "#/definitions/bool",
216 "definitions": {
217 "bool": true
218 }
219 },
220 "tests": [
221 {
222 "description": "any value is valid",
223 "data": "foo",
224 "valid": true
225 }
226 ]
227 },
228 {
229 "description": "$ref to boolean schema false",
230 "schema": {
231 "$ref": "#/definitions/bool",
232 "definitions": {
233 "bool": false
234 }
235 },
236 "tests": [
237 {
238 "description": "any value is invalid",
239 "data": "foo",
240 "valid": false
241 }
242 ]
243 },
244 {
245 "description": "Recursive references between schemas",
246 "schema": {
247 "$id": "http://localhost:1234/tree",
248 "description": "tree of nodes",
249 "type": "object",
250 "properties": {
251 "meta": {"type": "string"},
252 "nodes": {
253 "type": "array",
254 "items": {"$ref": "node"}
255 }
256 },
257 "required": ["meta", "nodes"],
258 "definitions": {
259 "node": {
260 "$id": "http://localhost:1234/node",
261 "description": "node",
262 "type": "object",
263 "properties": {
264 "value": {"type": "number"},
265 "subtree": {"$ref": "tree"}
266 },
267 "required": ["value"]
268 }
269 }
270 },
271 "tests": [
272 {
273 "description": "valid tree",
274 "data": {
275 "meta": "root",
276 "nodes": [
277 {
278 "value": 1,
279 "subtree": {
280 "meta": "child",
281 "nodes": [
282 {"value": 1.1},
283 {"value": 1.2}
284 ]
285 }
286 },
287 {
288 "value": 2,
289 "subtree": {
290 "meta": "child",
291 "nodes": [
292 {"value": 2.1},
293 {"value": 2.2}
294 ]
295 }
296 }
297 ]
298 },
299 "valid": true
300 },
301 {
302 "description": "invalid tree",
303 "data": {
304 "meta": "root",
305 "nodes": [
306 {
307 "value": 1,
308 "subtree": {
309 "meta": "child",
310 "nodes": [
311 {"value": "string is invalid"},
312 {"value": 1.2}
313 ]
314 }
315 },
316 {
317 "value": 2,
318 "subtree": {
319 "meta": "child",
320 "nodes": [
321 {"value": 2.1},
322 {"value": 2.2}
323 ]
324 }
325 }
326 ]
327 },
328 "valid": false
329 }
330 ]
331 },
332 {
333 "description": "refs with quote",
334 "schema": {
335 "properties": {
336 "foo\"bar": {"$ref": "#/definitions/foo%22bar"}
337 },
338 "definitions": {
339 "foo\"bar": {"type": "number"}
340 }
341 },
342 "tests": [
343 {
344 "description": "object with numbers is valid",
345 "data": {
346 "foo\"bar": 1
347 },
348 "valid": true
349 },
350 {
351 "description": "object with strings is invalid",
352 "data": {
353 "foo\"bar": "1"
354 },
355 "valid": false
356 }
357 ]
358 },
359 {
360 "description": "Location-independent identifier",
361 "schema": {
362 "allOf": [{
363 "$ref": "#foo"
364 }],
365 "definitions": {
366 "A": {
367 "$id": "#foo",
368 "type": "integer"
369 }
370 }
371 },
372 "tests": [
373 {
374 "data": 1,
375 "description": "match",
376 "valid": true
377 },
378 {
379 "data": "a",
380 "description": "mismatch",
381 "valid": false
382 }
383 ]
384 },
385 {
386 "description": "Location-independent identifier with absolute URI",
387 "schema": {
388 "allOf": [{
389 "$ref": "http://localhost:1234/bar#foo"
390 }],
391 "definitions": {
392 "A": {
393 "$id": "http://localhost:1234/bar#foo",
394 "type": "integer"
395 }
396 }
397 },
398 "tests": [
399 {
400 "data": 1,
401 "description": "match",
402 "valid": true
403 },
404 {
405 "data": "a",
406 "description": "mismatch",
407 "valid": false
408 }
409 ]
410 },
411 {
412 "description": "Location-independent identifier with base URI change in subschema",
413 "schema": {
414 "$id": "http://localhost:1234/root",
415 "allOf": [{
416 "$ref": "http://localhost:1234/nested.json#foo"
417 }],
418 "definitions": {
419 "A": {
420 "$id": "nested.json",
421 "definitions": {
422 "B": {
423 "$id": "#foo",
424 "type": "integer"
425 }
426 }
427 }
428 }
429 },
430 "tests": [
431 {
432 "data": 1,
433 "description": "match",
434 "valid": true
435 },
436 {
437 "data": "a",
438 "description": "mismatch",
439 "valid": false
440 }
441 ]
442 }
443]
View as plain text