validator refactor progress

This commit is contained in:
2026-03-03 00:13:37 -05:00
parent e14f53e7d9
commit 3898c43742
81 changed files with 6331 additions and 7934 deletions

View File

@ -1,19 +1,23 @@
[
{
"description": "additionalProperties validates properties not matched by properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "number"
}
},
"additionalProperties": {
"type": "boolean"
}
}
},
"additionalProperties": {
"type": "boolean"
}
]
},
"tests": [
{
@ -45,17 +49,21 @@
},
{
"description": "extensible: true with additionalProperties still validates structure",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
}
},
"extensible": true,
"additionalProperties": {
"type": "integer"
}
}
},
"extensible": true,
"additionalProperties": {
"type": "integer"
}
]
},
"tests": [
{
@ -79,19 +87,23 @@
},
{
"description": "complex additionalProperties with object and array items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"type": "string"
}
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
]
},
"tests": [
{

View File

@ -1,27 +1,31 @@
[
{
"description": "allOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"properties": {
"bar": {
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"properties": {
"bar": {
"type": "integer"
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
]
@ -61,39 +65,43 @@
},
{
"description": "allOf with base schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "integer"
},
"baz": {},
"foo": {
"type": "string"
}
},
"required": [
"bar"
],
"allOf": [
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "integer"
},
"baz": {},
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
},
{
"properties": {
"baz": {
"type": "null"
"bar"
],
"allOf": [
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
},
{
"properties": {
"baz": {
"type": "null"
}
},
"required": [
"baz"
]
}
},
"required": [
"baz"
]
}
]
@ -143,14 +151,18 @@
},
{
"description": "allOf simple types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"maximum": 30
},
{
"minimum": 20
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"maximum": 30
},
{
"minimum": 20
}
]
}
]
},
@ -169,11 +181,15 @@
},
{
"description": "allOf with boolean schemas, all true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
true,
true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
true,
true
]
}
]
},
"tests": [
@ -186,11 +202,15 @@
},
{
"description": "allOf with boolean schemas, some false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
true,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
true,
false
]
}
]
},
"tests": [
@ -203,11 +223,15 @@
},
{
"description": "allOf with boolean schemas, all false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
false,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
false,
false
]
}
]
},
"tests": [
@ -220,10 +244,14 @@
},
{
"description": "allOf with one empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{}
]
}
]
},
"tests": [
@ -236,11 +264,15 @@
},
{
"description": "allOf with two empty schemas",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{},
{}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{},
{}
]
}
]
},
"tests": [
@ -253,12 +285,16 @@
},
{
"description": "allOf with the first empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{},
"database": {
"schemas": [
{
"type": "number"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{},
{
"type": "number"
}
]
}
]
},
@ -277,13 +313,17 @@
},
{
"description": "allOf with the last empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"type": "number"
},
{}
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"type": "number"
},
{}
]
}
]
},
"tests": [
@ -301,13 +341,17 @@
},
{
"description": "nested allOf, to check validation semantics",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"type": "null"
"allOf": [
{
"type": "null"
}
]
}
]
}
@ -328,21 +372,25 @@
},
{
"description": "allOf combined with anyOf, oneOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"multipleOf": 2
}
],
"anyOf": [
{
"multipleOf": 3
}
],
"oneOf": [
{
"multipleOf": 5
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"multipleOf": 2
}
],
"anyOf": [
{
"multipleOf": 3
}
],
"oneOf": [
{
"multipleOf": 5
}
]
}
]
},
@ -391,31 +439,35 @@
},
{
"description": "extensible: true allows extra properties in allOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"properties": {
"bar": {
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"properties": {
"bar": {
"type": "integer"
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{
@ -431,22 +483,26 @@
},
{
"description": "strict by default with allOf properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"properties": {
"foo": {
"const": 1
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"properties": {
"foo": {
"const": 1
}
}
},
{
"properties": {
"bar": {
"const": 2
}
}
}
}
},
{
"properties": {
"bar": {
"const": 2
}
}
]
}
]
},
@ -472,23 +528,27 @@
},
{
"description": "allOf with nested extensible: true (partial looseness)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"properties": {
"foo": {
"const": 1
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"properties": {
"foo": {
"const": 1
}
}
},
{
"extensible": true,
"properties": {
"bar": {
"const": 2
}
}
}
}
},
{
"extensible": true,
"properties": {
"bar": {
"const": 2
}
}
]
}
]
},
@ -506,31 +566,35 @@
},
{
"description": "strictness: allOf composition with strict refs",
"schema": {
"allOf": [
"database": {
"schemas": [
{
"$ref": "#/$defs/partA"
},
{
"$ref": "#/$defs/partB"
}
],
"$defs": {
"partA": {
"properties": {
"id": {
"type": "string"
"allOf": [
{
"$ref": "#/$defs/partA"
},
{
"$ref": "#/$defs/partB"
}
}
},
"partB": {
"properties": {
"name": {
"type": "string"
],
"$defs": {
"partA": {
"properties": {
"id": {
"type": "string"
}
}
},
"partB": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
}
]
},
"tests": [
{

View File

@ -1,120 +0,0 @@
[
{
"description": "Location-independent identifier",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$ref": "#foo",
"$defs": {
"A": {
"$anchor": "foo",
"type": "integer"
}
}
},
"tests": [
{
"data": 1,
"description": "match",
"valid": true
},
{
"data": "a",
"description": "mismatch",
"valid": false
}
]
},
{
"description": "Location-independent identifier with absolute URI",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$ref": "http://localhost:1234/draft2020-12/bar#foo",
"$defs": {
"A": {
"$id": "http://localhost:1234/draft2020-12/bar",
"$anchor": "foo",
"type": "integer"
}
}
},
"tests": [
{
"data": 1,
"description": "match",
"valid": true
},
{
"data": "a",
"description": "mismatch",
"valid": false
}
]
},
{
"description": "Location-independent identifier with base URI change in subschema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "http://localhost:1234/draft2020-12/root",
"$ref": "http://localhost:1234/draft2020-12/nested.json#foo",
"$defs": {
"A": {
"$id": "nested.json",
"$defs": {
"B": {
"$anchor": "foo",
"type": "integer"
}
}
}
}
},
"tests": [
{
"data": 1,
"description": "match",
"valid": true
},
{
"data": "a",
"description": "mismatch",
"valid": false
}
]
},
{
"description": "same $anchor with different base uri",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "http://localhost:1234/draft2020-12/foobar",
"$defs": {
"A": {
"$id": "child1",
"allOf": [
{
"$id": "child2",
"$anchor": "my_anchor",
"type": "number"
},
{
"$anchor": "my_anchor",
"type": "string"
}
]
}
},
"$ref": "child1#my_anchor"
},
"tests": [
{
"description": "$ref resolves to /$defs/A/allOf/1",
"data": "a",
"valid": true
},
{
"description": "$ref does not resolve to /$defs/A/allOf/0",
"data": 1,
"valid": false
}
]
}
]

View File

@ -1,14 +1,18 @@
[
{
"description": "anyOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"type": "integer"
},
{
"minimum": 2
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "integer"
},
{
"minimum": 2
}
]
}
]
},
@ -37,15 +41,19 @@
},
{
"description": "anyOf with base schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"anyOf": [
"database": {
"schemas": [
{
"maxLength": 2
},
{
"minLength": 4
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"anyOf": [
{
"maxLength": 2
},
{
"minLength": 4
}
]
}
]
},
@ -69,11 +77,15 @@
},
{
"description": "anyOf with boolean schemas, all true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
true,
true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
true,
true
]
}
]
},
"tests": [
@ -86,11 +98,15 @@
},
{
"description": "anyOf with boolean schemas, some true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
true,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
true,
false
]
}
]
},
"tests": [
@ -103,11 +119,15 @@
},
{
"description": "anyOf with boolean schemas, all false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
false,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
false,
false
]
}
]
},
"tests": [
@ -120,27 +140,31 @@
},
{
"description": "anyOf complex types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"properties": {
"bar": {
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"properties": {
"bar": {
"type": "integer"
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
]
@ -180,13 +204,17 @@
},
{
"description": "anyOf with one empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"type": "number"
},
{}
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "number"
},
{}
]
}
]
},
"tests": [
@ -204,13 +232,17 @@
},
{
"description": "nested anyOf, to check validation semantics",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "null"
"anyOf": [
{
"type": "null"
}
]
}
]
}
@ -231,17 +263,21 @@
},
{
"description": "extensible: true allows extra properties in anyOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"type": "integer"
},
{
"minimum": 2
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"type": "integer"
},
{
"minimum": 2
}
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{
@ -255,22 +291,26 @@
},
{
"description": "strict by default with anyOf properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
"database": {
"schemas": [
{
"properties": {
"foo": {
"const": 1
"$schema": "https://json-schema.org/draft/2020-12/schema",
"anyOf": [
{
"properties": {
"foo": {
"const": 1
}
}
},
{
"properties": {
"bar": {
"const": 2
}
}
}
}
},
{
"properties": {
"bar": {
"const": 2
}
}
]
}
]
},

View File

@ -1,7 +1,11 @@
[
{
"description": "boolean schema 'true'",
"schema": true,
"database": {
"schemas": [
true
]
},
"tests": [
{
"description": "number is valid",
@ -56,7 +60,11 @@
},
{
"description": "boolean schema 'false'",
"schema": false,
"database": {
"schemas": [
false
]
},
"tests": [
{
"description": "number is invalid",

View File

@ -1,9 +1,13 @@
[
{
"description": "const validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 2
}
]
},
"tests": [
{
@ -25,16 +29,20 @@
},
{
"description": "const with object",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"foo": "bar",
"baz": "bax"
},
"properties": {
"foo": {},
"baz": {}
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"foo": "bar",
"baz": "bax"
},
"properties": {
"foo": {},
"baz": {}
}
}
]
},
"tests": [
{
@ -72,11 +80,15 @@
},
{
"description": "const with array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
"database": {
"schemas": [
{
"foo": "bar"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
{
"foo": "bar"
}
]
}
]
},
@ -110,9 +122,13 @@
},
{
"description": "const with null",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": null
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": null
}
]
},
"tests": [
{
@ -129,9 +145,13 @@
},
{
"description": "const with false does not match 0",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": false
}
]
},
"tests": [
{
@ -153,9 +173,13 @@
},
{
"description": "const with true does not match 1",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": true
}
]
},
"tests": [
{
@ -177,10 +201,14 @@
},
{
"description": "const with [false] does not match [0]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
false
]
}
]
},
"tests": [
@ -209,10 +237,14 @@
},
{
"description": "const with [true] does not match [1]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": [
true
]
}
]
},
"tests": [
@ -241,11 +273,15 @@
},
{
"description": "const with {\"a\": false} does not match {\"a\": 0}",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": false
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": false
}
}
]
},
"tests": [
{
@ -273,11 +309,15 @@
},
{
"description": "const with {\"a\": true} does not match {\"a\": 1}",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": true
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": true
}
}
]
},
"tests": [
{
@ -305,9 +345,13 @@
},
{
"description": "const with 0 does not match other zero-like types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 0
}
]
},
"tests": [
{
@ -344,9 +388,13 @@
},
{
"description": "const with 1 does not match true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 1
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 1
}
]
},
"tests": [
{
@ -368,9 +416,13 @@
},
{
"description": "const with -2.0 matches integer and float types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": -2.0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": -2.0
}
]
},
"tests": [
{
@ -402,9 +454,13 @@
},
{
"description": "float and integers are equal up to 64-bit representation limits",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 9007199254740992
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": 9007199254740992
}
]
},
"tests": [
{
@ -431,9 +487,13 @@
},
{
"description": "nul characters in strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "hello\u0000there"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "hello\u0000there"
}
]
},
"tests": [
{
@ -450,10 +510,14 @@
},
{
"description": "characters with the same visual representation but different codepoint",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "μ",
"$comment": "U+03BC"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "μ",
"$comment": "U+03BC"
}
]
},
"tests": [
{
@ -472,10 +536,14 @@
},
{
"description": "characters with the same visual representation, but different number of codepoints",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "ä",
"$comment": "U+00E4"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": "ä",
"$comment": "U+00E4"
}
]
},
"tests": [
{
@ -494,12 +562,16 @@
},
{
"description": "extensible: true allows extra properties in const object match",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": 1
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"const": {
"a": 1
},
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,12 +1,16 @@
[
{
"description": "contains keyword validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"minimum": 5
},
"items": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"minimum": 5
},
"items": true
}
]
},
"tests": [
{
@ -60,12 +64,16 @@
},
{
"description": "contains keyword with const keyword",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 5
},
"items": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 5
},
"items": true
}
]
},
"tests": [
{
@ -101,9 +109,13 @@
},
{
"description": "contains keyword with boolean schema true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": true
}
]
},
"tests": [
{
@ -122,9 +134,13 @@
},
{
"description": "contains keyword with boolean schema false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": false
}
]
},
"tests": [
{
@ -148,14 +164,18 @@
},
{
"description": "items + contains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"multipleOf": 2
},
"contains": {
"multipleOf": 3
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"multipleOf": 2
},
"contains": {
"multipleOf": 3
}
}
]
},
"tests": [
{
@ -196,12 +216,16 @@
},
{
"description": "contains with false if subschema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"if": false,
"else": true
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"if": false,
"else": true
}
}
]
},
"tests": [
{
@ -220,11 +244,15 @@
},
{
"description": "contains with null instance elements",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"type": "null"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"type": "null"
}
}
]
},
"tests": [
{
@ -238,12 +266,16 @@
},
{
"description": "extensible: true allows non-matching items in contains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"extensible": true
}
]
},
"tests": [
{
@ -258,11 +290,15 @@
},
{
"description": "strict by default: non-matching items in contains are invalid",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
}
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "validation of string-encoded content based on media type",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json"
}
]
},
"tests": [
{
@ -25,9 +29,13 @@
},
{
"description": "validation of binary string-encoding",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentEncoding": "base64"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentEncoding": "base64"
}
]
},
"tests": [
{
@ -49,10 +57,14 @@
},
{
"description": "validation of binary-encoded media type documents",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json",
"contentEncoding": "base64"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json",
"contentEncoding": "base64"
}
]
},
"tests": [
{
@ -79,24 +91,28 @@
},
{
"description": "validation of binary-encoded media type documents with schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json",
"contentEncoding": "base64",
"contentSchema": {
"type": "object",
"required": [
"foo"
],
"properties": {
"foo": {
"type": "string"
},
"boo": {
"type": "integer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contentMediaType": "application/json",
"contentEncoding": "base64",
"contentSchema": {
"type": "object",
"required": [
"foo"
],
"properties": {
"foo": {
"type": "string"
},
"boo": {
"type": "integer"
}
}
}
}
}
]
},
"tests": [
{

576
tests/fixtures/dependencies.json vendored Normal file
View File

@ -0,0 +1,576 @@
[
{
"description": "single dependency (required)",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema1",
"dependencies": {
"bar": [
"foo"
]
},
"extensible": true
}
]
},
"tests": [
{
"description": "neither",
"data": {},
"valid": true
},
{
"description": "nondependant",
"data": {
"foo": 1
},
"valid": true
},
{
"description": "with dependency",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "missing dependency",
"data": {
"bar": 2
},
"valid": false
},
{
"description": "ignores arrays",
"data": [
"bar"
],
"valid": true
},
{
"description": "ignores strings",
"data": "foobar",
"valid": true
},
{
"description": "ignores other non-objects",
"data": 12,
"valid": true
}
]
},
{
"description": "empty dependents",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema2",
"dependencies": {
"bar": []
},
"extensible": true
}
]
},
"tests": [
{
"description": "empty object",
"data": {},
"valid": true
},
{
"description": "object with one property",
"data": {
"bar": 2
},
"valid": true
},
{
"description": "non-object is valid",
"data": 1,
"valid": true
}
]
},
{
"description": "multiple dependents required",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema3",
"dependencies": {
"quux": [
"foo",
"bar"
]
},
"extensible": true
}
]
},
"tests": [
{
"description": "neither",
"data": {},
"valid": true
},
{
"description": "nondependants",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "with dependencies",
"data": {
"foo": 1,
"bar": 2,
"quux": 3
},
"valid": true
},
{
"description": "missing dependency",
"data": {
"foo": 1,
"quux": 2
},
"valid": false
},
{
"description": "missing other dependency",
"data": {
"bar": 1,
"quux": 2
},
"valid": false
},
{
"description": "missing both dependencies",
"data": {
"quux": 1
},
"valid": false
}
]
},
{
"description": "dependencies with escaped characters",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema4",
"dependencies": {
"foo\nbar": [
"foo\rbar"
],
"foo\"bar": [
"foo'bar"
]
},
"extensible": true
}
]
},
"tests": [
{
"description": "CRLF",
"data": {
"foo\nbar": 1,
"foo\rbar": 2
},
"valid": true
},
{
"description": "quoted quotes",
"data": {
"foo'bar": 1,
"foo\"bar": 2
},
"valid": true
},
{
"description": "CRLF missing dependent",
"data": {
"foo\nbar": 1,
"foo": 2
},
"valid": false
},
{
"description": "quoted quotes missing dependent",
"data": {
"foo\"bar": 2
},
"valid": false
}
]
},
{
"description": "extensible: true allows extra properties in dependentRequired",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema5",
"dependencies": {
"bar": [
"foo"
]
},
"extensible": true
}
]
},
"tests": [
{
"description": "extra property is valid",
"data": {
"foo": 1,
"bar": 2,
"baz": 3
},
"valid": true
}
]
},
{
"description": "single dependency (schemas, STRICT)",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema1",
"properties": {
"foo": true,
"bar": true
},
"dependencies": {
"bar": {
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "integer"
}
}
}
}
}
]
},
"tests": [
{
"description": "valid",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "no dependency",
"data": {
"foo": "quux"
},
"valid": true
},
{
"description": "wrong type",
"data": {
"foo": "quux",
"bar": 2
},
"valid": false
},
{
"description": "wrong type other",
"data": {
"foo": 2,
"bar": "quux"
},
"valid": false
},
{
"description": "wrong type both",
"data": {
"foo": "quux",
"bar": "quux"
},
"valid": false
},
{
"description": "ignores arrays (invalid in strict mode)",
"data": [
"bar"
],
"valid": false,
"expect_errors": [
{
"code": "STRICT_ITEM_VIOLATION"
}
]
},
{
"description": "ignores strings",
"data": "foobar",
"valid": true
},
{
"description": "ignores other non-objects",
"data": 12,
"valid": true
}
]
},
{
"description": "single dependency (schemas, EXTENSIBLE)",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema2",
"properties": {
"foo": true,
"bar": true
},
"dependencies": {
"bar": {
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "integer"
}
}
}
},
"extensible": true
}
]
},
"tests": [
{
"description": "ignores arrays (valid in extensible mode)",
"data": [
"bar"
],
"valid": true
}
]
},
{
"description": "boolean subschemas",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema3",
"properties": {
"foo": true,
"bar": true
},
"dependencies": {
"foo": true,
"bar": false
}
}
]
},
"tests": [
{
"description": "object with property having schema true is valid",
"data": {
"foo": 1
},
"valid": true
},
{
"description": "object with property having schema false is invalid",
"data": {
"bar": 2
},
"valid": false
},
{
"description": "object with both properties is invalid",
"data": {
"foo": 1,
"bar": 2
},
"valid": false
},
{
"description": "empty object is valid",
"data": {},
"valid": true
}
]
},
{
"description": "dependencies with escaped characters",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema4",
"properties": {
"foo\tbar": true,
"foo'bar": true,
"a": true,
"b": true,
"c": true
},
"dependencies": {
"foo\tbar": {
"minProperties": 4,
"extensible": true
},
"foo'bar": {
"required": [
"foo\"bar"
]
}
}
}
]
},
"tests": [
{
"description": "quoted tab",
"data": {
"foo\tbar": 1,
"a": 2,
"b": 3,
"c": 4
},
"valid": true
},
{
"description": "quoted quote",
"data": {
"foo'bar": {
"foo\"bar": 1
}
},
"valid": false
},
{
"description": "quoted tab invalid under dependent schema",
"data": {
"foo\tbar": 1,
"a": 2
},
"valid": false
},
{
"description": "quoted quote invalid under dependent schema",
"data": {
"foo'bar": 1
},
"valid": false
}
]
},
{
"description": "dependent subschema incompatible with root (STRICT)",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema5",
"properties": {
"foo": {},
"baz": true
},
"dependencies": {
"foo": {
"properties": {
"bar": {}
}
}
}
}
]
},
"tests": [
{
"description": "matches root",
"data": {
"foo": 1
},
"valid": false
},
{
"description": "matches dependency (invalid in strict mode - bar not allowed if foo missing)",
"data": {
"bar": 1
},
"valid": false,
"expect_errors": [
{
"code": "STRICT_PROPERTY_VIOLATION"
}
]
},
{
"description": "matches both",
"data": {
"foo": 1,
"bar": 2
},
"valid": false
},
{
"description": "no dependency",
"data": {
"baz": 1
},
"valid": true
}
]
},
{
"description": "dependent subschema incompatible with root (EXTENSIBLE)",
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "schema_schema6",
"properties": {
"foo": {},
"baz": true
},
"dependencies": {
"foo": {
"properties": {
"bar": {}
},
"additionalProperties": false
}
},
"extensible": true
}
]
},
"tests": [
{
"description": "matches dependency (valid in extensible mode)",
"data": {
"bar": 1
},
"valid": true
}
]
}
]

