[
{
"description": "after leaving a dynamic scope, it should not be used by a $dynamicRef",
"schema": {
"$id": "main",
"if": {
"$id": "first_scope",
"$defs": {
"thingy": {
"$comment": "this is first_scope#thingy",
"$dynamicAnchor": "thingy",
"type": "number"
}
}
},
"then": {
"$id": "second_scope",
"$ref": "start",
"$defs": {
"thingy": {
"$comment": "this is second_scope#thingy, the final destination of the $dynamicRef",
"$dynamicAnchor": "thingy",
"type": "null"
}
}
},
"$defs": {
"start": {
"$comment": "this is the landing spot from $ref",
"$id": "start",
"$dynamicRef": "inner_scope#thingy"
},
"thingy": {
"$comment": "this is the first stop by the $dynamicRef",
"$id": "inner_scope",
"$dynamicAnchor": "thingy",
"type": "string"
}
}
},
"tests": [
{
"description": "string matches /$defs/thingy, but the $dynamicRef does not stop here",
"data": "a string",
"valid": false
},
{
"description": "first_scope is not in dynamic scope for the $dynamicRef",
"data": 42,
"valid": false
},
{
"description": "value validates against /then/$defs/thingy, the final stop for the $dynamicRef",
"data": null,
"valid": true
}
]
},
{
"description": "schema in dynamic scope must have a $dynamicAnchor that matches the fragment",
"schema": {
"$defs": {
"enhanced": {
"$comment": "a matching $anchor is not sufficient: it must be a $dynamicAnchor",
"$anchor": "thingy",
"$dynamicAnchor": "something_else",
"minimum": 10
},
"orig": {
"$id": "orig",
"$dynamicAnchor": "thingy",
"minimum": 2
}
},
"$dynamicRef": "orig#thingy"
},
"tests": [
{
"description": "value would fail under either subschema",
"data": 1,
"valid": false
},
{
"description": "$anchor does not match $dynamicAnchor; original subschema is used",
"data": 5,
"valid": true
}
]
},
{
"description": "$dynamicRef points to a boolean schema",
"schema": {
"$comment": "submitted as https://github.com/json-schema-org/JSON-Schema-Test-Suite/pull/701",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"true": true,
"false": false
},
"properties": {
"true": {
"$dynamicRef": "#/$defs/true"
},
"false": {
"$dynamicRef": "#/$defs/false"
}
}
},
"tests": [
{
"description": "follow $dynamicRef to a true schema",
"data": { "true": 1 },
"valid": true
},
{
"description": "follow $dynamicRef to a false schema",
"data": { "false": 1 },
"valid": false
}
]
}
]