[
{
"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"
: {
"definitions"
: {
"foo"
: {
"type"
:
"string"
},
"base_foo"
: {
"id"
:
"foo.json"
,
"type"
:
"number"
}
},
"extends"
: [
{
"$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"
,
"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
}
]
}
]