View File

@ -1,220 +0,0 @@
[
{
"description": "single dependency",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"dependentRequired": {
"bar": [
"foo"
]
},
"extensible": true
},
"tests": [
{
"description": "neither",
"data": {},
"valid": true
},
{
"description": "nondependant",
"data": {
"foo": 1
},
"valid": true
},
{
"description": "with dependency",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "missing dependency",
"data": {
"bar": 2
},
"valid": false
},
{
"description": "ignores arrays",
"data": [
"bar"
],
"valid": true
},
{
"description": "ignores strings",
"data": "foobar",
"valid": true
},
{
"description": "ignores other non-objects",
"data": 12,
"valid": true
}
]
},
{
"description": "empty dependents",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"dependentRequired": {
"bar": []
},
"extensible": true
},
"tests": [
{
"description": "empty object",
"data": {},
"valid": true
},
{
"description": "object with one property",
"data": {
"bar": 2
},
"valid": true
},
{
"description": "non-object is valid",
"data": 1,
"valid": true
}
]
},
{
"description": "multiple dependents required",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"dependentRequired": {
"quux": [
"foo",
"bar"
]
},
"extensible": true
},
"tests": [
{
"description": "neither",
"data": {},
"valid": true
},
{
"description": "nondependants",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "with dependencies",
"data": {
"foo": 1,
"bar": 2,
"quux": 3
},
"valid": true
},
{
"description": "missing dependency",
"data": {
"foo": 1,
"quux": 2
},
"valid": false
},
{
"description": "missing other dependency",
"data": {
"bar": 1,
"quux": 2
},
"valid": false
},
{
"description": "missing both dependencies",
"data": {
"quux": 1
},
"valid": false
}
]
},
{
"description": "dependencies with escaped characters",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"dependentRequired": {
"foo\nbar": [
"foo\rbar"
],
"foo\"bar": [
"foo'bar"
]
},
"extensible": true
},
"tests": [
{
"description": "CRLF",
"data": {
"foo\nbar": 1,
"foo\rbar": 2
},
"valid": true
},
{
"description": "quoted quotes",
"data": {
"foo'bar": 1,
"foo\"bar": 2
},
"valid": true
},
{
"description": "CRLF missing dependent",
"data": {
"foo\nbar": 1,
"foo": 2
},
"valid": false
},
{
"description": "quoted quotes missing dependent",
"data": {
"foo\"bar": 2
},
"valid": false
}
]
},
{
"description": "extensible: true allows extra properties in dependentRequired",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"dependentRequired": {
"bar": [
"foo"
]
},
"extensible": true
},
"tests": [
{
"description": "extra property is valid",
"data": {
"foo": 1,
"bar": 2,
"baz": 3
},
"valid": true
}
]
}
]

