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-04/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": "Recursive references between schemas",
214 "schema": {
215 "id": "http://localhost:1234/tree",
216 "description": "tree of nodes",
217 "type": "object",
218 "properties": {
219 "meta": {"type": "string"},
220 "nodes": {
221 "type": "array",
222 "items": {"$ref": "node"}
223 }
224 },
225 "required": ["meta", "nodes"],
226 "definitions": {
227 "node": {
228 "id": "http://localhost:1234/node",
229 "description": "node",
230 "type": "object",
231 "properties": {
232 "value": {"type": "number"},
233 "subtree": {"$ref": "tree"}
234 },
235 "required": ["value"]
236 }
237 }
238 },
239 "tests": [
240 {
241 "description": "valid tree",
242 "data": {
243 "meta": "root",
244 "nodes": [
245 {
246 "value": 1,
247 "subtree": {
248 "meta": "child",
249 "nodes": [
250 {"value": 1.1},
251 {"value": 1.2}
252 ]
253 }
254 },
255 {
256 "value": 2,
257 "subtree": {
258 "meta": "child",
259 "nodes": [
260 {"value": 2.1},
261 {"value": 2.2}
262 ]
263 }
264 }
265 ]
266 },
267 "valid": true
268 },
269 {
270 "description": "invalid tree",
271 "data": {
272 "meta": "root",
273 "nodes": [
274 {
275 "value": 1,
276 "subtree": {
277 "meta": "child",
278 "nodes": [
279 {"value": "string is invalid"},
280 {"value": 1.2}
281 ]
282 }
283 },
284 {
285 "value": 2,
286 "subtree": {
287 "meta": "child",
288 "nodes": [
289 {"value": 2.1},
290 {"value": 2.2}
291 ]
292 }
293 }
294 ]
295 },
296 "valid": false
297 }
298 ]
299 },
300 {
301 "description": "refs with quote",
302 "schema": {
303 "properties": {
304 "foo\"bar": {"$ref": "#/definitions/foo%22bar"}
305 },
306 "definitions": {
307 "foo\"bar": {"type": "number"}
308 }
309 },
310 "tests": [
311 {
312 "description": "object with numbers is valid",
313 "data": {
314 "foo\"bar": 1
315 },
316 "valid": true
317 },
318 {
319 "description": "object with strings is invalid",
320 "data": {
321 "foo\"bar": "1"
322 },
323 "valid": false
324 }
325 ]
326 },
327 {
328 "description": "Location-independent identifier",
329 "schema": {
330 "allOf": [{
331 "$ref": "#foo"
332 }],
333 "definitions": {
334 "A": {
335 "id": "#foo",
336 "type": "integer"
337 }
338 }
339 },
340 "tests": [
341 {
342 "data": 1,
343 "description": "match",
344 "valid": true
345 },
346 {
347 "data": "a",
348 "description": "mismatch",
349 "valid": false
350 }
351 ]
352 },
353 {
354 "description": "Location-independent identifier with absolute URI",
355 "schema": {
356 "allOf": [{
357 "$ref": "http://localhost:1234/bar#foo"
358 }],
359 "definitions": {
360 "A": {
361 "id": "http://localhost:1234/bar#foo",
362 "type": "integer"
363 }
364 }
365 },
366 "tests": [
367 {
368 "data": 1,
369 "description": "match",
370 "valid": true
371 },
372 {
373 "data": "a",
374 "description": "mismatch",
375 "valid": false
376 }
377 ]
378 },
379 {
380 "description": "Location-independent identifier with base URI change in subschema",
381 "schema": {
382 "id": "http://localhost:1234/root",
383 "allOf": [{
384 "$ref": "http://localhost:1234/nested.json#foo"
385 }],
386 "definitions": {
387 "A": {
388 "id": "nested.json",
389 "definitions": {
390 "B": {
391 "id": "#foo",
392 "type": "integer"
393 }
394 }
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]
View as plain text