| [ |
| { |
| "description": "root pointer ref", |
| "schema": { |
| "properties": { |
| "foo": {"$ref": "#"} |
| }, |
| "additionalProperties": false |
| }, |
| "tests": [ |
| { |
| "description": "match", |
| "data": {"foo": false}, |
| "valid": true |
| }, |
| { |
| "description": "recursive match", |
| "data": {"foo": {"foo": false}}, |
| "valid": true |
| }, |
| { |
| "description": "mismatch", |
| "data": {"bar": false}, |
| "valid": false |
| }, |
| { |
| "description": "recursive mismatch", |
| "data": {"foo": {"bar": false}}, |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "relative pointer ref to object", |
| "schema": { |
| "properties": { |
| "foo": {"type": "integer"}, |
| "bar": {"$ref": "#/properties/foo"} |
| } |
| }, |
| "tests": [ |
| { |
| "description": "match", |
| "data": {"bar": 3}, |
| "valid": true |
| }, |
| { |
| "description": "mismatch", |
| "data": {"bar": true}, |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "relative pointer ref to array", |
| "schema": { |
| "items": [ |
| {"type": "integer"}, |
| {"$ref": "#/items/0"} |
| ] |
| }, |
| "tests": [ |
| { |
| "description": "match array", |
| "data": [1, 2], |
| "valid": true |
| }, |
| { |
| "description": "mismatch array", |
| "data": [1, "foo"], |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "escaped pointer ref", |
| "schema": { |
| "definitions": { |
| "tilde~field": {"type": "integer"}, |
| "slash/field": {"type": "integer"}, |
| "percent%field": {"type": "integer"} |
| }, |
| "properties": { |
| "tilde": {"$ref": "#/definitions/tilde~0field"}, |
| "slash": {"$ref": "#/definitions/slash~1field"}, |
| "percent": {"$ref": "#/definitions/percent%25field"} |
| } |
| }, |
| "tests": [ |
| { |
| "description": "slash invalid", |
| "data": {"slash": "aoeu"}, |
| "valid": false |
| }, |
| { |
| "description": "tilde invalid", |
| "data": {"tilde": "aoeu"}, |
| "valid": false |
| }, |
| { |
| "description": "percent invalid", |
| "data": {"percent": "aoeu"}, |
| "valid": false |
| }, |
| { |
| "description": "slash valid", |
| "data": {"slash": 123}, |
| "valid": true |
| }, |
| { |
| "description": "tilde valid", |
| "data": {"tilde": 123}, |
| "valid": true |
| }, |
| { |
| "description": "percent valid", |
| "data": {"percent": 123}, |
| "valid": true |
| } |
| ] |
| }, |
| { |
| "description": "nested refs", |
| "schema": { |
| "definitions": { |
| "a": {"type": "integer"}, |
| "b": {"$ref": "#/definitions/a"}, |
| "c": {"$ref": "#/definitions/b"} |
| }, |
| "$ref": "#/definitions/c" |
| }, |
| "tests": [ |
| { |
| "description": "nested ref valid", |
| "data": 5, |
| "valid": true |
| }, |
| { |
| "description": "nested ref invalid", |
| "data": "a", |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "ref overrides any sibling keywords", |
| "schema": { |
| "definitions": { |
| "reffed": { |
| "type": "array" |
| } |
| }, |
| "properties": { |
| "foo": { |
| "$ref": "#/definitions/reffed", |
| "maxItems": 2 |
| } |
| } |
| }, |
| "tests": [ |
| { |
| "description": "remote ref valid", |
| "data": { "foo": [] }, |
| "valid": true |
| }, |
| { |
| "description": "remote ref valid, maxItems ignored", |
| "data": { "foo": [ 1, 2, 3] }, |
| "valid": true |
| }, |
| { |
| "description": "ref invalid", |
| "data": { "foo": "string" }, |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "property named $ref, containing an actual $ref", |
| "schema": { |
| "properties": { |
| "$ref": {"$ref": "#/definitions/is-string"} |
| }, |
| "definitions": { |
| "is-string": { |
| "type": "string" |
| } |
| } |
| }, |
| "tests": [ |
| { |
| "description": "property named $ref valid", |
| "data": {"$ref": "a"}, |
| "valid": true |
| }, |
| { |
| "description": "property named $ref invalid", |
| "data": {"$ref": 2}, |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "$ref prevents a sibling id from changing the base uri", |
| "schema": { |
| "id": "http://localhost:1234/sibling_id/base/", |
| "definitions": { |
| "foo": { |
| "id": "http://localhost:1234/sibling_id/foo.json", |
| "type": "string" |
| }, |
| "base_foo": { |
| "$comment": "this canonical uri is http://localhost:1234/sibling_id/base/foo.json", |
| "id": "foo.json", |
| "type": "number" |
| } |
| }, |
| "extends": [ |
| { |
| "$comment": "$ref resolves to http://localhost:1234/sibling_id/base/foo.json, not http://localhost:1234/sibling_id/foo.json", |
| "id": "http://localhost:1234/sibling_id/", |
| "$ref": "foo.json" |
| } |
| ] |
| }, |
| "tests": [ |
| { |
| "description": "$ref resolves to /definitions/base_foo, data does not validate", |
| "data": "a", |
| "valid": false |
| }, |
| { |
| "description": "$ref resolves to /definitions/base_foo, data validates", |
| "data": 1, |
| "valid": true |
| } |
| ] |
| }, |
| { |
| "description": "remote ref, containing refs itself", |
| "schema": {"$ref": "http://json-schema.org/draft-03/schema#"}, |
| "tests": [ |
| { |
| "description": "remote ref valid", |
| "data": {"items": {"type": "integer"}}, |
| "valid": true |
| }, |
| { |
| "description": "remote ref invalid", |
| "data": {"items": {"type": 1}}, |
| "valid": false |
| } |
| ] |
| }, |
| { |
| "description": "naive replacement of $ref with its destination is not correct", |
| "schema": { |
| "definitions": { |
| "a_string": { "type": "string" } |
| }, |
| "enum": [ |
| { "$ref": "#/definitions/a_string" } |
| ] |
| }, |
| "tests": [ |
| { |
| "description": "do not evaluate the $ref inside the enum, matching any string", |
| "data": "this is a string", |
| "valid": false |
| }, |
| { |
| "description": "match the enum exactly", |
| "data": { "$ref": "#/definitions/a_string" }, |
| "valid": true |
| } |
| ] |
| } |
| ] |