View File

@ -1,303 +0,0 @@
[
{
"description": "single dependency (STRICT)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": true,
"bar": true
},
"dependentSchemas": {
"bar": {
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "integer"
}
}
}
}
},
"tests": [
{
"description": "valid",
"data": {
"foo": 1,
"bar": 2
},
"valid": true
},
{
"description": "no dependency",
"data": {
"foo": "quux"
},
"valid": true
},
{
"description": "wrong type",
"data": {
"foo": "quux",
"bar": 2
},
"valid": false
},
{
"description": "wrong type other",
"data": {
"foo": 2,
"bar": "quux"
},
"valid": false
},
{
"description": "wrong type both",
"data": {
"foo": "quux",
"bar": "quux"
},
"valid": false
},
{
"description": "ignores arrays (invalid in strict mode)",
"data": [
"bar"
],
"valid": false,
"expect_errors": [
{
"code": "STRICT_ITEM_VIOLATION"
}
]
},
{
"description": "ignores strings (invalid in strict mode - wait, strings are scalars, strict only checks obj/arr)",
"data": "foobar",
"valid": true
},
{
"description": "ignores other non-objects",
"data": 12,
"valid": true
}
]
},
{
"description": "single dependency (EXTENSIBLE)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": true,
"bar": true
},
"dependentSchemas": {
"bar": {
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "integer"
}
}
}
},
"extensible": true
},
"tests": [
{
"description": "ignores arrays (valid in extensible mode)",
"data": [
"bar"
],
"valid": true
}
]
},
{
"description": "boolean subschemas",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": true,
"bar": true
},
"dependentSchemas": {
"foo": true,
"bar": false
}
},
"tests": [
{
"description": "object with property having schema true is valid",
"data": {
"foo": 1
},
"valid": true
},
{
"description": "object with property having schema false is invalid",
"data": {
"bar": 2
},
"valid": false
},
{
"description": "object with both properties is invalid",
"data": {
"foo": 1,
"bar": 2
},
"valid": false
},
{
"description": "empty object is valid",
"data": {},
"valid": true
}
]
},
{
"description": "dependencies with escaped characters",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo\tbar": true,
"foo'bar": true,
"a": true,
"b": true,
"c": true
},
"dependentSchemas": {
"foo\tbar": {
"minProperties": 4,
"extensible": true
},
"foo'bar": {
"required": [
"foo\"bar"
]
}
}
},
"tests": [
{
"description": "quoted tab",
"data": {
"foo\tbar": 1,
"a": 2,
"b": 3,
"c": 4
},
"valid": true
},
{
"description": "quoted quote",
"data": {
"foo'bar": {
"foo\"bar": 1
}
},
"valid": false
},
{
"description": "quoted tab invalid under dependent schema",
"data": {
"foo\tbar": 1,
"a": 2
},
"valid": false
},
{
"description": "quoted quote invalid under dependent schema",
"data": {
"foo'bar": 1
},
"valid": false
}
]
},
{
"description": "dependent subschema incompatible with root (STRICT)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {},
"baz": true
},
"dependentSchemas": {
"foo": {
"properties": {
"bar": {}
}
}
}
},
"tests": [
{
"description": "matches root",
"data": {
"foo": 1
},
"valid": false
},
{
"description": "matches dependency (invalid in strict mode - bar not allowed if foo missing)",
"data": {
"bar": 1
},
"valid": false,
"expect_errors": [
{
"code": "STRICT_PROPERTY_VIOLATION"
}
]
},
{
"description": "matches both",
"data": {
"foo": 1,
"bar": 2
},
"valid": false
},
{
"description": "no dependency",
"data": {
"baz": 1
},
"valid": true
}
]
},
{
"description": "dependent subschema incompatible with root (EXTENSIBLE)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {},
"baz": true
},
"dependentSchemas": {
"foo": {
"properties": {
"bar": {}
},
"additionalProperties": false
}
},
"extensible": true
},
"tests": [
{
"description": "matches dependency (valid in extensible mode)",
"data": {
"bar": 1
},
"valid": true
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +1,45 @@
[
{
"description": "empty string is valid for all types (except const)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"obj": {
"type": "object"
},
"arr": {
"type": "array"
},
"str": {
"type": "string"
},
"int": {
"type": "integer"
},
"num": {
"type": "number"
},
"bool": {
"type": "boolean"
},
"nul": {
"type": "null"
},
"fmt": {
"type": "string",
"format": "uuid"
},
"con": {
"const": "value"
},
"con_empty": {
"const": ""
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"obj": {
"type": "object"
},
"arr": {
"type": "array"
},
"str": {
"type": "string"
},
"int": {
"type": "integer"
},
"num": {
"type": "number"
},
"bool": {
"type": "boolean"
},
"nul": {
"type": "null"
},
"fmt": {
"type": "string",
"format": "uuid"
},
"con": {
"const": "value"
},
"con_empty": {
"const": ""
}
}
}
}
]
},
"tests": [
{

View File

@ -1,12 +1,16 @@
[
{
"description": "simple enum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
1,
2,
3
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
1,
2,
3
]
}
]
},
"tests": [
@ -24,20 +28,24 @@
},
{
"description": "heterogeneous enum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
6,
"foo",
[],
true,
"database": {
"schemas": [
{
"foo": 12
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
6,
"foo",
[],
true,
{
"foo": 12
}
],
"properties": {
"foo": {}
}
}
],
"properties": {
"foo": {}
}
]
},
"tests": [
{
@ -76,11 +84,15 @@
},
{
"description": "heterogeneous enum-with-null validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
6,
null
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
6,
null
]
}
]
},
"tests": [
@ -103,23 +115,27 @@
},
{
"description": "enums in properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"foo": {
"enum": [
"foo"
]
},
"bar": {
"enum": [
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"foo": {
"enum": [
"foo"
]
},
"bar": {
"enum": [
"bar"
]
}
},
"required": [
"bar"
]
}
},
"required": [
"bar"
]
},
"tests": [
@ -170,11 +186,15 @@
},
{
"description": "enum with escaped characters",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
"foo\nbar",
"foo\rbar"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
"foo\nbar",
"foo\rbar"
]
}
]
},
"tests": [
@ -197,10 +217,14 @@
},
{
"description": "enum with false does not match 0",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
false
]
}
]
},
"tests": [
@ -223,12 +247,16 @@
},
{
"description": "enum with [false] does not match [0]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
false
]
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
false
]
]
}
]
},
"tests": [
@ -257,10 +285,14 @@
},
{
"description": "enum with true does not match 1",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
true
]
}
]
},
"tests": [
@ -283,12 +315,16 @@
},
{
"description": "enum with [true] does not match [1]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
true
]
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
true
]
]
}
]
},
"tests": [
@ -317,10 +353,14 @@
},
{
"description": "enum with 0 does not match false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
0
]
}
]
},
"tests": [
@ -343,12 +383,16 @@
},
{
"description": "enum with [0] does not match [false]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
0
]
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
0
]
]
}
]
},
"tests": [
@ -377,10 +421,14 @@
},
{
"description": "enum with 1 does not match true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
1
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
1
]
}
]
},
"tests": [
@ -403,12 +451,16 @@
},
{
"description": "enum with [1] does not match [true]",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
1
]
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
[
1
]
]
}
]
},
"tests": [
@ -437,10 +489,14 @@
},
{
"description": "nul characters in strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
"hello\u0000there"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
"hello\u0000there"
]
}
]
},
"tests": [
@ -458,14 +514,18 @@
},
{
"description": "extensible: true allows extra properties in enum object match",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
"database": {
"schemas": [
{
"foo": 1
"$schema": "https://json-schema.org/draft/2020-12/schema",
"enum": [
{
"foo": 1
}
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "exclusiveMaximum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"exclusiveMaximum": 3.0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"exclusiveMaximum": 3.0
}
]
},
"tests": [
{
@ -28,4 +32,4 @@
}
]
}
]
]

