[
{
"description": "short-circuit with items",
"schema": {
"items": { "multipleOf": 2 }
},
"tests": [
{
"description": "single item is valid",
"data": [ 2 ],
"valid": true
},
{
"description": "second item is invalid",
"data": [ 2, 1 ],
"valid": false
}
]
},
{
"description": "short-circuit with prefixItems",
"schema": {
"prefixItems": [
{ "multipleOf": 2 },
{ "multipleOf": 2 }
]
},
"tests": [
{
"description": "single item is valid",
"data": [ 2 ],
"valid": true
},
{
"description": "second item is invalid",
"data": [ 2, 1 ],
"valid": false
}
]
},
{
"description": "short-circuit with items",
"schema": {
"prefixItems": [ true ],
"items": { "multipleOf": 2 }
},
"tests": [
{
"description": "single additional item is valid",
"data": [ 1, 2 ],
"valid": true
},
{
"description": "second additional item is invalid",
"data": [ 1, 2, 1 ],
"valid": false
}
]
},
{
"description": "short-circuit with unevaluatedItems",
"schema": {
"unevaluatedItems": { "multipleOf": 2 }
},
"tests": [
{
"description": "single item is valid",
"data": [ 2 ],
"valid": true
},
{
"description": "second item is invalid",
"data": [ 2, 1 ],
"valid": false
}
]
},
{
"description": "short-circuit with properties",
"schema": {
"properties": {
"alpha": { "multipleOf": 2 },
"beta": { "multipleOf": 2 }
}
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 2 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 2, "beta": 1 },
"valid": false
}
]
},
{
"description": "short-circuit with properties and unevaluatedProperties",
"schema": {
"properties": {
"alpha": true,
"beta": false,
"gamma": true
},
"unevaluatedProperties": false
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 1 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 1, "beta": 2 },
"valid": false
}
]
},
{
"description": "short-circuit with patternProperties",
"schema": {
"patternProperties": {
"^a": { "multipleOf": 2 },
"^b": { "multipleOf": 2 }
}
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 2 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 2, "beta": 1 },
"valid": false
}
]
},
{
"description": "short-circuit with patternProperties and boolean schemas",
"schema": {
"patternProperties": {
"^a": true,
"^b": false
}
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 2 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 2, "beta": 1 },
"valid": false
}
]
},
{
"description": "short-circuit with additionalProperties",
"schema": {
"additionalProperties": { "multipleOf": 2 }
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 2 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 2, "beta": 1 },
"valid": false
}
]
},
{
"description": "short-circuit with unevaluatedProperties",
"schema": {
"unevaluatedProperties": { "multipleOf": 2 }
},
"tests": [
{
"description": "single property is valid",
"data": { "alpha": 2 },
"valid": true
},
{
"description": "second property is invalid",
"data": { "alpha": 2, "beta": 1 },
"valid": false
}
]
},
{
"description": "short-circuit with allOf",
"schema": {
"allOf": [
false,
{
"properties": {
"alpha": {},
"beta": {}
}
}
],
"unevaluatedProperties": false
},
"tests": [
{
"description": "'unevaluated' errors are produced iff short_circuit is false",
"data": { "alpha": 1, "gamma": 3 },
"valid": false
},
{
"description": "/allOf/0 guarantees a false result even when all branches are evaluated",
"data": { "alpha": 1, "beta": 2 },
"valid": false
}
]
},
{
"description": "short-circuit with anyOf",
"schema": {
"anyOf": [
true,
{
"properties": {
"alpha": {},
"beta": {}
}
}
],
"unevaluatedProperties": false
},
"tests": [
{
"description": "some properties are unevaluated",
"data": { "alpha": 1, "gamma": 1 },
"valid": false
},
{
"description": "all branches are still evaluated, even though we would have wanted to abort earlier",
"data": { "alpha": 1, "beta": 2 },
"valid": true
}
]
},
{
"description": "short-circuit with oneOf",
"schema": {
"oneOf": [
{
"required": ["alpha"],
"properties": {
"alpha": { "const": 1 }
}
},
{
"required": ["beta"],
"properties": {
"beta": { "const": 2 }
}
},
{
"required": ["gamma"],
"properties": {
"gamma": { "const": 3 }
}
}
],
"unevaluatedProperties": false
},
"tests": [
{
"description": "we can safely short-circuit after two valid oneOfs; gamma never gets evaluated; incorrect unevaluated error is not produced",
"data": { "alpha": 1, "beta": 2, "gamma": 3 },
"valid": false
},
{
"description": "all branches are still evaluated, even though we would have wanted to abort earlier",
"data": { "alpha": 1, "delta": 4 },
"valid": false
}
]
},
{
"description": "short-circuit with contains and maxContains and unevaluatedItems",
"schema": {
"type": "array",
"contains": { "const": 1 },
"maxContains": 3,
"unevaluatedItems": false
},
"tests": [
{
"description": "satisfying maxContains is always valid",
"data": [ 1, 1, 1 ],
"valid": true
},
{
"description": "checking maxContains always requires evaluating every item, which also ensures that the unevaluated check is correct",
"data": [ 1, 1, 8 ],
"valid": false
},
{
"description": "not satisfying maxContains is invalid overall, even when unevaluatedItems is valid",
"data": [ 1, 1, 1, 1, 1 ],
"valid": false
},
{
"description": "not satisfying maxContains is invalid overall, so we can safely skip evaluating items as soon as we exceed the maximum quantity",
"data": [ 1, 1, 1, 1, 8 ],
"valid": false
}
]
},
{
"description": "short-circuit with contains and minContains and unevaluatedItems",
"schema": {
"type": "array",
"contains": { "const": 1 },
"minContains": 2,
"unevaluatedItems": false
},
"tests": [
{
"description": "not satisfying minContains is always invalid overall, even when unevaluatedItems is valid",
"data": [ 1 ],
"valid": false
},
{
"description": "not satisfying minContains is always invalid overall, so unevaluatedItems can be safely skipped",
"data": [ 0 ],
"valid": false
},
{
"description": "all items must still be evaluated, even though we would have wanted to abort earlier due to satisfying minContains early, to allow unevaluatedItems to succeed",
"data": [ 1, 1, 1, 1 ],
"valid": true
},
{
"description": "all items must still be evaluated, even though we would have wanted to abort earlier due to satisfying minContains early, to not unevaluatedItems give a false negative",
"data": [ 1, 1, 3, 4 ],
"valid": false
}
]
}
]