Validate keywords that combine schemas with various logical operators. Also add iterators over schemas. Now we only need them to skip some tests, but later they will come in handy for non-test code. Change-Id: Idaf41efea4d693b6be0ee5c6c3a527664b8c472f Reviewed-on: https://go-review.googlesource.com/c/tools/+/668115 Reviewed-by: Alan Donovan <adonovan@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
312 lines
8.5 KiB
JSON
312 lines
8.5 KiB
JSON
[
|
|
{
|
|
"description": "allOf",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{
|
|
"properties": {
|
|
"bar": {"type": "integer"}
|
|
},
|
|
"required": ["bar"]
|
|
},
|
|
{
|
|
"properties": {
|
|
"foo": {"type": "string"}
|
|
},
|
|
"required": ["foo"]
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "allOf",
|
|
"data": {"foo": "baz", "bar": 2},
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "mismatch second",
|
|
"data": {"foo": "baz"},
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "mismatch first",
|
|
"data": {"bar": 2},
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "wrong type",
|
|
"data": {"foo": "baz", "bar": "quux"},
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with base schema",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"properties": {"bar": {"type": "integer"}},
|
|
"required": ["bar"],
|
|
"allOf" : [
|
|
{
|
|
"properties": {
|
|
"foo": {"type": "string"}
|
|
},
|
|
"required": ["foo"]
|
|
},
|
|
{
|
|
"properties": {
|
|
"baz": {"type": "null"}
|
|
},
|
|
"required": ["baz"]
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "valid",
|
|
"data": {"foo": "quux", "bar": 2, "baz": null},
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "mismatch base schema",
|
|
"data": {"foo": "quux", "baz": null},
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "mismatch first allOf",
|
|
"data": {"bar": 2, "baz": null},
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "mismatch second allOf",
|
|
"data": {"foo": "quux", "bar": 2},
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "mismatch both",
|
|
"data": {"bar": 2},
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf simple types",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{"maximum": 30},
|
|
{"minimum": 20}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "valid",
|
|
"data": 25,
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "mismatch one",
|
|
"data": 35,
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with boolean schemas, all true",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [true, true]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "any value is valid",
|
|
"data": "foo",
|
|
"valid": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with boolean schemas, some false",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [true, false]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "any value is invalid",
|
|
"data": "foo",
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with boolean schemas, all false",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [false, false]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "any value is invalid",
|
|
"data": "foo",
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with one empty schema",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "any data is valid",
|
|
"data": 1,
|
|
"valid": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with two empty schemas",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{},
|
|
{}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "any data is valid",
|
|
"data": 1,
|
|
"valid": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with the first empty schema",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{},
|
|
{ "type": "number" }
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "number is valid",
|
|
"data": 1,
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "string is invalid",
|
|
"data": "foo",
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf with the last empty schema",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{ "type": "number" },
|
|
{}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "number is valid",
|
|
"data": 1,
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "string is invalid",
|
|
"data": "foo",
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "nested allOf, to check validation semantics",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [
|
|
{
|
|
"allOf": [
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "null is valid",
|
|
"data": null,
|
|
"valid": true
|
|
},
|
|
{
|
|
"description": "anything non-null is invalid",
|
|
"data": 123,
|
|
"valid": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "allOf combined with anyOf, oneOf",
|
|
"schema": {
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"allOf": [ { "multipleOf": 2 } ],
|
|
"anyOf": [ { "multipleOf": 3 } ],
|
|
"oneOf": [ { "multipleOf": 5 } ]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "allOf: false, anyOf: false, oneOf: false",
|
|
"data": 1,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: false, anyOf: false, oneOf: true",
|
|
"data": 5,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: false, anyOf: true, oneOf: false",
|
|
"data": 3,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: false, anyOf: true, oneOf: true",
|
|
"data": 15,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: true, anyOf: false, oneOf: false",
|
|
"data": 2,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: true, anyOf: false, oneOf: true",
|
|
"data": 10,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: true, anyOf: true, oneOf: false",
|
|
"data": 6,
|
|
"valid": false
|
|
},
|
|
{
|
|
"description": "allOf: true, anyOf: true, oneOf: true",
|
|
"data": 30,
|
|
"valid": true
|
|
}
|
|
]
|
|
}
|
|
]
|