View File

@ -1,9 +1,13 @@
[
{
"description": "exclusiveMinimum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"exclusiveMinimum": 1.1
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"exclusiveMinimum": 1.1
}
]
},
"tests": [
{
@ -28,4 +32,4 @@
}
]
}
]
]

202
tests/fixtures/families.json vendored Normal file
View File

@ -0,0 +1,202 @@
[
{
"description": "Entity families with dot patterns",
"database": {
"types": [
{
"name": "entity",
"hierarchy": [
"entity"
],
"schemas": [
{
"$id": "entity",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"const": "entity"
}
}
},
{
"$id": "entity.light",
"$ref": "entity"
}
]
},
{
"name": "organization",
"hierarchy": [
"entity",
"organization"
],
"schemas": [
{
"$id": "organization",
"$ref": "entity",
"properties": {
"name": {
"type": "string"
}
}
}
]
},
{
"name": "person",
"hierarchy": [
"entity",
"organization",
"person"
],
"schemas": [
{
"$id": "person",
"$ref": "organization",
"properties": {
"first_name": {
"type": "string"
}
}
},
{
"$id": "person.light",
"$ref": "person"
}
]
}
],
"puncs": [
{
"name": "get_entities",
"schemas": [
{
"$id": "get_entities.response",
"$family": "entity"
}
]
},
{
"name": "get_light_entities",
"schemas": [
{
"$id": "get_light_entities.response",
"$family": "entity.light"
}
]
}
]
},
"tests": [
{
"description": "Family matches base entity",
"schema_id": "get_entities.response",
"data": {
"id": "1",
"type": "entity"
},
"valid": true
},
{
"description": "Family matches descendant person",
"schema_id": "get_entities.response",
"data": {
"id": "2",
"type": "person",
"name": "ACME",
"first_name": "John"
},
"valid": true
},
{
"description": "Dot pattern family matches entity.light",
"schema_id": "get_light_entities.response",
"data": {
"id": "3",
"type": "entity"
},
"valid": true
},
{
"description": "Dot pattern family matches person.light",
"schema_id": "get_light_entities.response",
"data": {
"id": "4",
"type": "person",
"name": "ACME",
"first_name": "John"
},
"valid": true
},
{
"description": "Dot pattern family excludes organization (missing .light schema, constraint violation)",
"schema_id": "get_light_entities.response",
"data": {
"id": "5",
"type": "organization",
"name": "ACME"
},
"valid": false
}
]
},
{
"description": "Ad-hoc non-entity families (using normal json-schema object structures)",
"database": {
"puncs": [
{
"name": "get_widgets",
"schemas": [
{
"$id": "widget",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"widget_type": {
"type": "string"
}
}
},
{
"$id": "special_widget",
"$ref": "widget",
"properties": {
"special_feature": {
"type": "string"
}
}
},
{
"$id": "get_widgets.response",
"$family": "widget"
}
]
}
]
},
"tests": [
{
"description": "Ad-hoc family does not implicitly match descendants (no magical implicit hierarchy on normal ad-hoc schemas)",
"schema_id": "get_widgets.response",
"data": {
"id": "1",
"widget_type": "special",
"special_feature": "yes"
},
"valid": false,
"expect_errors": [
{
"code": "FAMILY_MISMATCH",
"path": ""
}
]
}
]
}
]

View File

