summaryrefslogtreecommitdiff
path: root/tests/draft2020-12
diff options
context:
space:
mode:
Diffstat (limited to 'tests/draft2020-12')
-rw-r--r--tests/draft2020-12/default.json30
-rw-r--r--tests/draft2020-12/items.json19
-rw-r--r--tests/draft2020-12/optional/format/time.json75
-rw-r--r--tests/draft2020-12/ref.json7
-rw-r--r--tests/draft2020-12/unevaluatedItems.json108
5 files changed, 238 insertions, 1 deletions
diff --git a/tests/draft2020-12/default.json b/tests/draft2020-12/default.json
index 1762977..289a9b6 100644
--- a/tests/draft2020-12/default.json
+++ b/tests/draft2020-12/default.json
@@ -45,5 +45,35 @@
"valid": true
}
]
+ },
+ {
+ "description": "the default keyword does not do anything if the property is missing",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "alpha": {
+ "type": "number",
+ "maximum": 3,
+ "default": 5
+ }
+ }
+ },
+ "tests": [
+ {
+ "description": "an explicit property value is checked against maximum (passing)",
+ "data": { "alpha": 1 },
+ "valid": true
+ },
+ {
+ "description": "an explicit property value is checked against maximum (failing)",
+ "data": { "alpha": 5 },
+ "valid": false
+ },
+ {
+ "description": "missing properties are not filled in with the default",
+ "data": {},
+ "valid": true
+ }
+ ]
}
]
diff --git a/tests/draft2020-12/items.json b/tests/draft2020-12/items.json
index 08a49ee..b918194 100644
--- a/tests/draft2020-12/items.json
+++ b/tests/draft2020-12/items.json
@@ -233,5 +233,24 @@
"valid": true
}
]
+ },
+ {
+ "description": "prefixItems validation adjusts the starting index for items",
+ "schema": {
+ "prefixItems": [ { "type": "string" } ],
+ "items": { "type": "integer" }
+ },
+ "tests": [
+ {
+ "description": "valid items",
+ "data": [ "x", 2, 3 ],
+ "valid": true
+ },
+ {
+ "description": "wrong type of second item",
+ "data": [ "x", "y" ],
+ "valid": false
+ }
+ ]
}
]
diff --git a/tests/draft2020-12/optional/format/time.json b/tests/draft2020-12/optional/format/time.json
index 4ec8a01..74e8bf9 100644
--- a/tests/draft2020-12/optional/format/time.json
+++ b/tests/draft2020-12/optional/format/time.json
@@ -5,10 +5,85 @@
"tests": [
{
"description": "a valid time string",
+ "data": "08:30:06Z",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with leap second",
+ "data": "23:59:60Z",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with leap second with offset",
+ "data": "15:59:60-08:00",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with second fraction",
+ "data": "23:20:50.52Z",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with precise second fraction",
"data": "08:30:06.283185Z",
"valid": true
},
{
+ "description": "a valid time string with plus offset",
+ "data": "08:30:06+00:20",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with minus offset",
+ "data": "08:30:06-08:00",
+ "valid": true
+ },
+ {
+ "description": "a valid time string with case-insensitive Z",
+ "data": "08:30:06z",
+ "valid": true
+ },
+ {
+ "description": "an invalid time string with invalid hour",
+ "data": "24:00:00Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid minute",
+ "data": "00:60:00Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid second",
+ "data": "00:00:61Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid leap second (wrong hour)",
+ "data": "22:59:60Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid leap second (wrong minute)",
+ "data": "23:58:60Z",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid time numoffset hour",
+ "data": "01:02:03+24:00",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid time numoffset minute",
+ "data": "01:02:03+00:60",
+ "valid": false
+ },
+ {
+ "description": "an invalid time string with invalid time with both Z and numoffset",
+ "data": "01:02:03Z+00:30",
+ "valid": false
+ },
+ {
"description": "an invalid time string",
"data": "08:30:06 PST",
"valid": false
diff --git a/tests/draft2020-12/ref.json b/tests/draft2020-12/ref.json
index d74e4a3..cd002a0 100644
--- a/tests/draft2020-12/ref.json
+++ b/tests/draft2020-12/ref.json
@@ -422,11 +422,16 @@
},
"tests": [
{
- "description": "do not evaluate the $ref inside the enum",
+ "description": "do not evaluate the $ref inside the enum, matching any string",
"data": "this is a string",
"valid": false
},
{
+ "description": "do not evaluate the $ref inside the enum, definition exact match",
+ "data": { "type": "string" },
+ "valid": false
+ },
+ {
"description": "match the enum exactly",
"data": { "$ref": "#/$defs/a_string" },
"valid": true
diff --git a/tests/draft2020-12/unevaluatedItems.json b/tests/draft2020-12/unevaluatedItems.json
index 13c80a2..0061769 100644
--- a/tests/draft2020-12/unevaluatedItems.json
+++ b/tests/draft2020-12/unevaluatedItems.json
@@ -485,5 +485,113 @@
"valid": false
}
]
+ },
+ {
+ "description": "unevaluatedItems depends on adjacent contains",
+ "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": {
+ "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": {
+ "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
+ }
+ ]
}
]