summaryrefslogtreecommitdiff
path: root/src/test/suite/tests/draft-next/unevaluatedItems.json
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/suite/tests/draft-next/unevaluatedItems.json')
-rw-r--r--src/test/suite/tests/draft-next/unevaluatedItems.json792
1 files changed, 792 insertions, 0 deletions
diff --git a/src/test/suite/tests/draft-next/unevaluatedItems.json b/src/test/suite/tests/draft-next/unevaluatedItems.json
new file mode 100644
index 0000000..08f6ef1
--- /dev/null
+++ b/src/test/suite/tests/draft-next/unevaluatedItems.json
@@ -0,0 +1,792 @@
+[
+ {
+ "description": "unevaluatedItems true",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": true
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo"],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems false",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems as schema",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": { "type": "string" }
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "with valid unevaluated items",
+ "data": ["foo"],
+ "valid": true
+ },
+ {
+ "description": "with invalid unevaluated items",
+ "data": [42],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with uniform items",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "items": { "type": "string" },
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "unevaluatedItems doesn't apply",
+ "data": ["foo", "bar"],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with tuple",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo"],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with items and prefixItems",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "items": true,
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "unevaluatedItems doesn't apply",
+ "data": ["foo", 42],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with items",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "items": {"type": "number"},
+ "unevaluatedItems": {"type": "string"}
+ },
+ "tests": [
+ {
+ "description": "valid under items",
+ "comment": "no elements are considered by unevaluatedItems",
+ "data": [5, 6, 7, 8],
+ "valid": true
+ },
+ {
+ "description": "invalid under items",
+ "data": ["foo", "bar", "baz"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with nested tuple",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "allOf": [
+ {
+ "prefixItems": [
+ true,
+ { "type": "number" }
+ ]
+ }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo", 42],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", 42, true],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with nested items",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": {"type": "boolean"},
+ "anyOf": [
+ { "items": {"type": "string"} },
+ true
+ ]
+ },
+ "tests": [
+ {
+ "description": "with only (valid) additional items",
+ "data": [true, false],
+ "valid": true
+ },
+ {
+ "description": "with no additional items",
+ "data": ["yes", "no"],
+ "valid": true
+ },
+ {
+ "description": "with invalid additional item",
+ "data": ["yes", false],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with nested prefixItems and items",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "allOf": [
+ {
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "items": true
+ }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no additional items",
+ "data": ["foo"],
+ "valid": true
+ },
+ {
+ "description": "with additional items",
+ "data": ["foo", 42, true],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with nested unevaluatedItems",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "allOf": [
+ {
+ "prefixItems": [
+ { "type": "string" }
+ ]
+ },
+ { "unevaluatedItems": true }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no additional items",
+ "data": ["foo"],
+ "valid": true
+ },
+ {
+ "description": "with additional items",
+ "data": ["foo", 42, true],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with anyOf",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "const": "foo" }
+ ],
+ "anyOf": [
+ {
+ "prefixItems": [
+ true,
+ { "const": "bar" }
+ ]
+ },
+ {
+ "prefixItems": [
+ true,
+ true,
+ { "const": "baz" }
+ ]
+ }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "when one schema matches and has no unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": true
+ },
+ {
+ "description": "when one schema matches and has unevaluated items",
+ "data": ["foo", "bar", 42],
+ "valid": false
+ },
+ {
+ "description": "when two schemas match and has no unevaluated items",
+ "data": ["foo", "bar", "baz"],
+ "valid": true
+ },
+ {
+ "description": "when two schemas match and has unevaluated items",
+ "data": ["foo", "bar", "baz", 42],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with oneOf",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "const": "foo" }
+ ],
+ "oneOf": [
+ {
+ "prefixItems": [
+ true,
+ { "const": "bar" }
+ ]
+ },
+ {
+ "prefixItems": [
+ true,
+ { "const": "baz" }
+ ]
+ }
+ ],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar", 42],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with not",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "const": "foo" }
+ ],
+ "not": {
+ "not": {
+ "prefixItems": [
+ true,
+ { "const": "bar" }
+ ]
+ }
+ },
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with if/then/else",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [
+ { "const": "foo" }
+ ],
+ "if": {
+ "prefixItems": [
+ true,
+ { "const": "bar" }
+ ]
+ },
+ "then": {
+ "prefixItems": [
+ true,
+ true,
+ { "const": "then" }
+ ]
+ },
+ "else": {
+ "prefixItems": [
+ true,
+ true,
+ true,
+ { "const": "else" }
+ ]
+ },
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "when if matches and it has no unevaluated items",
+ "data": ["foo", "bar", "then"],
+ "valid": true
+ },
+ {
+ "description": "when if matches and it has unevaluated items",
+ "data": ["foo", "bar", "then", "else"],
+ "valid": false
+ },
+ {
+ "description": "when if doesn't match and it has no unevaluated items",
+ "data": ["foo", 42, 42, "else"],
+ "valid": true
+ },
+ {
+ "description": "when if doesn't match and it has unevaluated items",
+ "data": ["foo", 42, 42, "else", 42],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with boolean schemas",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "allOf": [true],
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with $ref",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "$ref": "#/$defs/bar",
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "unevaluatedItems": false,
+ "$defs": {
+ "bar": {
+ "prefixItems": [
+ true,
+ { "type": "string" }
+ ]
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar", "baz"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems before $ref",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": false,
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "$ref": "#/$defs/bar",
+ "$defs": {
+ "bar": {
+ "prefixItems": [
+ true,
+ { "type": "string" }
+ ]
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar", "baz"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with $dynamicRef",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "$id": "https://example.com/unevaluated-items-with-dynamic-ref/derived",
+
+ "$ref": "./baseSchema",
+
+ "$defs": {
+ "derived": {
+ "$dynamicAnchor": "addons",
+ "prefixItems": [
+ true,
+ { "type": "string" }
+ ]
+ },
+ "baseSchema": {
+ "$id": "./baseSchema",
+
+ "$comment": "unevaluatedItems comes first so it's more likely to catch bugs with implementations that are sensitive to keyword ordering",
+ "unevaluatedItems": false,
+ "type": "array",
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "$dynamicRef": "#addons"
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "with no unevaluated items",
+ "data": ["foo", "bar"],
+ "valid": true
+ },
+ {
+ "description": "with unevaluated items",
+ "data": ["foo", "bar", "baz"],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems can't see inside cousins",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "allOf": [
+ {
+ "prefixItems": [ true ]
+ },
+ { "unevaluatedItems": false }
+ ]
+ },
+ "tests": [
+ {
+ "description": "always fails",
+ "data": [ 1 ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "item is evaluated in an uncle schema to unevaluatedItems",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "properties": {
+ "foo": {
+ "prefixItems": [
+ { "type": "string" }
+ ],
+ "unevaluatedItems": false
+ }
+ },
+ "anyOf": [
+ {
+ "properties": {
+ "foo": {
+ "prefixItems": [
+ true,
+ { "type": "string" }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "tests": [
+ {
+ "description": "no extra items",
+ "data": {
+ "foo": [
+ "test"
+ ]
+ },
+ "valid": true
+ },
+ {
+ "description": "uncle keyword evaluation is not significant",
+ "data": {
+ "foo": [
+ "test",
+ "test"
+ ]
+ },
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems depends on adjacent contains",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "prefixItems": [true],
+ "contains": {"type": "string"},
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "second item is evaluated by contains",
+ "data": [ 1, "foo" ],
+ "valid": true
+ },
+ {
+ "description": "contains fails, second item is not evaluated",
+ "data": [ 1, 2 ],
+ "valid": false
+ },
+ {
+ "description": "contains passes, second item is not evaluated",
+ "data": [ 1, 2, "foo" ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems depends on multiple nested contains",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "allOf": [
+ { "contains": { "multipleOf": 2 } },
+ { "contains": { "multipleOf": 3 } }
+ ],
+ "unevaluatedItems": { "multipleOf": 5 }
+ },
+ "tests": [
+ {
+ "description": "5 not evaluated, passes unevaluatedItems",
+ "data": [ 2, 3, 4, 5, 6 ],
+ "valid": true
+ },
+ {
+ "description": "7 not evaluated, fails unevaluatedItems",
+ "data": [ 2, 3, 4, 7, 8 ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems and contains interact to control item dependency relationship",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "if": {
+ "contains": {"const": "a"}
+ },
+ "then": {
+ "if": {
+ "contains": {"const": "b"}
+ },
+ "then": {
+ "if": {
+ "contains": {"const": "c"}
+ }
+ }
+ },
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "empty array is valid",
+ "data": [],
+ "valid": true
+ },
+ {
+ "description": "only a's are valid",
+ "data": [ "a", "a" ],
+ "valid": true
+ },
+ {
+ "description": "a's and b's are valid",
+ "data": [ "a", "b", "a", "b", "a" ],
+ "valid": true
+ },
+ {
+ "description": "a's, b's and c's are valid",
+ "data": [ "c", "a", "c", "c", "b", "a" ],
+ "valid": true
+ },
+ {
+ "description": "only b's are invalid",
+ "data": [ "b", "b" ],
+ "valid": false
+ },
+ {
+ "description": "only c's are invalid",
+ "data": [ "c", "c" ],
+ "valid": false
+ },
+ {
+ "description": "only b's and c's are invalid",
+ "data": [ "c", "b", "c", "b", "c" ],
+ "valid": false
+ },
+ {
+ "description": "only a's and c's are invalid",
+ "data": [ "c", "a", "c", "a", "c" ],
+ "valid": false
+ }
+ ]
+ },
+ {
+ "description": "non-array instances are valid",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "ignores booleans",
+ "data": true,
+ "valid": true
+ },
+ {
+ "description": "ignores integers",
+ "data": 123,
+ "valid": true
+ },
+ {
+ "description": "ignores floats",
+ "data": 1.0,
+ "valid": true
+ },
+ {
+ "description": "ignores objects",
+ "data": {},
+ "valid": true
+ },
+ {
+ "description": "ignores strings",
+ "data": "foo",
+ "valid": true
+ },
+ {
+ "description": "ignores null",
+ "data": null,
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems with null instance elements",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "unevaluatedItems": {
+ "type": "null"
+ }
+ },
+ "tests": [
+ {
+ "description": "allows null elements",
+ "data": [ null ],
+ "valid": true
+ }
+ ]
+ },
+ {
+ "description": "unevaluatedItems can see annotations from if without then and else",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/next/schema",
+ "if": {
+ "prefixItems": [{"const": "a"}]
+ },
+ "unevaluatedItems": false
+ },
+ "tests": [
+ {
+ "description": "valid in case if is evaluated",
+ "data": [ "a" ],
+ "valid": true
+ },
+ {
+ "description": "invalid in case if is evaluated",
+ "data": [ "b" ],
+ "valid": false
+ }
+
+ ]
+ }
+]