@ -1,9 +1,13 @@
[
{
"description": "validation of date-time strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "date-time"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "date-time"
}
]
},
"tests": [
{
@ -140,9 +144,13 @@
},
{
"description": "validation of date strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "date"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "date"
}
]
},
"tests": [
{
@ -389,9 +397,13 @@
},
{
"description": "validation of duration strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "duration"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "duration"
}
]
},
"tests": [
{
@ -528,9 +540,13 @@
},
{
"description": "\\a is not an ECMA 262 control escape",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "regex"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "regex"
}
]
},
"tests": [
{
@ -542,9 +558,13 @@
},
{
"description": "validation of e-mail addresses",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "email"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "email"
}
]
},
"tests": [
{
@ -671,9 +691,13 @@
},
{
"description": "validation of host names",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "hostname"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "hostname"
}
]
},
"tests": [
{
@ -801,9 +825,13 @@
},
{
"description": "validation of A-label (punycode) host names",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "hostname"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "hostname"
}
]
},
"tests": [
{
@ -1030,9 +1058,13 @@
},
{
"description": "validation of an internationalized e-mail addresses",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-email"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-email"
}
]
},
"tests": [
{
@ -1089,9 +1121,13 @@
},
{
"description": "validation of internationalized host names",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-hostname"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-hostname"
}
]
},
"tests": [
{
@ -1430,9 +1466,13 @@
"quote": "Whenever dots are used as label separators, the following characters MUST be recognized as dots: U+002E (full stop), U+3002 (ideographic full stop), U+FF0E (fullwidth full stop), U+FF61(halfwidth ideographic full stop)"
}
],
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-hostname"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "idn-hostname"
}
]
},
"tests": [
{
@ -1539,9 +1579,13 @@
},
{
"description": "validation of IP addresses",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "ipv4"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "ipv4"
}
]
},
"tests": [
{
@ -1629,9 +1673,13 @@
},
{
"description": "validation of IPv6 addresses",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "ipv6"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "ipv6"
}
]
},
"tests": [
{
@ -1838,9 +1886,13 @@
},
{
"description": "validation of IRI References",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "iri-reference"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "iri-reference"
}
]
},
"tests": [
{
@ -1912,9 +1964,13 @@
},
{
"description": "validation of IRIs",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "iri"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "iri"
}
]
},
"tests": [
{
@ -1996,9 +2052,13 @@
},
{
"description": "validation of JSON-pointers (JSON String Representation)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "json-pointer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "json-pointer"
}
]
},
"tests": [
{
@ -2195,9 +2255,13 @@
},
{
"description": "validation of regular expressions",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "regex"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "regex"
}
]
},
"tests": [
{
@ -2244,9 +2308,13 @@
},
{
"description": "validation of Relative JSON Pointers (RJP)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "relative-json-pointer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "relative-json-pointer"
}
]
},
"tests": [
{
@ -2343,9 +2411,13 @@
},
{
"description": "validation of time strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "time"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "time"
}
]
},
"tests": [
{
@ -2582,9 +2654,13 @@
},
{
"description": "unknown format",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "unknown"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "unknown"
}
]
},
"tests": [
{
@ -2626,9 +2702,13 @@
},
{
"description": "validation of URI References",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri-reference"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri-reference"
}
]
},
"tests": [
{
@ -2710,9 +2790,13 @@
},
{
"description": "format: uri-template",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri-template"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri-template"
}
]
},
"tests": [
{
@ -2769,9 +2853,13 @@
},
{
"description": "validation of URIs",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uri"
}
]
},
"tests": [
{
@ -2958,9 +3046,13 @@
},
{
"description": "uuid format",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uuid"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "uuid"
}
]
},
"tests": [
{
@ -3077,9 +3169,13 @@
},
{
"description": "period format",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "period"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"format": "period"
}
]
},
"tests": [
{

View File

@ -1,11 +1,15 @@
[
{
"description": "ignore if without then or else",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"const": 0
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"const": 0
}
}
]
},
"tests": [
{
@ -22,11 +26,15 @@
},
{
"description": "ignore then without if",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"then": {
"const": 0
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"then": {
"const": 0
}
}
]
},
"tests": [
{
@ -43,11 +51,15 @@
},
{
"description": "ignore else without if",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"else": {
"const": 0
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"else": {
"const": 0
}
}
]
},
"tests": [
{
@ -64,14 +76,18 @@
},
{
"description": "if and then without else",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"then": {
"minimum": -10
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"then": {
"minimum": -10
}
}
]
},
"tests": [
{
@ -93,14 +109,18 @@
},
{
"description": "if and else without then",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"else": {
"multipleOf": 2
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"else": {
"multipleOf": 2
}
}
]
},
"tests": [
{
@ -122,17 +142,21 @@
},
{
"description": "validate against correct branch, then vs else",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"then": {
"minimum": -10
},
"else": {
"multipleOf": 2
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"exclusiveMaximum": 0
},
"then": {
"minimum": -10
},
"else": {
"multipleOf": 2
}
}
]
},
"tests": [
{
@ -159,23 +183,27 @@
},
{
"description": "non-interference across combined schemas",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"if": {
"exclusiveMaximum": 0
}
},
{
"then": {
"minimum": -10
}
},
{
"else": {
"multipleOf": 2
}
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"if": {
"exclusiveMaximum": 0
}
},
{
"then": {
"minimum": -10
}
},
{
"else": {
"multipleOf": 2
}
}
]
}
]
},
@ -194,15 +222,19 @@
},
{
"description": "if with boolean schema true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": true,
"then": {
"const": "then"
},
"else": {
"const": "else"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": true,
"then": {
"const": "then"
},
"else": {
"const": "else"
}
}
]
},
"tests": [
{
@ -219,15 +251,19 @@
},
{
"description": "if with boolean schema false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": false,
"then": {
"const": "then"
},
"else": {
"const": "else"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": false,
"then": {
"const": "then"
},
"else": {
"const": "else"
}
}
]
},
"tests": [
{
@ -244,17 +280,21 @@
},
{
"description": "if appears at the end when serialized (keyword processing sequence)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"then": {
"const": "yes"
},
"else": {
"const": "other"
},
"if": {
"maxLength": 4
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"then": {
"const": "yes"
},
"else": {
"const": "other"
},
"if": {
"maxLength": 4
}
}
]
},
"tests": [
{
@ -281,11 +321,15 @@
},
{
"description": "then: false fails when condition matches",
"schema": {
"if": {
"const": 1
},
"then": false
"database": {
"schemas": [
{
"if": {
"const": 1
},
"then": false
}
]
},
"tests": [
{
@ -302,11 +346,15 @@
},
{
"description": "else: false fails when condition does not match",
"schema": {
"if": {
"const": 1
},
"else": false
"database": {
"schemas": [
{
"if": {
"const": 1
},
"else": false
}
]
},
"tests": [
{
@ -323,29 +371,33 @@
},
{
"description": "extensible: true allows extra properties in if-then-else",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"properties": {
"foo": {
"const": 1
}
},
"required": [
"foo"
]
},
"then": {
"properties": {
"bar": {
"const": 2
}
},
"required": [
"bar"
]
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"properties": {
"foo": {
"const": 1
}
},
"required": [
"foo"
]
},
"then": {
"properties": {
"bar": {
"const": 2
}
},
"required": [
"bar"
]
},
"extensible": true
}
]
},
"tests": [
{
@ -361,25 +413,29 @@
},
{
"description": "strict by default with if-then properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"properties": {
"foo": {
"const": 1
}
},
"required": [
"foo"
]
},
"then": {
"properties": {
"bar": {
"const": 2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"if": {
"properties": {
"foo": {
"const": 1
}
},
"required": [
"foo"
]
},
"then": {
"properties": {
"bar": {
"const": 2
}
}
}
}
}
]
},
"tests": [
{

View File

@ -1,11 +1,15 @@
[
{
"description": "a schema given for items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"type": "integer"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"type": "integer"
}
}
]
},
"tests": [
{
@ -44,9 +48,13 @@
},
{
"description": "items with boolean schema (true)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": true
}
]
},
"tests": [
{
@ -67,9 +75,13 @@
},
{
"description": "items with boolean schema (false)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": false
}
]
},
"tests": [
{
@ -90,39 +102,43 @@
},
{
"description": "items and subitems",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"item": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"item": {
"type": "array",
"items": false,
"prefixItems": [
{
"$ref": "#/$defs/sub-item"
},
{
"$ref": "#/$defs/sub-item"
}
]
},
"sub-item": {
"type": "object",
"required": [
"foo"
]
}
},
"type": "array",
"items": false,
"prefixItems": [
{
"$ref": "#/$defs/sub-item"
"$ref": "#/$defs/item"
},
{
"$ref": "#/$defs/sub-item"
"$ref": "#/$defs/item"
},
{
"$ref": "#/$defs/item"
}
]
},
"sub-item": {
"type": "object",
"required": [
"foo"
]
}
},
"type": "array",
"items": false,
"prefixItems": [
{
"$ref": "#/$defs/item"
},
{
"$ref": "#/$defs/item"
},
{
"$ref": "#/$defs/item"
}
]
},
@ -301,21 +317,25 @@
},
{
"description": "nested items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"type": "array",
"items": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
}
}
}
}
}
]
},
"tests": [
{
@ -418,14 +438,18 @@
},
{
"description": "prefixItems with no additional items allowed",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{},
{},
{}
],
"items": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{},
{},
{}
],
"items": false
}
]
},
"tests": [
{
@ -471,20 +495,24 @@
},
{
"description": "items does not look in applicators, valid case",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
"database": {
"schemas": [
{
"prefixItems": [
"$schema": "https://json-schema.org/draft/2020-12/schema",
"allOf": [
{
"minimum": 3
"prefixItems": [
{
"minimum": 3
}
]
}
]
],
"items": {
"minimum": 5
}
}
],
"items": {
"minimum": 5
}
]
},
"tests": [
{
@ -507,16 +535,20 @@
},
{
"description": "prefixItems validation adjusts the starting index for items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "string"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "string"
}
],
"items": {
"type": "integer"
}
}
],
"items": {
"type": "integer"
}
]
},
"tests": [
{
@ -540,12 +572,16 @@
},
{
"description": "items with heterogeneous array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{}
],
"items": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{}
],
"items": false
}
]
},
"tests": [
{
@ -568,11 +604,15 @@
},
{
"description": "items with null instance elements",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"type": "null"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"type": "null"
}
}
]
},
"tests": [
{
@ -586,10 +626,14 @@
},
{
"description": "extensible: true allows extra items (when items is false)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": false,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": false,
"extensible": true
}
]
},
"tests": [
{
@ -603,12 +647,16 @@
},
{
"description": "extensible: true allows extra properties for items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"minimum": 5
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"items": {
"minimum": 5
},
"extensible": true
}
]
},
"tests": [
{
@ -630,10 +678,14 @@
},
{
"description": "array: simple extensible array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"extensible": true
}
]
},
"tests": [
{
@ -653,10 +705,14 @@
},
{
"description": "array: strict array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"extensible": false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"extensible": false
}
]
},
"tests": [
{
@ -675,12 +731,16 @@
},
{
"description": "array: items extensible",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"extensible": true
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"extensible": true
}
}
]
},
"tests": [
{
@ -701,13 +761,17 @@
},
{
"description": "array: items strict",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"type": "object",
"extensible": false
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"type": "object",
"extensible": false
}
}
]
},
"tests": [
{

View File

@ -1,21 +1,25 @@
[
{
"description": "Masking Properties",
"schema": {
"$id": "mask_properties",
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "integer"
"database": {
"schemas": [
{
"$id": "mask_properties",
"type": "object",
"properties": {
"foo": {
"type": "string"
},
"bar": {
"type": "integer"
}
},
"required": [
"foo"
],
"extensible": false
}
},
"required": [
"foo"
],
"extensible": false
]
},
"tests": [
{
@ -58,21 +62,25 @@
},
{
"description": "Masking Nested Objects",
"schema": {
"$id": "mask_nested",
"type": "object",
"properties": {
"meta": {
"database": {
"schemas": [
{
"$id": "mask_nested",
"type": "object",
"properties": {
"id": {
"type": "integer"
"meta": {
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"extensible": false
}
},
"extensible": false
}
},
"extensible": false
]
},
"tests": [
{
@ -95,18 +103,22 @@
},
{
"description": "Masking Arrays",
"schema": {
"$id": "mask_arrays",
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
}
"database": {
"schemas": [
{
"$id": "mask_arrays",
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"extensible": false
}
},
"extensible": false
]
},
"tests": [
{
@ -129,23 +141,27 @@
},
{
"description": "Masking Tuple Arrays (prefixItems)",
"schema": {
"$id": "mask_tuple",
"type": "object",
"properties": {
"coord": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
"database": {
"schemas": [
{
"$id": "mask_tuple",
"type": "object",
"properties": {
"coord": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
}
]
},
"extensible": false
}
},
"extensible": false
]
},
"tests": [
{

View File

@ -1,10 +1,14 @@
[
{
"description": "maxContains without contains is ignored",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxContains": 1,
"extensible": true
}
]
},
"tests": [
{
@ -26,13 +30,17 @@
},
{
"description": "maxContains with contains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"extensible": true
}
]
},
"tests": [
{
@ -76,13 +84,17 @@
},
{
"description": "maxContains with contains, value with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1.0,
"extensible": true
}
]
},
"tests": [
{
@ -104,14 +116,18 @@
},
{
"description": "minContains < maxContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"maxContains": 3,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"maxContains": 3,
"extensible": true
}
]
},
"tests": [
{
@ -141,13 +157,17 @@
},
{
"description": "extensible: true allows non-matching items in maxContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,10 +1,14 @@
[
{
"description": "maxItems validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2,
"extensible": true
}
]
},
"tests": [
{
@ -40,10 +44,14 @@
},
{
"description": "maxItems validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2.0,
"extensible": true
}
]
},
"tests": [
{
@ -66,10 +74,14 @@
},
{
"description": "extensible: true allows extra items in maxItems (but counted)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxItems": 2,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "maxLength validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxLength": 2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxLength": 2
}
]
},
"tests": [
{
@ -35,9 +39,13 @@
},
{
"description": "maxLength validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxLength": 2.0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxLength": 2.0
}
]
},
"tests": [
{
@ -52,4 +60,4 @@
}
]
}
]
]

View File

@ -1,10 +1,14 @@
[
{
"description": "maxProperties validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2,
"extensible": true
}
]
},
"tests": [
{
@ -54,10 +58,14 @@
},
{
"description": "maxProperties validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2.0,
"extensible": true
}
]
},
"tests": [
{
@ -80,10 +88,14 @@
},
{
"description": "maxProperties = 0 means the object is empty",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 0,
"extensible": true
}
]
},
"tests": [
{
@ -102,10 +114,14 @@
},
{
"description": "extensible: true allows extra properties in maxProperties (though maxProperties still counts them!)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maxProperties": 2,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "maximum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maximum": 3.0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maximum": 3.0
}
]
},
"tests": [
{
@ -30,11 +34,15 @@
},
{
"description": "maximum validation with unsigned integer",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maximum": 300
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"maximum": 300
}
]
},
"tests": [
"tests": [
{
"description": "below the maximum is invalid",
"data": 299.97,
@ -57,4 +65,4 @@
}
]
}
]
]

View File

@ -1,23 +1,27 @@
[
{
"description": "merging: properties accumulate",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"properties": {
"base_prop": {
"type": "string"
}
}
}
},
"$ref": "#/$defs/base",
"properties": {
"base_prop": {
"child_prop": {
"type": "string"
}
}
}
},
"$ref": "#/$defs/base",
"properties": {
"child_prop": {
"type": "string"
}
}
]
},
"tests": [
{
@ -46,28 +50,32 @@
},
{
"description": "merging: required fields accumulate",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"properties": {
"a": {
"type": "string"
}
},
"required": [
"a"
]
}
},
"$ref": "#/$defs/base",
"properties": {
"a": {
"b": {
"type": "string"
}
},
"required": [
"a"
"b"
]
}
},
"$ref": "#/$defs/base",
"properties": {
"b": {
"type": "string"
}
},
"required": [
"b"
]
},
"tests": [
@ -109,36 +117,40 @@
},
{
"description": "merging: dependencies accumulate",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"properties": {
"trigger": {
"type": "string"
},
"base_dep": {
"type": "string"
}
},
"dependencies": {
"trigger": [
"base_dep"
]
}
}
},
"$ref": "#/$defs/base",
"properties": {
"trigger": {
"type": "string"
},
"base_dep": {
"child_dep": {
"type": "string"
}
},
"dependencies": {
"trigger": [
"base_dep"
"child_dep"
]
}
}
},
"$ref": "#/$defs/base",
"properties": {
"child_dep": {
"type": "string"
}
},
"dependencies": {
"trigger": [
"child_dep"
]
}
]
},
"tests": [
{
@ -182,32 +194,36 @@
},
{
"description": "merging: form and display do NOT merge",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$defs": {
"base": {
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
}
},
"form": [
"a",
"b"
]
}
},
"$ref": "#/$defs/base",
"properties": {
"a": {
"type": "string"
},
"b": {
"c": {
"type": "string"
}
},
"form": [
"a",
"b"
"c"
]
}
},
"$ref": "#/$defs/base",
"properties": {
"c": {
"type": "string"
}
},
"form": [
"c"
]
},
"tests": [

View File

@ -1,10 +1,14 @@
[
{
"description": "minContains without contains is ignored",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minContains": 1,
"extensible": true
}
]
},
"tests": [
{
@ -23,13 +27,17 @@
},
{
"description": "minContains=1 with contains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"extensible": true
}
]
},
"tests": [
{
@ -71,13 +79,17 @@
},
{
"description": "minContains=2 with contains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 2,
"extensible": true
}
]
},
"tests": [
{
@ -130,13 +142,17 @@
},
{
"description": "minContains=2 with contains with a decimal value",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 2.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 2.0,
"extensible": true
}
]
},
"tests": [
{
@ -158,14 +174,18 @@
},
{
"description": "maxContains = minContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 2,
"minContains": 2,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 2,
"minContains": 2,
"extensible": true
}
]
},
"tests": [
{
@ -201,14 +221,18 @@
},
{
"description": "maxContains < minContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"minContains": 3,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"maxContains": 1,
"minContains": 3,
"extensible": true
}
]
},
"tests": [
{
@ -244,13 +268,17 @@
},
{
"description": "minContains = 0",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 0,
"extensible": true
}
]
},
"tests": [
{
@ -269,14 +297,18 @@
},
{
"description": "minContains = 0 with maxContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 0,
"maxContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 0,
"maxContains": 1,
"extensible": true
}
]
},
"tests": [
{
@ -303,13 +335,17 @@
},
{
"description": "extensible: true allows non-matching items in minContains",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"contains": {
"const": 1
},
"minContains": 1,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,10 +1,14 @@
[
{
"description": "minItems validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1,
"extensible": true
}
]
},
"tests": [
{
@ -36,10 +40,14 @@
},
{
"description": "minItems validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1.0,
"extensible": true
}
]
},
"tests": [
{
@ -59,10 +67,14 @@
},
{
"description": "extensible: true allows extra items in minItems",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 1,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "minLength validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minLength": 2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minLength": 2
}
]
},
"tests": [
{
@ -35,9 +39,13 @@
},
{
"description": "minLength validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minLength": 2.0
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minLength": 2.0
}
]
},
"tests": [
{
@ -52,4 +60,4 @@
}
]
}
]
]

View File

@ -1,10 +1,14 @@
[
{
"description": "minProperties validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1,
"extensible": true
}
]
},
"tests": [
{
@ -46,10 +50,14 @@
},
{
"description": "minProperties validation with a decimal",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1.0,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1.0,
"extensible": true
}
]
},
"tests": [
{
@ -69,10 +77,14 @@
},
{
"description": "extensible: true allows extra properties in minProperties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minProperties": 1,
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "minimum validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minimum": 1.1
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minimum": 1.1
}
]
},
"tests": [
{
@ -30,9 +34,13 @@
},
{
"description": "minimum validation with signed integer",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minimum": -2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minimum": -2
}
]
},
"tests": [
{
@ -72,4 +80,4 @@
}
]
}
]
]

View File

@ -1,9 +1,13 @@
[
{
"description": "by int",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 2
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 2
}
]
},
"tests": [
{
@ -25,9 +29,13 @@
},
{
"description": "by number",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 1.5
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 1.5
}
]
},
"tests": [
{
@ -49,9 +57,13 @@
},
{
"description": "by small number",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 0.0001
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"multipleOf": 0.0001
}
]
},
"tests": [
{
@ -68,10 +80,14 @@
},
{
"description": "small multiple of large integer",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer",
"multipleOf": 1e-8
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer",
"multipleOf": 1e-8
}
]
},
"tests": [
{

View File

@ -1,11 +1,15 @@
[
{
"description": "not",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
}
}
]
},
"tests": [
{
@ -22,14 +26,18 @@
},
{
"description": "not multiple types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": [
"integer",
"boolean"
]
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": [
"integer",
"boolean"
]
}
}
]
},
"tests": [
{
@ -51,17 +59,21 @@
},
{
"description": "not more complex schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "object",
"properties": {
"foo": {
"type": "string"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "object",
"properties": {
"foo": {
"type": "string"
}
}
},
"extensible": true
}
},
"extensible": true
]
},
"tests": [
{
@ -87,13 +99,17 @@
},
{
"description": "forbidden property",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"not": {}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"not": {}
}
}
}
}
]
},
"tests": [
{
@ -113,9 +129,13 @@
},
{
"description": "forbid everything with empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {}
}
]
},
"tests": [
{
@ -171,9 +191,13 @@
},
{
"description": "forbid everything with boolean schema true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": true
}
]
},
"tests": [
{
@ -229,10 +253,14 @@
},
{
"description": "allow everything with boolean schema false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": false,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": false,
"extensible": true
}
]
},
"tests": [
{
@ -288,11 +316,15 @@
},
{
"description": "double negation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"not": {}
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"not": {}
}
}
]
},
"tests": [
{
@ -304,12 +336,16 @@
},
{
"description": "extensible: true allows extra properties in not",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
},
"extensible": true
}
]
},
"tests": [
{
@ -323,11 +359,15 @@
},
{
"description": "extensible: false (default) forbids extra properties in not",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"not": {
"type": "integer"
}
}
]
},
"tests": [
{
@ -341,17 +381,21 @@
},
{
"description": "property next to not (extensible: true)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "string"
}
},
"not": {
"type": "integer"
},
"extensible": true
}
},
"not": {
"type": "integer"
},
"extensible": true
]
},
"tests": [
{
@ -366,16 +410,20 @@
},
{
"description": "property next to not (extensible: false)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"bar": {
"type": "string"
}
},
"not": {
"type": "integer"
}
}
},
"not": {
"type": "integer"
}
]
},
"tests": [
{

View File

@ -1,14 +1,18 @@
[
{
"description": "oneOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"type": "integer"
},
{
"minimum": 2
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "integer"
},
{
"minimum": 2
}
]
}
]
},
@ -37,15 +41,19 @@
},
{
"description": "oneOf with base schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"oneOf": [
"database": {
"schemas": [
{
"minLength": 2
},
{
"maxLength": 4
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string",
"oneOf": [
{
"minLength": 2
},
{
"maxLength": 4
}
]
}
]
},
@ -69,12 +77,16 @@
},
{
"description": "oneOf with boolean schemas, all true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
true,
true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
true,
true
]
}
]
},
"tests": [
@ -87,12 +99,16 @@
},
{
"description": "oneOf with boolean schemas, one true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
false,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
false,
false
]
}
]
},
"tests": [
@ -105,12 +121,16 @@
},
{
"description": "oneOf with boolean schemas, more than one true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
true,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
true,
true,
false
]
}
]
},
"tests": [
@ -123,12 +143,16 @@
},
{
"description": "oneOf with boolean schemas, all false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
false,
false,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
false,
false,
false
]
}
]
},
"tests": [
@ -141,27 +165,31 @@
},
{
"description": "oneOf complex types",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"properties": {
"bar": {
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"properties": {
"bar": {
"type": "integer"
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
]
@ -201,13 +229,17 @@
},
{
"description": "oneOf with empty schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"type": "number"
},
{}
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "number"
},
{}
]
}
]
},
"tests": [
@ -225,25 +257,29 @@
},
{
"description": "oneOf with required",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"foo": true,
"bar": true,
"baz": true
},
"oneOf": [
"database": {
"schemas": [
{
"required": [
"foo",
"bar"
]
},
{
"required": [
"foo",
"baz"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"foo": true,
"bar": true,
"baz": true
},
"oneOf": [
{
"required": [
"foo",
"bar"
]
},
{
"required": [
"foo",
"baz"
]
}
]
}
]
@ -294,21 +330,25 @@
},
{
"description": "oneOf with required (extensible)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"extensible": true,
"oneOf": [
"database": {
"schemas": [
{
"required": [
"foo",
"bar"
]
},
{
"required": [
"foo",
"baz"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"extensible": true,
"oneOf": [
{
"required": [
"foo",
"bar"
]
},
{
"required": [
"foo",
"baz"
]
}
]
}
]
@ -359,24 +399,28 @@
},
{
"description": "oneOf with missing optional property",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"properties": {
"bar": true,
"baz": true
},
"required": [
"bar"
]
},
{
"properties": {
"foo": true
},
"required": [
"foo"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"properties": {
"bar": true,
"baz": true
},
"required": [
"bar"
]
},
{
"properties": {
"foo": true
},
"required": [
"foo"
]
}
]
}
]
@ -415,13 +459,17 @@
},
{
"description": "nested oneOf, to check validation semantics",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "null"
"oneOf": [
{
"type": "null"
}
]
}
]
}
@ -442,31 +490,35 @@
},
{
"description": "extensible: true allows extra properties in oneOf",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
"database": {
"schemas": [
{
"properties": {
"bar": {
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"properties": {
"bar": {
"type": "integer"
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
}
},
"required": [
"bar"
]
},
{
"properties": {
"foo": {
"type": "string"
}
},
"required": [
"foo"
]
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "pattern validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"pattern": "^a*$"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"pattern": "^a*$"
}
]
},
"tests": [
{
@ -50,9 +54,13 @@
},
{
"description": "pattern is not anchored",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"pattern": "a+"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"pattern": "a+"
}
]
},
"tests": [
{
@ -62,4 +70,4 @@
}
]
}
]
]

View File

@ -1,14 +1,18 @@
[
{
"description": "patternProperties validates properties matching a regex",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*o": {
"type": "integer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*o": {
"type": "integer"
}
},
"items": {}
}
},
"items": {}
]
},
"tests": [
{
@ -71,16 +75,20 @@
},
{
"description": "multiple simultaneous patternProperties are validated",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"a*": {
"type": "integer"
},
"aaa*": {
"maximum": 20
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"a*": {
"type": "integer"
},
"aaa*": {
"maximum": 20
}
}
}
}
]
},
"tests": [
{
@ -131,17 +139,21 @@
},
{
"description": "regexes are not anchored by default and are case sensitive",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"[0-9]{2,}": {
"type": "boolean"
},
"X_": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"[0-9]{2,}": {
"type": "boolean"
},
"X_": {
"type": "string"
}
},
"extensible": true
}
},
"extensible": true
]
},
"tests": [
{
@ -176,12 +188,16 @@
},
{
"description": "patternProperties with boolean schemas",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*": true,
"b.*": false
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*": true,
"b.*": false
}
}
]
},
"tests": [
{
@ -222,13 +238,17 @@
},
{
"description": "patternProperties with null valued instance properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"^.*bar$": {
"type": "null"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"^.*bar$": {
"type": "null"
}
}
}
}
]
},
"tests": [
{
@ -242,14 +262,18 @@
},
{
"description": "extensible: true allows extra properties NOT matching pattern",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*o": {
"type": "integer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"patternProperties": {
"f.*o": {
"type": "integer"
}
},
"extensible": true
}
},
"extensible": true
]
},
"tests": [
{

View File

@ -1,14 +1,18 @@
[
{
"description": "a schema given for prefixItems",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "integer"
},
{
"type": "string"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "integer"
},
{
"type": "string"
}
]
}
]
},
@ -63,11 +67,15 @@
},
{
"description": "prefixItems with boolean schemas",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
true,
false
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
true,
false
]
}
]
},
"tests": [
@ -95,14 +103,18 @@
},
{
"description": "additional items are allowed by default",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "integer"
}
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{
@ -118,11 +130,15 @@
},
{
"description": "prefixItems with null instance elements",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "null"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "null"
}
]
}
]
},
@ -138,14 +154,18 @@
},
{
"description": "extensible: true allows extra items with prefixItems",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "integer"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "integer"
}
],
"extensible": true
}
],
"extensible": true
]
},
"tests": [
{

View File

@ -1,16 +1,20 @@
[
{
"description": "object properties validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "integer"
},
"bar": {
"type": "string"
}
}
}
}
]
},
"tests": [
{
@ -56,12 +60,16 @@
},
{
"description": "properties with boolean schema",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": true,
"bar": false
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": true,
"bar": false
}
}
]
},
"tests": [
{
@ -95,28 +103,32 @@
},
{
"description": "properties with escaped characters",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo\nbar": {
"type": "number"
},
"foo\"bar": {
"type": "number"
},
"foo\\bar": {
"type": "number"
},
"foo\rbar": {
"type": "number"
},
"foo\tbar": {
"type": "number"
},
"foo\fbar": {
"type": "number"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo\nbar": {
"type": "number"
},
"foo\"bar": {
"type": "number"
},
"foo\\bar": {
"type": "number"
},
"foo\rbar": {
"type": "number"
},
"foo\tbar": {
"type": "number"
},
"foo\fbar": {
"type": "number"
}
}
}
}
]
},
"tests": [
{
@ -147,13 +159,17 @@
},
{
"description": "properties with null valued instance properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "null"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "null"
}
}
}
}
]
},
"tests": [
{
@ -168,23 +184,27 @@
{
"description": "properties whose names are Javascript object property names",
"comment": "Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object.",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"__proto__": {
"type": "number"
},
"toString": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"length": {
"type": "string"
"__proto__": {
"type": "number"
},
"toString": {
"properties": {
"length": {
"type": "string"
}
}
},
"constructor": {
"type": "number"
}
}
},
"constructor": {
"type": "number"
}
}
]
},
"tests": [
{
@ -242,14 +262,18 @@
},
{
"description": "extensible: true allows extra properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "integer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "integer"
}
},
"extensible": true
}
},
"extensible": true
]
},
"tests": [
{
@ -264,13 +288,17 @@
},
{
"description": "strict by default: extra properties invalid",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
}
}
}
}
]
},
"tests": [
{
@ -285,17 +313,21 @@
},
{
"description": "inheritance: nested object inherits strictness from strict parent",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"nested": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
"nested": {
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
]
},
"tests": [
{
@ -312,18 +344,22 @@
},
{
"description": "override: nested object allows extra properties if extensible: true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"nested": {
"extensible": true,
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {
"type": "string"
"nested": {
"extensible": true,
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
]
},
"tests": [
{
@ -340,18 +376,22 @@
},
{
"description": "inheritance: nested object inherits looseness from loose parent",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"nested": {
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"foo": {
"type": "string"
"nested": {
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
]
},
"tests": [
{
@ -368,19 +408,23 @@
},
{
"description": "override: nested object enforces strictness if extensible: false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"nested": {
"extensible": false,
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"foo": {
"type": "string"
"nested": {
"extensible": false,
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
]
},
"tests": [
{
@ -397,20 +441,24 @@
},
{
"description": "arrays: inline items inherit strictness from strict parent",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"list": {
"type": "array",
"items": {
"properties": {
"foo": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"list": {
"type": "array",
"items": {
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
}
]
},
"tests": [
{
@ -429,21 +477,25 @@
},
{
"description": "arrays: inline items inherit looseness from loose parent",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"list": {
"type": "array",
"items": {
"properties": {
"foo": {
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"extensible": true,
"properties": {
"list": {
"type": "array",
"items": {
"properties": {
"foo": {
"type": "string"
}
}
}
}
}
}
}
]
},
"tests": [
{

View File

@ -1,12 +1,16 @@
[
{
"description": "propertyNames validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"maxLength": 3
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"maxLength": 3
},
"extensible": true
}
]
},
"tests": [
{
@ -54,12 +58,16 @@
},
{
"description": "propertyNames validation with pattern",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"pattern": "^a+$"
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"pattern": "^a+$"
},
"extensible": true
}
]
},
"tests": [
{
@ -87,10 +95,14 @@
},
{
"description": "propertyNames with boolean schema true",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": true,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": true,
"extensible": true
}
]
},
"tests": [
{
@ -109,10 +121,14 @@
},
{
"description": "propertyNames with boolean schema false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": false,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": false,
"extensible": true
}
]
},
"tests": [
{
@ -131,12 +147,16 @@
},
{
"description": "propertyNames with const",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"const": "foo"
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"const": "foo"
},
"extensible": true
}
]
},
"tests": [
{
@ -162,15 +182,19 @@
},
{
"description": "propertyNames with enum",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"enum": [
"foo",
"bar"
]
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"enum": [
"foo",
"bar"
]
},
"extensible": true
}
]
},
"tests": [
{
@ -204,12 +228,16 @@
},
{
"description": "extensible: true allows extra properties (checked by propertyNames)",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"maxLength": 3
},
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"propertyNames": {
"maxLength": 3
},
"extensible": true
}
]
},
"tests": [
{

File diff suppressed because it is too large Load Diff

1186
tests/fixtures/ref.json vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,18 @@
[
{
"description": "required validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {},
"bar": {}
},
"required": [
"foo"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {},
"bar": {}
},
"required": [
"foo"
]
}
]
},
"tests": [
@ -55,11 +59,15 @@
},
{
"description": "required default validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {}
}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {}
}
}
]
},
"tests": [
{
@ -71,12 +79,16 @@
},
{
"description": "required with empty array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {}
},
"required": []
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"foo": {}
},
"required": []
}
]
},
"tests": [
{
@ -88,17 +100,21 @@
},
{
"description": "required with escaped characters",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"foo\nbar",
"foo\"bar",
"foo\\bar",
"foo\rbar",
"foo\tbar",
"foo\fbar"
],
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"foo\nbar",
"foo\"bar",
"foo\\bar",
"foo\rbar",
"foo\tbar",
"foo\fbar"
],
"extensible": true
}
]
},
"tests": [
{
@ -126,14 +142,18 @@
{
"description": "required properties whose names are Javascript object property names",
"comment": "Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object.",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"__proto__",
"toString",
"constructor"
],
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"__proto__",
"toString",
"constructor"
],
"extensible": true
}
]
},
"tests": [
{
@ -191,12 +211,16 @@
},
{
"description": "extensible: true allows extra properties in required",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"foo"
],
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"foo"
],
"extensible": true
}
]
},
"tests": [
{

View File

@ -1,9 +1,13 @@
[
{
"description": "integer type matches integers",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "integer"
}
]
},
"tests": [
{
@ -55,9 +59,13 @@
},
{
"description": "number type matches numbers",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "number"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "number"
}
]
},
"tests": [
{
@ -109,9 +117,13 @@
},
{
"description": "string type matches strings",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "string"
}
]
},
"tests": [
{
@ -163,9 +175,13 @@
},
{
"description": "object type matches objects",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object"
}
]
},
"tests": [
{
@ -207,9 +223,13 @@
},
{
"description": "array type matches arrays",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array"
}
]
},
"tests": [
{
@ -251,9 +271,13 @@
},
{
"description": "boolean type matches booleans",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "boolean"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "boolean"
}
]
},
"tests": [
{
@ -310,9 +334,13 @@
},
{
"description": "null type matches only the null object",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "null"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "null"
}
]
},
"tests": [
{
@ -369,11 +397,15 @@
},
{
"description": "multiple types can be specified in an array",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"integer",
"string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"integer",
"string"
]
}
]
},
"tests": [
@ -416,10 +448,14 @@
},
{
"description": "type as array with one item",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string"
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"string"
]
}
]
},
"tests": [
@ -437,13 +473,17 @@
},
{
"description": "type: array or object",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"array",
"object"
],
"items": {}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"array",
"object"
],
"items": {}
}
]
},
"tests": [
{
@ -479,14 +519,18 @@
},
{
"description": "type: array, object or null",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"array",
"object",
"null"
],
"items": {}
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": [
"array",
"object",
"null"
],
"items": {}
}
]
},
"tests": [
{
@ -522,10 +566,14 @@
},
{
"description": "extensible: true allows extra properties",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"extensible": true
}
]
},
"tests": [
{

343
tests/fixtures/typedRefs.json vendored Normal file
View File

@ -0,0 +1,343 @@
[
{
"description": "Entities extending entities",
"database": {
"types": [
{
"name": "entity",
"hierarchy": [
"entity"
],
"schemas": [
{
"$id": "entity",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"const": "entity"
}
}
}
]
},
{
"name": "organization",
"hierarchy": [
"entity",
"organization"
],
"schemas": [
{
"$id": "organization",
"$ref": "entity",
"properties": {
"name": {
"type": "string"
}
}
}
]
},
{
"name": "person",
"hierarchy": [
"entity",
"organization",
"person"
],
"schemas": [
{
"$id": "person",
"$ref": "organization",
"properties": {
"first_name": {
"type": "string"
}
}
}
]
}
],
"puncs": [
{
"name": "save_org",
"schemas": [
{
"$id": "save_org.request",
"$ref": "organization"
}
]
}
]
},
"tests": [
{
"description": "Valid person against organization schema (implicit type allowance)",
"schema_id": "save_org.request",
"data": {
"id": "1",
"type": "person",
"name": "ACME"
},
"valid": true
},
{
"description": "Valid organization against organization schema",
"schema_id": "save_org.request",
"data": {
"id": "2",
"type": "organization",
"name": "ACME"
},
"valid": true
},
{
"description": "Invalid entity against organization schema (ancestor not allowed)",
"schema_id": "save_org.request",
"data": {
"id": "3",
"type": "entity"
},
"valid": false
},
{
"description": "Invalid generic type against organization schema",
"schema_id": "save_org.request",
"data": {
"id": "4",
"type": "generic_thing"
},
"valid": false
}
]
},
{
"description": "Ad-hocs extending entities (still entities with type magic)",
"database": {
"types": [
{
"name": "entity",
"hierarchy": [
"entity"
],
"schemas": [
{
"$id": "entity",
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"const": "entity"
}
}
}
]
},
{
"name": "person",
"hierarchy": [
"entity",
"person"
],
"schemas": [
{
"$id": "person",
"$ref": "entity",
"properties": {
"first_name": {
"type": "string"
}
}
}
]
}
],
"puncs": [
{
"name": "save_person_light",
"schemas": [
{
"$id": "person.light",
"$ref": "person",
"extensible": false,
"properties": {
"first_name": {
"type": "string"
}
}
},
{
"$id": "save_person_light.request",
"$ref": "person.light"
}
]
}
]
},
"tests": [
{
"description": "Valid person against person.light ad-hoc schema",
"schema_id": "save_person_light.request",
"data": {
"id": "1",
"type": "person",
"first_name": "John"
},
"valid": true
},
{
"description": "Invalid person against person.light (strictness violation)",
"schema_id": "save_person_light.request",
"data": {
"id": "1",
"type": "person",
"first_name": "John",
"extra": "bad"
},
"valid": false
},
{
"description": "Invalid entity against person.light ad-hoc schema (ancestor not allowed)",
"schema_id": "save_person_light.request",
"data": {
"id": "1",
"type": "entity",
"first_name": "John"
},
"valid": false
}
]
},
{
"description": "Ad-hocs extending ad-hocs (No type property)",
"database": {
"puncs": [
{
"name": "save_address",
"schemas": [
{
"$id": "address",
"type": "object",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
}
}
},
{
"$id": "us_address",
"$ref": "address",
"properties": {
"state": {
"type": "string"
},
"zip": {
"type": "string"
}
}
},
{
"$id": "save_address.request",
"$ref": "us_address"
}
]
}
]
},
"tests": [
{
"description": "Valid us_address",
"schema_id": "save_address.request",
"data": {
"street": "123 Main",
"city": "Anytown",
"state": "CA",
"zip": "12345"
},
"valid": true
},
{
"description": "Invalid base address against us_address",
"schema_id": "save_address.request",
"data": {
"street": "123 Main",
"city": "Anytown"
},
"valid": true
}
]
},
{
"description": "Ad-hocs extending ad-hocs (with string type property, no magic)",
"database": {
"puncs": [
{
"name": "save_config",
"schemas": [
{
"$id": "config_base",
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "config_base"
},
"setting": {
"type": "string"
}
}
},
{
"$id": "config_advanced",
"$ref": "config_base",
"properties": {
"type": {
"type": "string",
"const": "config_advanced"
},
"advanced_setting": {
"type": "string"
}
}
},
{
"$id": "save_config.request",
"$ref": "config_base"
}
]
}
]
},
"tests": [
{
"description": "Valid config_base against config_base",
"schema_id": "save_config.request",
"data": {
"type": "config_base",
"setting": "on"
},
"valid": true
},
{
"description": "Invalid config_advanced against config_base (no type magic, const is strictly 'config_base')",
"schema_id": "save_config.request",
"data": {
"type": "config_advanced",
"setting": "on",
"advanced_setting": "off"
},
"valid": false
}
]
}
]

View File

@ -1,10 +1,14 @@
[
{
"description": "uniqueItems validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": true,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": true,
"extensible": true
}
]
},
"tests": [
{
@ -352,18 +356,22 @@
},
{
"description": "uniqueItems with an array of items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "boolean"
},
{
"type": "boolean"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "boolean"
},
{
"type": "boolean"
}
],
"uniqueItems": true,
"extensible": true
}
],
"uniqueItems": true,
"extensible": true
]
},
"tests": [
{
@ -442,18 +450,22 @@
},
{
"description": "uniqueItems with an array of items and additionalItems=false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "boolean"
},
{
"type": "boolean"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "boolean"
},
{
"type": "boolean"
}
],
"uniqueItems": true,
"items": false
}
],
"uniqueItems": true,
"items": false
]
},
"tests": [
{
@ -501,10 +513,14 @@
},
{
"description": "uniqueItems=false validation",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": false,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": false,
"extensible": true
}
]
},
"tests": [
{
@ -683,18 +699,22 @@
},
{
"description": "uniqueItems=false with an array of items",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "boolean"
},
{
"type": "boolean"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "boolean"
},
{
"type": "boolean"
}
],
"uniqueItems": false,
"extensible": true
}
],
"uniqueItems": false,
"extensible": true
]
},
"tests": [
{
@ -773,18 +793,22 @@
},
{
"description": "uniqueItems=false with an array of items and additionalItems=false",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
"database": {
"schemas": [
{
"type": "boolean"
},
{
"type": "boolean"
"$schema": "https://json-schema.org/draft/2020-12/schema",
"prefixItems": [
{
"type": "boolean"
},
{
"type": "boolean"
}
],
"uniqueItems": false,
"items": false
}
],
"uniqueItems": false,
"items": false
]
},
"tests": [
{
@ -832,10 +856,14 @@
},
{
"description": "extensible: true allows extra items in uniqueItems",
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": true,
"extensible": true
"database": {
"schemas": [
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"uniqueItems": true,
"extensible": true
}
]
},
"tests": [
{