diff --git a/test-schema.json b/test-schema.json index 503b880b..670d2804 100644 --- a/test-schema.json +++ b/test-schema.json @@ -1,5 +1,27 @@ { "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": { + "outputItem": { + "type": "object", + "properties": { + "valid": {"type": "boolean"}, + "keywordLocation": {"type": "string"}, + "absoluteKeywordLocation": { + "type": "string", + "format": "uri" + }, + "instanceLocation": {"type": "string"}, + "annotations": { + "type": "array", + "items": {"$ref": "#/definitions/outputItem"} + }, + "errors": { + "type": "array", + "items": {"$ref": "#/definitions/outputItem"} + } + } + } + }, "type": "array", "items": { "type": "object", @@ -16,7 +38,15 @@ "description": {"type": "string"}, "data": {}, "valid": {"type": "boolean"}, - "output": {} + "output": { + "type": "object", + "properties": { + "basic": {"$ref": "#/definitions/outputItem"}, + "detailed": {"$ref": "#/definitions/outputItem"}, + "verbose": {"$ref": "#/definitions/outputItem"} + }, + "required": ["basic", "detailed", "verbose"] + } }, "additionalProperties": false }, diff --git a/tests/draft2019-06/additionalItems.json b/tests/draft2019-06/additionalItems.json index abecc578..1ac75057 100644 --- a/tests/draft2019-06/additionalItems.json +++ b/tests/draft2019-06/additionalItems.json @@ -1,87 +1,500 @@ [ - { - "description": "additionalItems as schema", - "schema": { - "items": [{}], - "additionalItems": {"type": "integer"} - }, - "tests": [ - { - "description": "additional items match schema", - "data": [ null, 2, 3, 4 ], - "valid": true - }, - { - "description": "additional items do not match schema", - "data": [ null, 2, 3, "foo" ], - "valid": false - } - ] - }, - { - "description": "items is schema, no additionalItems", - "schema": { - "items": {}, - "additionalItems": false - }, - "tests": [ - { - "description": "all items match schema", - "data": [ 1, 2, 3, 4, 5 ], - "valid": true - } - ] - }, - { - "description": "array of items with no additionalItems", - "schema": { - "items": [{}, {}, {}], - "additionalItems": false - }, - "tests": [ - { - "description": "fewer number of items present", - "data": [ 1, 2 ], - "valid": true - }, - { - "description": "equal number of items present", - "data": [ 1, 2, 3 ], - "valid": true - }, - { - "description": "additional items are not permitted", - "data": [ 1, 2, 3, 4 ], - "valid": false - } - ] - }, - { - "description": "additionalItems as false without items", - "schema": {"additionalItems": false}, - "tests": [ - { - "description": - "items defaults to empty schema so everything is valid", - "data": [ 1, 2, 3, 4, 5 ], - "valid": true - }, - { - "description": "ignores non-arrays", - "data": {"foo" : "bar"}, - "valid": true - } - ] - }, - { - "description": "additionalItems are allowed by default", - "schema": {"items": [{"type": "integer"}]}, - "tests": [ - { - "description": "only the first item is validated", - "data": [1, "foo", false], - "valid": true - } - ] - } -] + { + "description": "additionalItems as schema", + "schema": {"items": [{}], "additionalItems": {"type": "integer"}}, + "tests": [ + { + "description": "additional items match schema", + "data": [null, 2, 3, 4], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "additional items do not match schema", + "data": [null, 2, 3, "foo"], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/2" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/2" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#/2", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalItems/type", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "items is schema, no additionalItems", + "schema": {"items": {}, "additionalItems": false}, + "tests": [ + { + "description": "all items match schema", + "data": [1, 2, 3, 4, 5], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/3" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/4" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "array of items with no additionalItems", + "schema": {"items": [{}, {}, {}], "additionalItems": false}, + "tests": [ + { + "description": "fewer number of items present", + "data": [1, 2], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "equal number of items present", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2", + "instanceLocation": "#/2" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "additional items are not permitted", + "data": [1, 2, 3, 4], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2", + "instanceLocation": "#/2" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "additionalItems as false without items", + "schema": {"additionalItems": false}, + "tests": [ + { + "description": "items defaults to empty schema so everything is valid", + "data": [1, 2, 3, 4, 5], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-arrays", + "data": {"foo": "bar"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "additionalItems are allowed by default", + "schema": {"items": [{"type": "integer"}]}, + "tests": [ + { + "description": "only the first item is validated", + "data": [1, "foo", false], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/additionalProperties.json b/tests/draft2019-06/additionalProperties.json index ffeac6b3..65d7e99c 100644 --- a/tests/draft2019-06/additionalProperties.json +++ b/tests/draft2019-06/additionalProperties.json @@ -1,133 +1,759 @@ [ - { - "description": - "additionalProperties being false does not allow other properties", - "schema": { - "properties": {"foo": {}, "bar": {}}, - "patternProperties": { "^v": {} }, - "additionalProperties": false - }, - "tests": [ - { - "description": "no additional properties is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "an additional property is invalid", - "data": {"foo" : 1, "bar" : 2, "quux" : "boom"}, - "valid": false - }, - { - "description": "ignores arrays", - "data": [1, 2, 3], - "valid": true - }, - { - "description": "ignores strings", - "data": "foobarbaz", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - }, - { - "description": "patternProperties are not additional properties", - "data": {"foo":1, "vroom": 2}, - "valid": true - } - ] + { + "description": "additionalProperties being false does not allow other properties", + "schema": { + "properties": {"foo": {}, "bar": {}}, + "patternProperties": {"^v": {}}, + "additionalProperties": false }, - { - "description": "non-ASCII pattern with additionalProperties", - "schema": { - "patternProperties": {"^á": {}}, - "additionalProperties": false - }, - "tests": [ - { - "description": "matching the pattern is valid", - "data": {"ármányos": 2}, - "valid": true - }, - { - "description": "not matching the pattern is invalid", - "data": {"élmény": 2}, - "valid": false - } - ] + "tests": [ + { + "description": "no additional properties is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an additional property is invalid", + "data": {"foo": 1, "bar": 2, "quux": "boom"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "foobarbaz", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "patternProperties are not additional properties", + "data": {"foo": 1, "vroom": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/^v", + "instanceLocation": "#/vroom" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "non-ASCII pattern with additionalProperties", + "schema": {"patternProperties": {"^á": {}}, "additionalProperties": false}, + "tests": [ + { + "description": "matching the pattern is valid", + "data": {"ármányos": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/^á", + "instanceLocation": "#/ármányos" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not matching the pattern is invalid", + "data": {"élmény": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "additionalProperties allows a schema which should validate", + "schema": { + "properties": {"foo": {}, "bar": {}}, + "additionalProperties": {"type": "boolean"} }, - { - "description": - "additionalProperties allows a schema which should validate", - "schema": { - "properties": {"foo": {}, "bar": {}}, - "additionalProperties": {"type": "boolean"} - }, - "tests": [ - { - "description": "no additional properties is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "an additional valid property is valid", - "data": {"foo" : 1, "bar" : 2, "quux" : true}, - "valid": true - }, - { - "description": "an additional invalid property is invalid", - "data": {"foo" : 1, "bar" : 2, "quux" : 12}, - "valid": false - } - ] + "tests": [ + { + "description": "no additional properties is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an additional valid property is valid", + "data": {"foo": 1, "bar": 2, "quux": true}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/quux", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "an additional invalid property is invalid", + "data": {"foo": 1, "bar": 2, "quux": 12}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/quux", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "additionalProperties can exist by itself", + "schema": {"additionalProperties": {"type": "boolean"}}, + "tests": [ + { + "description": "an additional valid property is valid", + "data": {"foo": true}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "an additional invalid property is invalid", + "data": {"foo": 1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "additionalProperties are allowed by default", + "schema": {"properties": {"foo": {}, "bar": {}}}, + "tests": [ + { + "description": "additional properties are allowed", + "data": {"foo": 1, "bar": 2, "quux": true}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "additionalProperties should not look in applicators", + "schema": { + "allOf": [{"properties": {"foo": {}}}], + "additionalProperties": {"type": "boolean"} }, - { - "description": - "additionalProperties can exist by itself", - "schema": { - "additionalProperties": {"type": "boolean"} - }, - "tests": [ - { - "description": "an additional valid property is valid", - "data": {"foo" : true}, - "valid": true - }, - { - "description": "an additional invalid property is invalid", - "data": {"foo" : 1}, - "valid": false - } - ] - }, - { - "description": "additionalProperties are allowed by default", - "schema": {"properties": {"foo": {}, "bar": {}}}, - "tests": [ - { - "description": "additional properties are allowed", - "data": {"foo": 1, "bar": 2, "quux": true}, - "valid": true - } - ] - }, - { - "description": "additionalProperties should not look in applicators", - "schema": { - "allOf": [ - {"properties": {"foo": {}}} - ], - "additionalProperties": {"type": "boolean"} - }, - "tests": [ - { - "description": "properties defined in allOf are not allowed", - "data": {"foo": 1, "bar": true}, - "valid": false - } - ] - } -] + "tests": [ + { + "description": "properties defined in allOf are not allowed", + "data": {"foo": 1, "bar": true}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/allOf.json b/tests/draft2019-06/allOf.json index eb612091..04a0cf62 100644 --- a/tests/draft2019-06/allOf.json +++ b/tests/draft2019-06/allOf.json @@ -1,218 +1,1489 @@ [ - { - "description": "allOf", - "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": { - "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": { - "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": {"allOf": [true, true]}, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "allOf with boolean schemas, some false", - "schema": {"allOf": [true, false]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] + { + "description": "allOf", + "schema": { + "allOf": [ + {"properties": {"bar": {"type": "integer"}}, "required": ["bar"]}, + {"properties": {"foo": {"type": "string"}}, "required": ["foo"]} + ] }, - { - "description": "allOf with boolean schemas, all false", - "schema": {"allOf": [false, false]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "allOf with one empty schema", - "schema": { - "allOf": [ - {} - ] - }, - "tests": [ - { - "description": "any data is valid", - "data": 1, - "valid": true - } - ] - }, - { - "description": "allOf with two empty schemas", - "schema": { - "allOf": [ - {}, - {} - ] - }, - "tests": [ - { - "description": "any data is valid", - "data": 1, - "valid": true - } - ] - }, - { - "description": "allOf with the first empty schema", - "schema": { - "allOf": [ - {}, - { "type": "number" } - ] - }, - "tests": [ - { - "description": "number is valid", - "data": 1, - "valid": true - }, - { - "description": "string is invalid", - "data": "foo", - "valid": false - } - ] + "tests": [ + { + "description": "allOf", + "data": {"foo": "baz", "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch second", + "data": {"foo": "baz"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch first", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "wrong type", + "data": {"foo": "baz", "bar": "quux"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with base schema", + "schema": { + "properties": {"bar": {"type": "integer"}}, + "required": ["bar"], + "allOf": [ + {"properties": {"foo": {"type": "string"}}, "required": ["foo"]}, + {"properties": {"baz": {"type": "null"}}, "required": ["baz"]} + ] }, - { - "description": "allOf with the last empty schema", - "schema": { - "allOf": [ - { "type": "number" }, - {} - ] - }, - "tests": [ - { - "description": "number is valid", - "data": 1, - "valid": true - }, - { - "description": "string is invalid", - "data": "foo", - "valid": false - } - ] - } -] + "tests": [ + { + "description": "valid", + "data": {"foo": "quux", "bar": 2, "baz": null}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz", + "instanceLocation": "#/baz", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz/type", + "instanceLocation": "#/baz" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch base schema", + "data": {"foo": "quux", "baz": null}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz", + "instanceLocation": "#/baz", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz/type", + "instanceLocation": "#/baz" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch first allOf", + "data": {"bar": 2, "baz": null}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz", + "instanceLocation": "#/baz", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties/baz/type", + "instanceLocation": "#/baz" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch second allOf", + "data": {"foo": "quux", "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch both", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf simple types", + "schema": {"allOf": [{"maximum": 30}, {"minimum": 20}]}, + "tests": [ + { + "description": "valid", + "data": 25, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/maximum", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch one", + "data": 35, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/maximum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/maximum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/maximum", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with boolean schemas, all true", + "schema": {"allOf": [true, true]}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with boolean schemas, some false", + "schema": {"allOf": [true, false]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with boolean schemas, all false", + "schema": {"allOf": [false, false]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with one empty schema", + "schema": {"allOf": [{}]}, + "tests": [ + { + "description": "any data is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with two empty schemas", + "schema": {"allOf": [{}, {}]}, + "tests": [ + { + "description": "any data is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with the first empty schema", + "schema": {"allOf": [{}, {"type": "number"}]}, + "tests": [ + { + "description": "number is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/1/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "string is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/1/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/1/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/1/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "allOf with the last empty schema", + "schema": {"allOf": [{"type": "number"}, {}]}, + "tests": [ + { + "description": "number is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "string is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/anyOf.json b/tests/draft2019-06/anyOf.json index bad3e77f..f4f6015d 100644 --- a/tests/draft2019-06/anyOf.json +++ b/tests/draft2019-06/anyOf.json @@ -1,163 +1,1120 @@ [ - { - "description": "anyOf", - "schema": { - "anyOf": [ - { - "type": "integer" - }, - { - "minimum": 2 - } - ] - }, - "tests": [ - { - "description": "first anyOf valid", - "data": 1, - "valid": true - }, - { - "description": "second anyOf valid", - "data": 2.5, - "valid": true - }, - { - "description": "both anyOf valid", - "data": 3, - "valid": true - }, - { - "description": "neither anyOf valid", - "data": 1.5, - "valid": false - } - ] - }, - { - "description": "anyOf with base schema", - "schema": { - "type": "string", - "anyOf" : [ - { - "maxLength": 2 - }, - { - "minLength": 4 - } - ] - }, - "tests": [ - { - "description": "mismatch base schema", - "data": 3, - "valid": false - }, - { - "description": "one anyOf valid", - "data": "foobar", - "valid": true - }, - { - "description": "both anyOf invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "anyOf with boolean schemas, all true", - "schema": {"anyOf": [true, true]}, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "anyOf with boolean schemas, some true", - "schema": {"anyOf": [true, false]}, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "anyOf with boolean schemas, all false", - "schema": {"anyOf": [false, false]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "anyOf complex types", - "schema": { - "anyOf": [ - { - "properties": { - "bar": {"type": "integer"} - }, - "required": ["bar"] - }, - { - "properties": { - "foo": {"type": "string"} - }, - "required": ["foo"] - } - ] - }, - "tests": [ - { - "description": "first anyOf valid (complex)", - "data": {"bar": 2}, - "valid": true - }, - { - "description": "second anyOf valid (complex)", - "data": {"foo": "baz"}, - "valid": true - }, - { - "description": "both anyOf valid (complex)", - "data": {"foo": "baz", "bar": 2}, - "valid": true - }, - { - "description": "neither anyOf valid (complex)", - "data": {"foo": 2, "bar": "quux"}, - "valid": false - } - ] + { + "description": "anyOf", + "schema": {"anyOf": [{"type": "integer"}, {"minimum": 2}]}, + "tests": [ + { + "description": "first anyOf valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "second anyOf valid", + "data": 2.5, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both anyOf valid", + "data": 3, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "neither anyOf valid", + "data": 1.5, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf with base schema", + "schema": {"type": "string", "anyOf": [{"maxLength": 2}, {"minLength": 4}]}, + "tests": [ + { + "description": "mismatch base schema", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/maxLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/minLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "one anyOf valid", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/maxLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/minLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both anyOf invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/0/maxLength", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/minLength", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/maxLength", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/minLength", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/maxLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/minLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf with boolean schemas, all true", + "schema": {"anyOf": [true, true]}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf with boolean schemas, some true", + "schema": {"anyOf": [true, false]}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf with boolean schemas, all false", + "schema": {"anyOf": [false, false]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf complex types", + "schema": { + "anyOf": [ + {"properties": {"bar": {"type": "integer"}}, "required": ["bar"]}, + {"properties": {"foo": {"type": "string"}}, "required": ["foo"]} + ] }, - { - "description": "anyOf with one empty schema", - "schema": { - "anyOf": [ - { "type": "number" }, - {} - ] - }, - "tests": [ - { - "description": "string is valid", - "data": "foo", - "valid": true - }, - { - "description": "number is valid", - "data": 123, - "valid": true - } - ] - } -] + "tests": [ + { + "description": "first anyOf valid (complex)", + "data": {"bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "second anyOf valid (complex)", + "data": {"foo": "baz"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both anyOf valid (complex)", + "data": {"foo": "baz", "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "neither anyOf valid (complex)", + "data": {"foo": 2, "bar": "quux"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "anyOf with one empty schema", + "schema": {"anyOf": [{"type": "number"}, {}]}, + "tests": [ + { + "description": "string is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "number is valid", + "data": 123, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/anyOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/anyOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/boolean_schema.json b/tests/draft2019-06/boolean_schema.json index 6d40f23f..b038c045 100644 --- a/tests/draft2019-06/boolean_schema.json +++ b/tests/draft2019-06/boolean_schema.json @@ -1,104 +1,418 @@ [ - { - "description": "boolean schema 'true'", - "schema": true, - "tests": [ - { - "description": "number is valid", - "data": 1, - "valid": true - }, - { - "description": "string is valid", - "data": "foo", - "valid": true - }, - { - "description": "boolean true is valid", - "data": true, - "valid": true - }, - { - "description": "boolean false is valid", - "data": false, - "valid": true - }, - { - "description": "null is valid", - "data": null, - "valid": true - }, - { - "description": "object is valid", - "data": {"foo": "bar"}, - "valid": true - }, - { - "description": "empty object is valid", - "data": {}, - "valid": true - }, - { - "description": "array is valid", - "data": ["foo"], - "valid": true - }, - { - "description": "empty array is valid", - "data": [], - "valid": true - } - ] - }, - { - "description": "boolean schema 'false'", - "schema": false, - "tests": [ - { - "description": "number is invalid", - "data": 1, - "valid": false - }, - { - "description": "string is invalid", - "data": "foo", - "valid": false - }, - { - "description": "boolean true is invalid", - "data": true, - "valid": false - }, - { - "description": "boolean false is invalid", - "data": false, - "valid": false - }, - { - "description": "null is invalid", - "data": null, - "valid": false - }, - { - "description": "object is invalid", - "data": {"foo": "bar"}, - "valid": false - }, - { - "description": "empty object is invalid", - "data": {}, - "valid": false - }, - { - "description": "array is invalid", - "data": ["foo"], - "valid": false - }, - { - "description": "empty array is invalid", - "data": [], - "valid": false - } - ] - } -] + { + "description" : "boolean schema 'true'", + "schema" : true, + "tests" : [ + { + "description" : "number is valid", + "data" : 1, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "string is valid", + "data" : "foo", + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "boolean true is valid", + "data" : true, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "boolean false is valid", + "data" : false, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "null is valid", + "data" : null, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "object is valid", + "data" : { + "foo" : "bar" + }, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "empty object is valid", + "data" : {}, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "array is valid", + "data" : [ + "foo" + ], + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "empty array is valid", + "data" : [], + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + } + ] + }, + { + "description" : "boolean schema 'false'", + "schema" : false, + "tests" : [ + { + "description" : "number is invalid", + "data" : 1, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "string is invalid", + "data" : "foo", + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "boolean true is invalid", + "data" : true, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "boolean false is invalid", + "data" : false, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "null is invalid", + "data" : null, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "object is invalid", + "data" : { + "foo" : "bar" + }, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "empty object is invalid", + "data" : {}, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "array is invalid", + "data" : [ + "foo" + ], + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + }, + { + "description" : "empty array is invalid", + "data" : [], + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#" + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/const.json b/tests/draft2019-06/const.json index 0fe00f21..02f541b0 100644 --- a/tests/draft2019-06/const.json +++ b/tests/draft2019-06/const.json @@ -1,86 +1,410 @@ [ - { - "description": "const validation", - "schema": {"const": 2}, - "tests": [ - { - "description": "same value is valid", - "data": 2, - "valid": true - }, - { - "description": "another value is invalid", - "data": 5, - "valid": false - }, - { - "description": "another type is invalid", - "data": "a", - "valid": false - } - ] - }, - { - "description": "const with object", - "schema": {"const": {"foo": "bar", "baz": "bax"}}, - "tests": [ - { - "description": "same object is valid", - "data": {"foo": "bar", "baz": "bax"}, - "valid": true - }, - { - "description": "same object with different property order is valid", - "data": {"baz": "bax", "foo": "bar"}, - "valid": true - }, - { - "description": "another object is invalid", - "data": {"foo": "bar"}, - "valid": false - }, - { - "description": "another type is invalid", - "data": [1, 2], - "valid": false - } - ] - }, - { - "description": "const with array", - "schema": {"const": [{ "foo": "bar" }]}, - "tests": [ - { - "description": "same array is valid", - "data": [{"foo": "bar"}], - "valid": true - }, - { - "description": "another array item is invalid", - "data": [2], - "valid": false - }, - { - "description": "array with additional items is invalid", - "data": [1, 2, 3], - "valid": false - } - ] - }, - { - "description": "const with null", - "schema": {"const": null}, - "tests": [ - { - "description": "null is valid", - "data": null, - "valid": true - }, - { - "description": "not null is invalid", - "data": 0, - "valid": false - } - ] - } -] + { + "description" : "const validation", + "schema" : { + "const" : 2 + }, + "tests" : [ + { + "description" : "same value is valid", + "data" : 2, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#", + "annotations" : [ + { + "valid" : true, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "another value is invalid", + "data" : 5, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "another type is invalid", + "data" : "a", + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + } + ] + }, + { + "description" : "const with object", + "schema" : { + "const" : { + "foo" : "bar", + "baz" : "bax" + } + }, + "tests" : [ + { + "description" : "same object is valid", + "data" : { + "foo" : "bar", + "baz" : "bax" + }, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#", + "annotations" : [ + { + "valid" : true, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "same object with different property order is valid", + "data" : { + "baz" : "bax", + "foo" : "bar" + }, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#", + "annotations" : [ + { + "valid" : true, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "another object is invalid", + "data" : { + "foo" : "bar" + }, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "another type is invalid", + "data" : [ + 1, + 2 + ], + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + } + ] + }, + { + "description" : "const with array", + "schema" : { + "const" : [ + { + "foo" : "bar" + } + ] + }, + "tests" : [ + { + "description" : "same array is valid", + "data" : [ + { + "foo" : "bar" + } + ], + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#", + "annotations" : [ + { + "valid" : true, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "another array item is invalid", + "data" : [ + 2 + ], + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "array with additional items is invalid", + "data" : [ + 1, + 2, + 3 + ], + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + } + ] + }, + { + "description" : "const with null", + "schema" : { + "const" : null + }, + "tests" : [ + { + "description" : "null is valid", + "data" : null, + "valid" : true, + "output" : { + "basic" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : true, + "keywordLocation" : "#", + "instanceLocation" : "#", + "annotations" : [ + { + "valid" : true, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + }, + { + "description" : "not null is invalid", + "data" : 0, + "valid" : false, + "output" : { + "basic" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "detailed" : { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + }, + "verbose" : { + "valid" : false, + "keywordLocation" : "#", + "instanceLocation" : "#", + "errors" : [ + { + "valid" : false, + "keywordLocation" : "#/const", + "instanceLocation" : "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/contains.json b/tests/draft2019-06/contains.json index b7ae5a25..5fc00b03 100644 --- a/tests/draft2019-06/contains.json +++ b/tests/draft2019-06/contains.json @@ -1,95 +1,803 @@ [ - { - "description": "contains keyword validation", - "schema": { - "contains": {"minimum": 5} - }, - "tests": [ - { - "description": "array with item matching schema (5) is valid", - "data": [3, 4, 5], - "valid": true - }, - { - "description": "array with item matching schema (6) is valid", - "data": [3, 4, 6], - "valid": true - }, - { - "description": "array with two items matching schema (5, 6) is valid", - "data": [3, 4, 5, 6], - "valid": true - }, - { - "description": "array without items matching schema is invalid", - "data": [2, 3, 4], - "valid": false - }, - { - "description": "empty array is invalid", - "data": [], - "valid": false - }, - { - "description": "not array is valid", - "data": {}, - "valid": true - } - ] - }, - { - "description": "contains keyword with const keyword", - "schema": { - "contains": { "const": 5 } - }, - "tests": [ - { - "description": "array with item 5 is valid", - "data": [3, 4, 5], - "valid": true - }, - { - "description": "array with two items 5 is valid", - "data": [3, 4, 5, 5], - "valid": true - }, - { - "description": "array without item 5 is invalid", - "data": [1, 2, 3, 4], - "valid": false - } - ] - }, - { - "description": "contains keyword with boolean schema true", - "schema": {"contains": true}, - "tests": [ - { - "description": "any non-empty array is valid", - "data": ["foo"], - "valid": true - }, - { - "description": "empty array is invalid", - "data": [], - "valid": false - } - ] - }, - { - "description": "contains keyword with boolean schema false", - "schema": {"contains": false}, - "tests": [ - { - "description": "any non-empty array is invalid", - "data": ["foo"], - "valid": false - }, - { - "description": "empty array is invalid", - "data": [], - "valid": false - } - ] - } -] + { + "description": "contains keyword validation", + "schema": {"contains": {"minimum": 5}}, + "tests": [ + { + "description": "array with item matching schema (5) is valid", + "data": [3, 4, 5], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array with item matching schema (6) is valid", + "data": [3, 4, 6], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array with two items matching schema (5, 6) is valid", + "data": [3, 4, 5, 6], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/3", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/3" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array without items matching schema is invalid", + "data": [2, 3, 4], + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/minimum", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "empty array is invalid", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not array is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "contains keyword with const keyword", + "schema": {"contains": {"const": 5}}, + "tests": [ + { + "description": "array with item 5 is valid", + "data": [3, 4, 5], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array with two items 5 is valid", + "data": [3, 4, 5, 5], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/2" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/3", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/3" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array without item 5 is invalid", + "data": [1, 2, 3, 4], + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/2" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/3" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/2" + }, + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/3" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/2", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/2" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/3", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains/const", + "instanceLocation": "#/3" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "contains keyword with boolean schema true", + "schema": {"contains": true}, + "tests": [ + { + "description": "any non-empty array is valid", + "data": ["foo"], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contains", + "instanceLocation": "#/0" + } + ] + } + ] + } + } + }, + { + "description": "empty array is invalid", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "contains keyword with boolean schema false", + "schema": {"contains": false}, + "tests": [ + { + "description": "any non-empty array is invalid", + "data": ["foo"], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#/0" + } + ] + } + ] + } + } + }, + { + "description": "empty array is invalid", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/contains", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/default.json b/tests/draft2019-06/default.json index 17629779..6b9a3eb1 100644 --- a/tests/draft2019-06/default.json +++ b/tests/draft2019-06/default.json @@ -1,49 +1,180 @@ [ - { - "description": "invalid type for default", - "schema": { - "properties": { - "foo": { - "type": "integer", - "default": [] - } - } - }, - "tests": [ - { - "description": "valid when property is specified", - "data": {"foo": 13}, - "valid": true - }, - { - "description": "still valid when the invalid default is used", - "data": {}, - "valid": true - } - ] + { + "description": "invalid type for default", + "schema": {"properties": {"foo": {"type": "integer", "default": []}}}, + "tests": [ + { + "description": "valid when property is specified", + "data": {"foo": 13}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/properties/foo/default", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/properties/foo/default", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/default", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "still valid when the invalid default is used", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "invalid string value for default", + "schema": { + "properties": { + "bar": {"type": "string", "minLength": 4, "default": "bad"} + } }, - { - "description": "invalid string value for default", - "schema": { - "properties": { - "bar": { - "type": "string", - "minLength": 4, - "default": "bad" - } - } - }, - "tests": [ - { - "description": "valid when property is specified", - "data": {"bar": "good"}, - "valid": true - }, - { - "description": "still valid when the invalid default is used", - "data": {}, - "valid": true - } - ] - } -] + "tests": [ + { + "description": "valid when property is specified", + "data": {"bar": "good"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/properties/bar/default", + "instanceLocation": "#/bar", + "annotation": "bad" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/properties/bar/default", + "instanceLocation": "#/bar", + "annotation": "bad" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar/minLength", + "instanceLocation": "#/bar" + }, + { + "valid": true, + "keywordLocation": "#/properties/bar/default", + "instanceLocation": "#/bar", + "annotation": "bad" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "still valid when the invalid default is used", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/defs.json b/tests/draft2019-06/defs.json index e3c298d3..a4f8ea01 100644 --- a/tests/draft2019-06/defs.json +++ b/tests/draft2019-06/defs.json @@ -1,24 +1,1994 @@ [ - { - "description": "valid definition", - "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, - "tests": [ - { - "description": "valid definition schema", - "data": {"$defs": {"foo": {"type": "integer"}}}, - "valid": true - } - ] - }, - { - "description": "invalid definition", - "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, - "tests": [ - { - "description": "invalid definition schema", - "data": {"$defs": {"foo": {"type": 1}}}, - "valid": false - } - ] - } -] + { + "description": "valid definition", + "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, + "tests": [ + { + "description": "valid definition schema", + "data": {"$defs": {"foo": {"type": "integer"}}}, + "valid": true, + "output": { + "basic": { + "valid": true, + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/type", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties", + "instanceLocation": "#/$defs", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties/$recursiveRef", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type", + "instanceLocation": "#/$defs/foo/type", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf", + "instanceLocation": "#/$defs/foo/type", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/0/$ref", + "instanceLocation": "#/$defs/foo/type", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes", + "instanceLocation": "#/$defs/foo/type", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref/enum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes/enum", + "instanceLocation": "#/$defs/foo/type" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/type", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/items", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/items", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/minItems", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/minItems", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/uniqueItems", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/uniqueItems", + "instanceLocation": "#/$defs/foo/type" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "invalid definition", + "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, + "tests": [ + { + "description": "invalid definition schema", + "data": {"$defs": {"foo": {"type": 1}}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref/enum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes/enum", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/type", + "instanceLocation": "#/$defs/foo/type" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref/enum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes/enum", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/type", + "instanceLocation": "#/$defs/foo/type" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs", + "instanceLocation": "#/$defs", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/type", + "instanceLocation": "#/$defs" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/default", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/default", + "instanceLocation": "#/$defs", + "annotation": {} + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties", + "instanceLocation": "#/$defs", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties/$defs/additionalProperties/$recursiveRef", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core schema meta-schema" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#/$defs/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/0/$ref", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/0/$ref/enum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/simpleTypes/enum", + "instanceLocation": "#/$defs/foo/type" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1", + "instanceLocation": "#/$defs/foo/type", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/type", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/items", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/items", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/minItems", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/minItems", + "instanceLocation": "#/$defs/foo/type" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/properties/type/anyOf/1/uniqueItems", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/type/anyOf/1/uniqueItems", + "instanceLocation": "#/$defs/foo/type" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#/$defs/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#/$defs/foo", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#/$defs/foo" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties/$defs/additionalProperties/$recursiveRef/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#/$defs/foo" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/dependencies.json b/tests/draft2019-06/dependencies.json index 8dd78aa5..9e178d64 100644 --- a/tests/draft2019-06/dependencies.json +++ b/tests/draft2019-06/dependencies.json @@ -1,268 +1,1595 @@ [ - { - "description": "dependencies", - "schema": { - "dependencies": {"bar": ["foo"]} - }, - "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": "dependencies", + "schema": {"dependencies": {"bar": ["foo"]}}, + "tests": [ + { + "description": "neither", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "nondependant", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "with dependency", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "missing dependency", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": ["bar"], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "dependencies with empty array", + "schema": {"dependencies": {"bar": []}}, + "tests": [ + { + "description": "empty object", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "object with one property", + "data": {"bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "multiple dependencies", + "schema": {"dependencies": {"quux": ["foo", "bar"]}}, + "tests": [ + { + "description": "neither", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "nondependants", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "with dependencies", + "data": {"foo": 1, "bar": 2, "quux": 3}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "missing dependency", + "data": {"foo": 1, "quux": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "missing other dependency", + "data": {"bar": 1, "quux": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "missing both dependencies", + "data": {"quux": 1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/quux", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "multiple dependencies subschema", + "schema": { + "dependencies": { + "bar": { + "properties": {"foo": {"type": "integer"}, "bar": {"type": "integer"}} + } + } }, - { - "description": "dependencies with empty array", - "schema": { - "dependencies": {"bar": []} - }, - "tests": [ - { - "description": "empty object", - "data": {}, - "valid": true - }, - { - "description": "object with one property", - "data": {"bar": 2}, - "valid": true - } - ] + "tests": [ + { + "description": "valid", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "no dependency", + "data": {"foo": "quux"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "wrong type", + "data": {"foo": "quux", "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/dependencies/bar/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "wrong type other", + "data": {"foo": 2, "bar": "quux"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "wrong type both", + "data": {"foo": "quux", "bar": "quux"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "dependencies with boolean subschemas", + "schema": {"dependencies": {"foo": true, "bar": false}}, + "tests": [ + { + "description": "object with property having schema true is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "object with property having schema false is invalid", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "object with both properties is invalid", + "data": {"foo": 1, "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "empty object is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "empty array of dependencies", + "schema": {"dependencies": {"foo": []}}, + "tests": [ + { + "description": "object with property is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "empty object is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "non-object is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "dependencies with escaped characters", + "schema": { + "dependencies": { + "foo\nbar": ["foo\rbar"], + "foo\tbar": {"minProperties": 4}, + "foo'bar": {"required": ["foo\"bar"]}, + "foo\"bar": ["foo'bar"] + } }, - { - "description": "multiple dependencies", - "schema": { - "dependencies": {"quux": ["foo", "bar"]} - }, - "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": "multiple dependencies subschema", - "schema": { - "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": "dependencies with boolean subschemas", - "schema": { - "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": "empty array of dependencies", - "schema": { - "dependencies": { - "foo": [] - } - }, - "tests": [ - { - "description": "object with property is valid", - "data": { "foo": 1 }, - "valid": true - }, - { - "description": "empty object is valid", - "data": {}, - "valid": true - }, - { - "description": "non-object is valid", - "data": 1, - "valid": true - } - ] - }, - { - "description": "dependencies with escaped characters", - "schema": { - "dependencies": { - "foo\nbar": ["foo\rbar"], - "foo\tbar": { - "minProperties": 4 - }, - "foo'bar": {"required": ["foo\"bar"]}, - "foo\"bar": ["foo'bar"] - } - }, - "tests": [ - { - "description": "valid object 1", - "data": { - "foo\nbar": 1, - "foo\rbar": 2 - }, - "valid": true - }, - { - "description": "valid object 2", - "data": { - "foo\tbar": 1, - "a": 2, - "b": 3, - "c": 4 - }, - "valid": true - }, - { - "description": "valid object 3", - "data": { - "foo'bar": 1, - "foo\"bar": 2 - }, - "valid": true - }, - { - "description": "invalid object 1", - "data": { - "foo\nbar": 1, - "foo": 2 - }, - "valid": false - }, - { - "description": "invalid object 2", - "data": { - "foo\tbar": 1, - "a": 2 - }, - "valid": false - }, - { - "description": "invalid object 3", - "data": { - "foo'bar": 1 - }, - "valid": false - }, - { - "description": "invalid object 4", - "data": { - "foo\"bar": 2 - }, - "valid": false - } - ] - } -] + "tests": [ + { + "description": "valid object 1", + "data": {"foo\nbar": 1, "foo\rbar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "valid object 2", + "data": {"foo\tbar": 1, "a": 2, "b": 3, "c": 4}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "valid object 3", + "data": {"foo'bar": 1, "foo\"bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "invalid object 1", + "data": {"foo\nbar": 1, "foo": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "invalid object 2", + "data": {"foo\tbar": 1, "a": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/foo\tbar/minProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/foo\tbar/minProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/foo\tbar/minProperties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "invalid object 3", + "data": {"foo'bar": 1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/foo'bar/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/foo'bar/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies/foo'bar/required", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "invalid object 4", + "data": {"foo\"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/dependencies", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/dependencies/foo\nbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo\tbar", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/dependencies/foo'bar", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/dependencies/foo\"bar", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/enum.json b/tests/draft2019-06/enum.json index 04a92a47..719ef7cc 100644 --- a/tests/draft2019-06/enum.json +++ b/tests/draft2019-06/enum.json @@ -1,95 +1,472 @@ [ - { - "description": "simple enum validation", - "schema": {"enum": [1, 2, 3]}, - "tests": [ - { - "description": "one of the enum is valid", - "data": 1, - "valid": true - }, - { - "description": "something else is invalid", - "data": 4, - "valid": false - } - ] + { + "description": "simple enum validation", + "schema": {"enum": [1, 2, 3]}, + "tests": [ + { + "description": "one of the enum is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "something else is invalid", + "data": 4, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "heterogeneous enum validation", + "schema": {"enum": [6, "foo", [], true, {"foo": 12}]}, + "tests": [ + { + "description": "one of the enum is valid", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "something else is invalid", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "objects are deep compared", + "data": {"foo": false}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "enums in properties", + "schema": { + "type": "object", + "properties": {"foo": {"enum": ["foo"]}, "bar": {"enum": ["bar"]}}, + "required": ["bar"] }, - { - "description": "heterogeneous enum validation", - "schema": {"enum": [6, "foo", [], true, {"foo": 12}]}, - "tests": [ - { - "description": "one of the enum is valid", - "data": [], - "valid": true - }, - { - "description": "something else is invalid", - "data": null, - "valid": false - }, - { - "description": "objects are deep compared", - "data": {"foo": false}, - "valid": false - } - ] - }, - { - "description": "enums in properties", - "schema": { - "type":"object", - "properties": { - "foo": {"enum":["foo"]}, - "bar": {"enum":["bar"]} - }, - "required": ["bar"] - }, - "tests": [ - { - "description": "both properties are valid", - "data": {"foo":"foo", "bar":"bar"}, - "valid": true - }, - { - "description": "missing optional property is valid", - "data": {"bar":"bar"}, - "valid": true - }, - { - "description": "missing required property is invalid", - "data": {"foo":"foo"}, - "valid": false - }, - { - "description": "missing all properties is invalid", - "data": {}, - "valid": false - } - ] - }, - { - "description": "enum with escaped characters", - "schema": { - "enum": ["foo\nbar", "foo\rbar"] - }, - "tests": [ - { - "description": "member 1 is valid", - "data": "foo\nbar", - "valid": true - }, - { - "description": "member 2 is valid", - "data": "foo\rbar", - "valid": true - }, - { - "description": "another string is invalid", - "data": "abc", - "valid": false - } - ] - } -] + "tests": [ + { + "description": "both properties are valid", + "data": {"foo": "foo", "bar": "bar"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/enum", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/enum", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "missing optional property is valid", + "data": {"bar": "bar"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/enum", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "missing required property is invalid", + "data": {"foo": "foo"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/enum", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "missing all properties is invalid", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "enum with escaped characters", + "schema": {"enum": ["foo\nbar", "foo\rbar"]}, + "tests": [ + { + "description": "member 1 is valid", + "data": "foo\nbar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "member 2 is valid", + "data": "foo\rbar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "another string is invalid", + "data": "abc", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/enum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/exclusiveMaximum.json b/tests/draft2019-06/exclusiveMaximum.json index dc3cd709..e0fff3c7 100644 --- a/tests/draft2019-06/exclusiveMaximum.json +++ b/tests/draft2019-06/exclusiveMaximum.json @@ -1,30 +1,124 @@ [ - { - "description": "exclusiveMaximum validation", - "schema": { - "exclusiveMaximum": 3.0 - }, - "tests": [ - { - "description": "below the exclusiveMaximum is valid", - "data": 2.2, - "valid": true - }, - { - "description": "boundary point is invalid", - "data": 3.0, - "valid": false - }, - { - "description": "above the exclusiveMaximum is invalid", - "data": 3.5, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - } -] + { + "description": "exclusiveMaximum validation", + "schema": {"exclusiveMaximum": 3}, + "tests": [ + { + "description": "below the exclusiveMaximum is valid", + "data": 2.2, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "boundary point is invalid", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "above the exclusiveMaximum is invalid", + "data": 3.5, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "x", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/exclusiveMinimum.json b/tests/draft2019-06/exclusiveMinimum.json index b38d7ece..b860c684 100644 --- a/tests/draft2019-06/exclusiveMinimum.json +++ b/tests/draft2019-06/exclusiveMinimum.json @@ -1,30 +1,124 @@ [ - { - "description": "exclusiveMinimum validation", - "schema": { - "exclusiveMinimum": 1.1 - }, - "tests": [ - { - "description": "above the exclusiveMinimum is valid", - "data": 1.2, - "valid": true - }, - { - "description": "boundary point is invalid", - "data": 1.1, - "valid": false - }, - { - "description": "below the exclusiveMinimum is invalid", - "data": 0.6, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - } -] + { + "description": "exclusiveMinimum validation", + "schema": {"exclusiveMinimum": 1.1}, + "tests": [ + { + "description": "above the exclusiveMinimum is valid", + "data": 1.2, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "boundary point is invalid", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "below the exclusiveMinimum is invalid", + "data": 0.6, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "x", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/if-then-else.json b/tests/draft2019-06/if-then-else.json index 37a229c8..2961b3ed 100644 --- a/tests/draft2019-06/if-then-else.json +++ b/tests/draft2019-06/if-then-else.json @@ -1,188 +1,610 @@ [ - { - "description": "ignore if without then or else", - "schema": { - "if": { - "const": 0 - } - }, - "tests": [ - { - "description": "valid when valid against lone if", - "data": 0, - "valid": true - }, - { - "description": "valid when invalid against lone if", - "data": "hello", - "valid": true - } - ] - }, - { - "description": "ignore then without if", - "schema": { - "then": { - "const": 0 - } - }, - "tests": [ - { - "description": "valid when valid against lone then", - "data": 0, - "valid": true - }, - { - "description": "valid when invalid against lone then", - "data": "hello", - "valid": true - } - ] - }, - { - "description": "ignore else without if", - "schema": { - "else": { - "const": 0 - } - }, - "tests": [ - { - "description": "valid when valid against lone else", - "data": 0, - "valid": true - }, - { - "description": "valid when invalid against lone else", - "data": "hello", - "valid": true - } - ] - }, - { - "description": "if and then without else", - "schema": { - "if": { - "exclusiveMaximum": 0 - }, - "then": { - "minimum": -10 - } - }, - "tests": [ - { - "description": "valid through then", - "data": -1, - "valid": true - }, - { - "description": "invalid through then", - "data": -100, - "valid": false - }, - { - "description": "valid when if test fails", - "data": 3, - "valid": true - } - ] - }, - { - "description": "if and else without then", - "schema": { - "if": { - "exclusiveMaximum": 0 - }, - "else": { - "multipleOf": 2 - } - }, - "tests": [ - { - "description": "valid when if test passes", - "data": -1, - "valid": true - }, - { - "description": "valid through else", - "data": 4, - "valid": true - }, - { - "description": "invalid through else", - "data": 3, - "valid": false - } - ] + { + "description": "ignore if without then or else", + "schema": {"if": {"const": 0}}, + "tests": [ + { + "description": "valid when valid against lone if", + "data": 0, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + }, + { + "description": "valid when invalid against lone if", + "data": "hello", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + } + ] + }, + { + "description": "ignore then without if", + "schema": {"then": {"const": 0}}, + "tests": [ + { + "description": "valid when valid against lone then", + "data": 0, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + }, + { + "description": "valid when invalid against lone then", + "data": "hello", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + } + ] + }, + { + "description": "ignore else without if", + "schema": {"else": {"const": 0}}, + "tests": [ + { + "description": "valid when valid against lone else", + "data": 0, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + }, + { + "description": "valid when invalid against lone else", + "data": "hello", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + } + ] + }, + { + "description": "if and then without else", + "schema": {"if": {"exclusiveMaximum": 0}, "then": {"minimum": -10}}, + "tests": [ + { + "description": "valid through then", + "data": -1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/if", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "invalid through then", + "data": -100, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/if", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/then", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "valid when if test fails", + "data": 3, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + } + ] + }, + { + "description": "if and else without then", + "schema": {"if": {"exclusiveMaximum": 0}, "else": {"multipleOf": 2}}, + "tests": [ + { + "description": "valid when if test passes", + "data": -1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + } + } + }, + { + "description": "valid through else", + "data": 4, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/if", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "invalid through else", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/if", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/else", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "validate against correct branch, then vs else", + "schema": { + "if": {"exclusiveMaximum": 0}, + "then": {"minimum": -10}, + "else": {"multipleOf": 2} }, - { - "description": "validate against correct branch, then vs else", - "schema": { - "if": { - "exclusiveMaximum": 0 - }, - "then": { - "minimum": -10 - }, - "else": { - "multipleOf": 2 - } - }, - "tests": [ - { - "description": "valid through then", - "data": -1, - "valid": true - }, - { - "description": "invalid through then", - "data": -100, - "valid": false - }, - { - "description": "valid through else", - "data": 4, - "valid": true - }, - { - "description": "invalid through else", - "data": 3, - "valid": false - } - ] + "tests": [ + { + "description": "valid through then", + "data": -1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/if", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "invalid through then", + "data": -100, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/if", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/then", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/then/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "valid through else", + "data": 4, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/if", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "invalid through else", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/if", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/else", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/else/multipleOf", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "non-interference across combined schemas", + "schema": { + "allOf": [ + {"if": {"exclusiveMaximum": 0}}, + {"then": {"minimum": -10}}, + {"else": {"multipleOf": 2}} + ] }, - { - "description": "non-interference across combined schemas", - "schema": { - "allOf": [ - { - "if": { - "exclusiveMaximum": 0 - } - }, - { - "then": { - "minimum": -10 - } - }, - { - "else": { - "multipleOf": 2 - } - } + "tests": [ + { + "description": "valid, but woud have been invalid through then", + "data": -100, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/2", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "valid, but would have been invalid through else", + "data": 3, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/1", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/allOf/2", + "instanceLocation": "#" + } + ] + } ] - }, - "tests": [ - { - "description": "valid, but woud have been invalid through then", - "data": -100, - "valid": true - }, - { - "description": "valid, but would have been invalid through else", - "data": 3, - "valid": true - } - ] - } -] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/items.json b/tests/draft2019-06/items.json index 6e98ee82..ffb0d145 100644 --- a/tests/draft2019-06/items.json +++ b/tests/draft2019-06/items.json @@ -1,250 +1,3426 @@ [ - { - "description": "a schema given for items", - "schema": { - "items": {"type": "integer"} - }, - "tests": [ - { - "description": "valid items", - "data": [ 1, 2, 3 ], - "valid": true - }, - { - "description": "wrong type of items", - "data": [1, "x"], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": {"foo" : "bar"}, - "valid": true - }, - { - "description": "JavaScript pseudo-array is valid", - "data": { - "0": "invalid", - "length": 1 - }, - "valid": true - } - ] - }, - { - "description": "an array of schemas for items", - "schema": { - "items": [ - {"type": "integer"}, - {"type": "string"} + { + "description": "a schema given for items", + "schema": {"items": {"type": "integer"}}, + "tests": [ + { + "description": "valid items", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/2" + } + ] + } + ] + } ] + } + } + }, + { + "description": "wrong type of items", + "data": [1, "x"], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "ignores non-arrays", + "data": {"foo": "bar"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "JavaScript pseudo-array is valid", + "data": {"0": "invalid", "length": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "an array of schemas for items", + "schema": {"items": [{"type": "integer"}, {"type": "string"}]}, + "tests": [ + { + "description": "correct types", + "data": [1, "foo"], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "wrong types", + "data": ["foo", 1], + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/1/type", + "instanceLocation": "#/1" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/1/type", + "instanceLocation": "#/1" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/1/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "incomplete array of items", + "data": [1], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "array with additional items", + "data": [1, "foo", true], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "empty array", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "JavaScript pseudo-array is valid", + "data": {"0": "invalid", "1": "valid", "length": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "items with boolean schema (true)", + "schema": {"items": true}, + "tests": [ + { + "description": "any array is valid", + "data": [1, "foo", true], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/2" + } + ] + } + ] + } + } + }, + { + "description": "empty array is valid", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "items with boolean schema (false)", + "schema": {"items": false}, + "tests": [ + { + "description": "any non-empty array is invalid", + "data": [1, "foo", true], + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/2" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/2" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/2" + } + ] + } + ] + } + } + }, + { + "description": "empty array is valid", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "items with boolean schemas", + "schema": {"items": [true, false]}, + "tests": [ + { + "description": "array with one item is valid", + "data": [1], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + } + ] + } + ] + } + } + }, + { + "description": "array with two items is invalid", + "data": [1, "foo"], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/1", + "instanceLocation": "#/1" + } + ] + } + ] + } + } + }, + { + "description": "empty array is valid", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "items and subitems", + "schema": { + "$defs": { + "item": { + "type": "array", + "additionalItems": false, + "items": [{"$ref": "#/$defs/sub-item"}, {"$ref": "#/$defs/sub-item"}] }, - "tests": [ - { - "description": "correct types", - "data": [ 1, "foo" ], - "valid": true - }, - { - "description": "wrong types", - "data": [ "foo", 1 ], - "valid": false - }, - { - "description": "incomplete array of items", - "data": [ 1 ], - "valid": true - }, - { - "description": "array with additional items", - "data": [ 1, "foo", true ], - "valid": true - }, - { - "description": "empty array", - "data": [ ], - "valid": true - }, - { - "description": "JavaScript pseudo-array is valid", - "data": { - "0": "invalid", - "1": "valid", - "length": 2 - }, - "valid": true - } - ] - }, - { - "description": "items with boolean schema (true)", - "schema": {"items": true}, - "tests": [ - { - "description": "any array is valid", - "data": [ 1, "foo", true ], - "valid": true - }, - { - "description": "empty array is valid", - "data": [], - "valid": true - } - ] - }, - { - "description": "items with boolean schema (false)", - "schema": {"items": false}, - "tests": [ - { - "description": "any non-empty array is invalid", - "data": [ 1, "foo", true ], - "valid": false - }, - { - "description": "empty array is valid", - "data": [], - "valid": true - } - ] - }, - { - "description": "items with boolean schemas", - "schema": { - "items": [true, false] - }, - "tests": [ - { - "description": "array with one item is valid", - "data": [ 1 ], - "valid": true - }, - { - "description": "array with two items is invalid", - "data": [ 1, "foo" ], - "valid": false - }, - { - "description": "empty array is valid", - "data": [], - "valid": true - } - ] + "sub-item": {"type": "object", "required": ["foo"]} + }, + "type": "array", + "additionalItems": false, + "items": [ + {"$ref": "#/$defs/item"}, + {"$ref": "#/$defs/item"}, + {"$ref": "#/$defs/item"} + ] }, - { - "description": "items and subitems", - "schema": { - "$defs": { - "item": { - "type": "array", - "additionalItems": false, - "items": [ - { "$ref": "#/$defs/sub-item" }, - { "$ref": "#/$defs/sub-item" } - ] - }, - "sub-item": { - "type": "object", - "required": ["foo"] - } - }, - "type": "array", - "additionalItems": false, - "items": [ - { "$ref": "#/$defs/item" }, - { "$ref": "#/$defs/item" }, - { "$ref": "#/$defs/item" } + "tests": [ + { + "description": "valid items", + "data": [ + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}] + ], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/type", + "instanceLocation": "#/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/required", + "instanceLocation": "#/0/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/type", + "instanceLocation": "#/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/required", + "instanceLocation": "#/1/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/type", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/type", + "instanceLocation": "#/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/required", + "instanceLocation": "#/2/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/type", + "instanceLocation": "#/2/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/required", + "instanceLocation": "#/2/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/additionalItems", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } ] - }, - "tests": [ - { - "description": "valid items", - "data": [ - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ] - ], - "valid": true - }, - { - "description": "too many items", - "data": [ - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ] - ], - "valid": false - }, - { - "description": "too many sub-items", - "data": [ - [ {"foo": null}, {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ] - ], - "valid": false - }, - { - "description": "wrong item", - "data": [ - {"foo": null}, - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ] - ], - "valid": false - }, - { - "description": "wrong sub-item", - "data": [ - [ {}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ], - [ {"foo": null}, {"foo": null} ] - ], - "valid": false - }, - { - "description": "fewer items is valid", - "data": [ - [ {"foo": null} ], - [ {"foo": null} ] - ], - "valid": true - } - ] + } + } + }, + { + "description": "too many items", + "data": [ + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}] + ], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/type", + "instanceLocation": "#/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/required", + "instanceLocation": "#/0/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/type", + "instanceLocation": "#/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/required", + "instanceLocation": "#/1/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/type", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/type", + "instanceLocation": "#/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/required", + "instanceLocation": "#/2/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/type", + "instanceLocation": "#/2/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/required", + "instanceLocation": "#/2/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/additionalItems", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too many sub-items", + "data": [ + [{"foo": null}, {"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}] + ], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/type", + "instanceLocation": "#/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/required", + "instanceLocation": "#/0/1" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/type", + "instanceLocation": "#/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/required", + "instanceLocation": "#/1/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/type", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/type", + "instanceLocation": "#/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/required", + "instanceLocation": "#/2/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/type", + "instanceLocation": "#/2/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/required", + "instanceLocation": "#/2/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/additionalItems", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "wrong item", + "data": [ + {"foo": null}, + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}] + ], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/type", + "instanceLocation": "#/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/required", + "instanceLocation": "#/1/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/type", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/type", + "instanceLocation": "#/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/required", + "instanceLocation": "#/2/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/type", + "instanceLocation": "#/2/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/required", + "instanceLocation": "#/2/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/additionalItems", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "wrong sub-item", + "data": [ + [{}, {"foo": null}], + [{"foo": null}, {"foo": null}], + [{"foo": null}, {"foo": null}] + ], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/type", + "instanceLocation": "#/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/1/$ref/required", + "instanceLocation": "#/0/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref", + "instanceLocation": "#/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/type", + "instanceLocation": "#/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/1/$ref/required", + "instanceLocation": "#/1/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/type", + "instanceLocation": "#/2" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items", + "instanceLocation": "#/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref", + "instanceLocation": "#/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/type", + "instanceLocation": "#/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/0/$ref/required", + "instanceLocation": "#/2/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref", + "instanceLocation": "#/2/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/type", + "instanceLocation": "#/2/1" + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/items/1/$ref/required", + "instanceLocation": "#/2/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/2/$ref/additionalItems", + "instanceLocation": "#/2" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "fewer items is valid", + "data": [[{"foo": null}], [{"foo": null}]], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/type", + "instanceLocation": "#/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/items/0/$ref/required", + "instanceLocation": "#/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/0/$ref/additionalItems", + "instanceLocation": "#/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/items/0/$ref/required", + "instanceLocation": "#/1/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref/additionalItems", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "nested items", + "schema": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "items": {"type": "array", "items": {"type": "number"}} + } + } }, - { - "description": "nested items", - "schema": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "array", - "items": { - "type": "number" - } - } - } - } - }, - "tests": [ - { - "description": "valid nested array", - "data": [[[[1]], [[2],[3]]], [[[4], [5], [6]]]], - "valid": true - }, - { - "description": "nested array with invalid type", - "data": [[[["1"]], [[2],[3]]], [[[4], [5], [6]]]], - "valid": false - }, - { - "description": "not deep enough", - "data": [[[1], [2],[3]], [[4], [5], [6]]], - "valid": false - } - ] - } -] + "tests": [ + { + "description": "valid nested array", + "data": [[[[1]], [[2], [3]]], [[[4], [5], [6]]]], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/0/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/0/0/0" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/1/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/1/1/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/1/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/2" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/2/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "nested array with invalid type", + "data": [[[["1"]], [[2], [3]]], [[[4], [5], [6]]]], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/0/0/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/0/0/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/0/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/0/0/0" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/1/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/0/1/1/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/1" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/1/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/1/0" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/2" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/2", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/2/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/items/items/type", + "instanceLocation": "#/1/0/2/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "not deep enough", + "data": [[[1], [2], [3]], [[4], [5], [6]]], + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/2/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/2/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/2/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/2/0" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/2/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/2/0" + } + ] + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/1", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/1" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/1/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/1/0" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0/2", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/0/2" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/2", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/0/2/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/0/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/0/2/0" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/1", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/type", + "instanceLocation": "#/1" + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/1/0" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/0/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/0/0" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1/1", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/1/1" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/1/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/1/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/1/0" + } + ] + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/1/2", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/items/type", + "instanceLocation": "#/1/2" + }, + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/2", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items", + "instanceLocation": "#/1/2/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/items/type", + "instanceLocation": "#/1/2/0" + }, + { + "valid": true, + "keywordLocation": "#/items/items/items/items", + "instanceLocation": "#/1/2/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/maxItems.json b/tests/draft2019-06/maxItems.json index 3b53a6b3..2e0e4627 100644 --- a/tests/draft2019-06/maxItems.json +++ b/tests/draft2019-06/maxItems.json @@ -1,28 +1,124 @@ [ - { - "description": "maxItems validation", - "schema": {"maxItems": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": [1], - "valid": true - }, - { - "description": "exact length is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "too long is invalid", - "data": [1, 2, 3], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": "foobar", - "valid": true - } - ] - } -] + { + "description": "maxItems validation", + "schema": {"maxItems": 2}, + "tests": [ + { + "description": "shorter is valid", + "data": [1], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": [1, 2], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too long is invalid", + "data": [1, 2, 3], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-arrays", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/maxLength.json b/tests/draft2019-06/maxLength.json index 811d35b2..67df534d 100644 --- a/tests/draft2019-06/maxLength.json +++ b/tests/draft2019-06/maxLength.json @@ -1,33 +1,153 @@ [ - { - "description": "maxLength validation", - "schema": {"maxLength": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": "f", - "valid": true - }, - { - "description": "exact length is valid", - "data": "fo", - "valid": true - }, - { - "description": "too long is invalid", - "data": "foo", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 100, - "valid": true - }, - { - "description": "two supplementary Unicode code points is long enough", - "data": "\uD83D\uDCA9\uD83D\uDCA9", - "valid": true - } - ] - } -] + { + "description": "maxLength validation", + "schema": {"maxLength": 2}, + "tests": [ + { + "description": "shorter is valid", + "data": "f", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": "fo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too long is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": 100, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "two supplementary Unicode code points is long enough", + "data": "💩💩", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxLength", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/maxProperties.json b/tests/draft2019-06/maxProperties.json index 513731e4..543d4fe9 100644 --- a/tests/draft2019-06/maxProperties.json +++ b/tests/draft2019-06/maxProperties.json @@ -1,38 +1,182 @@ [ - { - "description": "maxProperties validation", - "schema": {"maxProperties": 2}, - "tests": [ - { - "description": "shorter is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "exact length is valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "too long is invalid", - "data": {"foo": 1, "bar": 2, "baz": 3}, - "valid": false - }, - { - "description": "ignores arrays", - "data": [1, 2, 3], - "valid": true - }, - { - "description": "ignores strings", - "data": "foobar", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] - } -] + { + "description": "maxProperties validation", + "schema": {"maxProperties": 2}, + "tests": [ + { + "description": "shorter is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too long is invalid", + "data": {"foo": 1, "bar": 2, "baz": 3}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maxProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/maximum.json b/tests/draft2019-06/maximum.json index 8150984e..91671051 100644 --- a/tests/draft2019-06/maximum.json +++ b/tests/draft2019-06/maximum.json @@ -1,28 +1,124 @@ [ - { - "description": "maximum validation", - "schema": {"maximum": 3.0}, - "tests": [ - { - "description": "below the maximum is valid", - "data": 2.6, - "valid": true - }, - { - "description": "boundary point is valid", - "data": 3.0, - "valid": true - }, - { - "description": "above the maximum is invalid", - "data": 3.5, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - } -] + { + "description": "maximum validation", + "schema": {"maximum": 3}, + "tests": [ + { + "description": "below the maximum is valid", + "data": 2.6, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "boundary point is valid", + "data": 3, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "above the maximum is invalid", + "data": 3.5, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "x", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/minItems.json b/tests/draft2019-06/minItems.json index ed511881..38475409 100644 --- a/tests/draft2019-06/minItems.json +++ b/tests/draft2019-06/minItems.json @@ -1,28 +1,124 @@ [ - { - "description": "minItems validation", - "schema": {"minItems": 1}, - "tests": [ - { - "description": "longer is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "exact length is valid", - "data": [1], - "valid": true - }, - { - "description": "too short is invalid", - "data": [], - "valid": false - }, - { - "description": "ignores non-arrays", - "data": "", - "valid": true - } - ] - } -] + { + "description": "minItems validation", + "schema": {"minItems": 1}, + "tests": [ + { + "description": "longer is valid", + "data": [1, 2], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": [1], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too short is invalid", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-arrays", + "data": "", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/minLength.json b/tests/draft2019-06/minLength.json index 3f09158d..22a9e9d4 100644 --- a/tests/draft2019-06/minLength.json +++ b/tests/draft2019-06/minLength.json @@ -1,33 +1,153 @@ [ - { - "description": "minLength validation", - "schema": {"minLength": 2}, - "tests": [ - { - "description": "longer is valid", - "data": "foo", - "valid": true - }, - { - "description": "exact length is valid", - "data": "fo", - "valid": true - }, - { - "description": "too short is invalid", - "data": "f", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 1, - "valid": true - }, - { - "description": "one supplementary Unicode code point is not long enough", - "data": "\uD83D\uDCA9", - "valid": false - } - ] - } -] + { + "description": "minLength validation", + "schema": {"minLength": 2}, + "tests": [ + { + "description": "longer is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": "fo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too short is invalid", + "data": "f", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "one supplementary Unicode code point is not long enough", + "data": "💩", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minLength", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/minProperties.json b/tests/draft2019-06/minProperties.json index 49a0726e..c5f08e3e 100644 --- a/tests/draft2019-06/minProperties.json +++ b/tests/draft2019-06/minProperties.json @@ -1,38 +1,182 @@ [ - { - "description": "minProperties validation", - "schema": {"minProperties": 1}, - "tests": [ - { - "description": "longer is valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "exact length is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "too short is invalid", - "data": {}, - "valid": false - }, - { - "description": "ignores arrays", - "data": [], - "valid": true - }, - { - "description": "ignores strings", - "data": "", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] - } -] + { + "description": "minProperties validation", + "schema": {"minProperties": 1}, + "tests": [ + { + "description": "longer is valid", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "exact length is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "too short is invalid", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/minimum.json b/tests/draft2019-06/minimum.json index 2a9c42b3..ae23d560 100644 --- a/tests/draft2019-06/minimum.json +++ b/tests/draft2019-06/minimum.json @@ -1,59 +1,275 @@ [ - { - "description": "minimum validation", - "schema": {"minimum": 1.1}, - "tests": [ - { - "description": "above the minimum is valid", - "data": 2.6, - "valid": true - }, - { - "description": "boundary point is valid", - "data": 1.1, - "valid": true - }, - { - "description": "below the minimum is invalid", - "data": 0.6, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - }, - { - "description": "minimum validation with signed integer", - "schema": {"minimum": -2}, - "tests": [ - { - "description": "negative above the minimum is valid", - "data": -1, - "valid": true - }, - { - "description": "positive above the minimum is valid", - "data": 0, - "valid": true - }, - { - "description": "boundary point is valid", - "data": -2, - "valid": true - }, - { - "description": "below the minimum is invalid", - "data": -3, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "x", - "valid": true - } - ] - } -] + { + "description": "minimum validation", + "schema": {"minimum": 1.1}, + "tests": [ + { + "description": "above the minimum is valid", + "data": 2.6, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "boundary point is valid", + "data": 1.1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "below the minimum is invalid", + "data": 0.6, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "x", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "minimum validation with signed integer", + "schema": {"minimum": -2}, + "tests": [ + { + "description": "negative above the minimum is valid", + "data": -1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "positive above the minimum is valid", + "data": 0, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "boundary point is valid", + "data": -2, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "below the minimum is invalid", + "data": -3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "x", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/multipleOf.json b/tests/draft2019-06/multipleOf.json index ca3b7618..0e5dbd43 100644 --- a/tests/draft2019-06/multipleOf.json +++ b/tests/draft2019-06/multipleOf.json @@ -1,60 +1,252 @@ [ - { - "description": "by int", - "schema": {"multipleOf": 2}, - "tests": [ - { - "description": "int by int", - "data": 10, - "valid": true - }, - { - "description": "int by int fail", - "data": 7, - "valid": false - }, - { - "description": "ignores non-numbers", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "by number", - "schema": {"multipleOf": 1.5}, - "tests": [ - { - "description": "zero is multiple of anything", - "data": 0, - "valid": true - }, - { - "description": "4.5 is multiple of 1.5", - "data": 4.5, - "valid": true - }, - { - "description": "35 is not multiple of 1.5", - "data": 35, - "valid": false - } - ] - }, - { - "description": "by small number", - "schema": {"multipleOf": 0.0001}, - "tests": [ - { - "description": "0.0075 is multiple of 0.0001", - "data": 0.0075, - "valid": true - }, - { - "description": "0.00751 is not multiple of 0.0001", - "data": 0.00751, - "valid": false - } - ] - } -] + { + "description": "by int", + "schema": {"multipleOf": 2}, + "tests": [ + { + "description": "int by int", + "data": 10, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "int by int fail", + "data": 7, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-numbers", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "by number", + "schema": {"multipleOf": 1.5}, + "tests": [ + { + "description": "zero is multiple of anything", + "data": 0, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "4.5 is multiple of 1.5", + "data": 4.5, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "35 is not multiple of 1.5", + "data": 35, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "by small number", + "schema": {"multipleOf": 0.0001}, + "tests": [ + { + "description": "0.0075 is multiple of 0.0001", + "data": 0.0075, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "0.00751 is not multiple of 0.0001", + "data": 0.00751, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/multipleOf", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/not.json b/tests/draft2019-06/not.json index 98de0eda..8896f606 100644 --- a/tests/draft2019-06/not.json +++ b/tests/draft2019-06/not.json @@ -1,117 +1,402 @@ [ - { - "description": "not", - "schema": { - "not": {"type": "integer"} - }, - "tests": [ - { - "description": "allowed", - "data": "foo", - "valid": true - }, - { - "description": "disallowed", - "data": 1, - "valid": false - } - ] + { + "description": "not", + "schema": {"not": {"type": "integer"}}, + "tests": [ + { + "description": "allowed", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "disallowed", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "not multiple types", + "schema": {"not": {"type": ["boolean", "integer"]}}, + "tests": [ + { + "description": "valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "other mismatch", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "not more complex schema", + "schema": { + "not": {"type": "object", "properties": {"foo": {"type": "string"}}} }, - { - "description": "not multiple types", - "schema": { - "not": {"type": ["integer", "boolean"]} - }, - "tests": [ - { - "description": "valid", - "data": "foo", - "valid": true - }, - { - "description": "mismatch", - "data": 1, - "valid": false - }, - { - "description": "other mismatch", - "data": true, - "valid": false - } - ] - }, - { - "description": "not more complex schema", - "schema": { - "not": { - "type": "object", - "properties": { - "foo": { - "type": "string" - } - } - } - }, - "tests": [ - { - "description": "match", - "data": 1, - "valid": true - }, - { - "description": "other match", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "mismatch", - "data": {"foo": "bar"}, - "valid": false - } - ] - }, - { - "description": "forbidden property", - "schema": { - "properties": { - "foo": { - "not": {} - } - } - }, - "tests": [ - { - "description": "property present", - "data": {"foo": 1, "bar": 2}, - "valid": false - }, - { - "description": "property absent", - "data": {"bar": 1, "baz": 2}, - "valid": true - } - ] - }, - { - "description": "not with boolean schema true", - "schema": {"not": true}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "not with boolean schema false", - "schema": {"not": false}, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - } -] + "tests": [ + { + "description": "match", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "other match", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": {"foo": "bar"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "forbidden property", + "schema": {"properties": {"foo": {"not": {}}}}, + "tests": [ + { + "description": "property present", + "data": {"foo": 1, "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/foo/not", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/foo/not", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/not", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "property absent", + "data": {"bar": 1, "baz": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "not with boolean schema true", + "schema": {"not": true}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "not with boolean schema false", + "schema": {"not": false}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/not", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/oneOf.json b/tests/draft2019-06/oneOf.json index 57640b7a..d34c36ec 100644 --- a/tests/draft2019-06/oneOf.json +++ b/tests/draft2019-06/oneOf.json @@ -1,206 +1,1469 @@ [ - { - "description": "oneOf", - "schema": { - "oneOf": [ - { - "type": "integer" - }, - { - "minimum": 2 - } - ] - }, - "tests": [ - { - "description": "first oneOf valid", - "data": 1, - "valid": true - }, - { - "description": "second oneOf valid", - "data": 2.5, - "valid": true - }, - { - "description": "both oneOf valid", - "data": 3, - "valid": false - }, - { - "description": "neither oneOf valid", - "data": 1.5, - "valid": false - } - ] - }, - { - "description": "oneOf with base schema", - "schema": { - "type": "string", - "oneOf" : [ - { - "minLength": 2 - }, - { - "maxLength": 4 - } - ] - }, - "tests": [ - { - "description": "mismatch base schema", - "data": 3, - "valid": false - }, - { - "description": "one oneOf valid", - "data": "foobar", - "valid": true - }, - { - "description": "both oneOf valid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "oneOf with boolean schemas, all true", - "schema": {"oneOf": [true, true, true]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "oneOf with boolean schemas, one true", - "schema": {"oneOf": [true, false, false]}, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "oneOf with boolean schemas, more than one true", - "schema": {"oneOf": [true, true, false]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "oneOf with boolean schemas, all false", - "schema": {"oneOf": [false, false, false]}, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "oneOf complex types", - "schema": { - "oneOf": [ - { - "properties": { - "bar": {"type": "integer"} - }, - "required": ["bar"] - }, - { - "properties": { - "foo": {"type": "string"} - }, - "required": ["foo"] - } - ] - }, - "tests": [ - { - "description": "first oneOf valid (complex)", - "data": {"bar": 2}, - "valid": true - }, - { - "description": "second oneOf valid (complex)", - "data": {"foo": "baz"}, - "valid": true - }, - { - "description": "both oneOf valid (complex)", - "data": {"foo": "baz", "bar": 2}, - "valid": false - }, - { - "description": "neither oneOf valid (complex)", - "data": {"foo": 2, "bar": "quux"}, - "valid": false - } - ] + { + "description": "oneOf", + "schema": {"oneOf": [{"type": "integer"}, {"minimum": 2}]}, + "tests": [ + { + "description": "first oneOf valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "second oneOf valid", + "data": 2.5, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both oneOf valid", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "neither oneOf valid", + "data": 1.5, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/minimum", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with base schema", + "schema": {"type": "string", "oneOf": [{"minLength": 2}, {"maxLength": 4}]}, + "tests": [ + { + "description": "mismatch base schema", + "data": 3, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + {"valid": false, "keywordLocation": "#", "instanceLocation": "#"}, + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/minLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "one oneOf valid", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/minLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both oneOf valid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/minLength", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/maxLength", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with boolean schemas, all true", + "schema": {"oneOf": [true, true, true]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with boolean schemas, one true", + "schema": {"oneOf": [true, false, false]}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with boolean schemas, more than one true", + "schema": {"oneOf": [true, true, false]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with boolean schemas, all false", + "schema": {"oneOf": [false, false, false]}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/2", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf complex types", + "schema": { + "oneOf": [ + {"properties": {"bar": {"type": "integer"}}, "required": ["bar"]}, + {"properties": {"foo": {"type": "string"}}, "required": ["foo"]} + ] }, - { - "description": "oneOf with empty schema", - "schema": { - "oneOf": [ - { "type": "number" }, - {} - ] - }, - "tests": [ - { - "description": "one valid - valid", - "data": "foo", - "valid": true - }, - { - "description": "both valid - invalid", - "data": 123, - "valid": false - } - ] + "tests": [ + { + "description": "first oneOf valid (complex)", + "data": {"bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "second oneOf valid (complex)", + "data": {"foo": "baz"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both oneOf valid (complex)", + "data": {"foo": "baz", "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "neither oneOf valid (complex)", + "data": {"foo": 2, "bar": "quux"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/properties/bar/type", + "instanceLocation": "#/bar" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with empty schema", + "schema": {"oneOf": [{"type": "number"}, {}]}, + "tests": [ + { + "description": "one valid - valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "both valid - invalid", + "data": 123, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/type", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "oneOf with required", + "schema": { + "type": "object", + "oneOf": [{"required": ["foo", "bar"]}, {"required": ["foo", "baz"]}] }, - { - "description": "oneOf with required", - "schema": { - "type": "object", - "oneOf": [ - { "required": ["foo", "bar"] }, - { "required": ["foo", "baz"] } - ] - }, - "tests": [ - { - "description": "both invalid - invalid", - "data": {"bar": 2}, - "valid": false - }, - { - "description": "first valid - valid", - "data": {"foo": 1, "bar": 2}, - "valid": true - }, - { - "description": "second valid - valid", - "data": {"foo": 1, "baz": 3}, - "valid": true - }, - { - "description": "both valid - invalid", - "data": {"foo": 1, "bar": 2, "baz" : 3}, - "valid": false - } - ] - } -] + "tests": [ + { + "description": "both invalid - invalid", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "first valid - valid", + "data": {"foo": 1, "bar": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "second valid - valid", + "data": {"foo": 1, "baz": 3}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both valid - invalid", + "data": {"foo": 1, "bar": 2, "baz": 3}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/oneOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/0/required", + "instanceLocation": "#" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/oneOf/1", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/oneOf/1/required", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/bignum.json b/tests/draft2019-06/optional/bignum.json index fac275e2..f70abe67 100644 --- a/tests/draft2019-06/optional/bignum.json +++ b/tests/draft2019-06/optional/bignum.json @@ -1,105 +1,299 @@ [ - { - "description": "integer", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "a bignum is an integer", - "data": 12345678910111213141516171819202122232425262728293031, - "valid": true - } - ] - }, - { - "description": "number", - "schema": {"type": "number"}, - "tests": [ - { - "description": "a bignum is a number", - "data": 98249283749234923498293171823948729348710298301928331, - "valid": true - } - ] - }, - { - "description": "integer", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "a negative bignum is an integer", - "data": -12345678910111213141516171819202122232425262728293031, - "valid": true - } - ] - }, - { - "description": "number", - "schema": {"type": "number"}, - "tests": [ - { - "description": "a negative bignum is a number", - "data": -98249283749234923498293171823948729348710298301928331, - "valid": true - } - ] - }, - { - "description": "string", - "schema": {"type": "string"}, - "tests": [ - { - "description": "a bignum is not a string", - "data": 98249283749234923498293171823948729348710298301928331, - "valid": false - } - ] - }, - { - "description": "integer comparison", - "schema": {"maximum": 18446744073709551615}, - "tests": [ - { - "description": "comparison works for high numbers", - "data": 18446744073709551600, - "valid": true - } - ] - }, - { - "description": "float comparison with high precision", - "schema": { - "exclusiveMaximum": 972783798187987123879878123.18878137 - }, - "tests": [ - { - "description": "comparison works for high numbers", - "data": 972783798187987123879878123.188781371, - "valid": false - } - ] - }, - { - "description": "integer comparison", - "schema": {"minimum": -18446744073709551615}, - "tests": [ - { - "description": "comparison works for very negative numbers", - "data": -18446744073709551600, - "valid": true - } - ] - }, - { - "description": "float comparison with high precision on negative numbers", - "schema": { - "exclusiveMinimum": -972783798187987123879878123.18878137 - }, - "tests": [ - { - "description": "comparison works for very negative numbers", - "data": -972783798187987123879878123.188781371, - "valid": false - } - ] - } -] + { + "description": "integer", + "schema": {"type": "integer"}, + "tests": [ + { + "description": "a bignum is an integer", + "data": 1.23456789101112e+52, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a negative bignum is an integer", + "data": -1.23456789101112e+52, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "number", + "schema": {"type": "number"}, + "tests": [ + { + "description": "a bignum is a number", + "data": 9.82492837492349e+52, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a negative bignum is a number", + "data": -9.82492837492349e+52, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "string", + "schema": {"type": "string"}, + "tests": [ + { + "description": "a bignum is not a string", + "data": 9.82492837492349e+52, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "integer comparison", + "schema": {"maximum": 18446744073709600000}, + "tests": [ + { + "description": "comparison works for high numbers", + "data": 18446744073709600000, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/maximum", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "comparison works for very negative numbers", + "data": -18446744073709600000, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/minimum", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "float comparison with high precision", + "schema": {"exclusiveMaximum": 9.72783798187987e+26}, + "tests": [ + { + "description": "comparison works for high numbers", + "data": 9.72783798187987e+26, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMaximum", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "float comparison with high precision on negative numbers", + "schema": {"exclusiveMinimum": -9.72783798187987e+26}, + "tests": [ + { + "description": "comparison works for very negative numbers", + "data": -9.72783798187987e+26, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/exclusiveMinimum", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/content.json b/tests/draft2019-06/optional/content.json index 3f5a7430..b26f410a 100644 --- a/tests/draft2019-06/optional/content.json +++ b/tests/draft2019-06/optional/content.json @@ -1,77 +1,277 @@ [ - { - "description": "validation of string-encoded content based on media type", - "schema": { - "contentMediaType": "application/json" - }, - "tests": [ - { - "description": "a valid JSON document", - "data": "{\"foo\": \"bar\"}", - "valid": true - }, - { - "description": "an invalid JSON document", - "data": "{:}", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 100, - "valid": true - } - ] + { + "description": "validation of string-encoded content based on media type", + "schema": {"contentMediaType": "application/json"}, + "tests": [ + { + "description": "a valid JSON document", + "data": "{\"foo\": \"bar\"}", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": 100, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + } + ] + } + } + } + ] + }, + { + "description": "validation of binary string-encoding", + "schema": {"contentEncoding": "base64"}, + "tests": [ + { + "description": "a valid base64 string", + "data": "eyJmb28iOiAiYmFyIn0K", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": 100, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + } + } + } + ] + }, + { + "description": "validation of binary-encoded media type documents", + "schema": { + "contentMediaType": "application/json", + "contentEncoding": "base64" }, - { - "description": "validation of binary string-encoding", - "schema": { - "contentEncoding": "base64" - }, - "tests": [ - { - "description": "a valid base64 string", - "data": "eyJmb28iOiAiYmFyIn0K", - "valid": true - }, - { - "description": "an invalid base64 string (% is not a valid character)", - "data": "eyJmb28iOi%iYmFyIn0K", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 100, - "valid": true - } - ] - }, - { - "description": "validation of binary-encoded media type documents", - "schema": { - "contentMediaType": "application/json", - "contentEncoding": "base64" - }, - "tests": [ - { - "description": "a valid base64-encoded JSON document", - "data": "eyJmb28iOiAiYmFyIn0K", - "valid": true - }, - { - "description": "a validly-encoded invalid JSON document", - "data": "ezp9Cg==", - "valid": false - }, - { - "description": "an invalid base64 string that is valid JSON", - "data": "{}", - "valid": false - }, - { - "description": "ignores non-strings", - "data": 100, - "valid": true - } - ] - } -] + "tests": [ + { + "description": "a valid base64-encoded JSON document", + "data": "eyJmb28iOiAiYmFyIn0K", + "valid": true, + "output": { + "basic": { + "valid": true, + "annotations": [ + {"valid": true, "keywordLocation": "#", "instanceLocation": "#"}, + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": 100, + "valid": true, + "output": { + "basic": { + "valid": true, + "annotations": [ + {"valid": true, "keywordLocation": "#", "instanceLocation": "#"}, + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/contentMediaType", + "instanceLocation": "#", + "annotation": "application/json" + }, + { + "valid": true, + "keywordLocation": "#/contentEncoding", + "instanceLocation": "#", + "annotation": "base64" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/ecmascript-regex.json b/tests/draft2019-06/optional/ecmascript-regex.json index 08dc9360..5a59cb7c 100644 --- a/tests/draft2019-06/optional/ecmascript-regex.json +++ b/tests/draft2019-06/optional/ecmascript-regex.json @@ -1,13 +1,13 @@ [ - { - "description": "ECMA 262 regex non-compliance", - "schema": { "format": "regex" }, - "tests": [ - { - "description": "ECMA 262 has no support for \\Z anchor from .NET", - "data": "^\\S(|(.|\\n)*\\S)\\Z", - "valid": false - } - ] - } -] + { + "description": "ECMA 262 regex non-compliance", + "schema": {"format": "regex"}, + "tests": [ + { + "description": "ECMA 262 has no support for \\Z anchor from .NET", + "data": "^\\S(|(.|\n)*\\S)\\Z", + "valid": false + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/date-time.json b/tests/draft2019-06/optional/format/date-time.json index dfccee6e..87d94dbc 100644 --- a/tests/draft2019-06/optional/format/date-time.json +++ b/tests/draft2019-06/optional/format/date-time.json @@ -1,53 +1,252 @@ [ - { - "description": "validation of date-time strings", - "schema": {"format": "date-time"}, - "tests": [ - { - "description": "a valid date-time string", - "data": "1963-06-19T08:30:06.283185Z", - "valid": true - }, - { - "description": "a valid date-time string without second fraction", - "data": "1963-06-19T08:30:06Z", - "valid": true - }, - { - "description": "a valid date-time string with plus offset", - "data": "1937-01-01T12:00:27.87+00:20", - "valid": true - }, - { - "description": "a valid date-time string with minus offset", - "data": "1990-12-31T15:59:50.123-08:00", - "valid": true - }, - { - "description": "a invalid day in date-time string", - "data": "1990-02-31T15:59:60.123-08:00", - "valid": false - }, - { - "description": "an invalid offset in date-time string", - "data": "1990-12-31T15:59:60-24:00", - "valid": false - }, - { - "description": "an invalid date-time string", - "data": "06/19/1963 08:30:06 PST", - "valid": false - }, - { - "description": "case-insensitive T and Z", - "data": "1963-06-19t08:30:06.283185z", - "valid": true - }, - { - "description": "only RFC3339 not all of ISO 8601 are valid", - "data": "2013-350T01:01:01", - "valid": false - } - ] - } -] + { + "description": "validation of date-time strings", + "schema": {"format": "date-time"}, + "tests": [ + { + "description": "a valid date-time string", + "data": "1963-06-19T08:30:06.283185Z", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + } + ] + } + } + }, + { + "description": "a valid date-time string without second fraction", + "data": "1963-06-19T08:30:06Z", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + } + ] + } + } + }, + { + "description": "a valid date-time string with plus offset", + "data": "1937-01-01T12:00:27.87+00:20", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + } + ] + } + } + }, + { + "description": "a valid date-time string with minus offset", + "data": "1990-12-31T15:59:50.123-08:00", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date-time" + } + ] + } + } + }, + { + "description": "a invalid day in date-time string", + "data": "1990-02-31T15:59:60.123-08:00", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid offset in date-time string", + "data": "1990-12-31T15:59:60-24:00", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid date-time string", + "data": "06/19/1963 08:30:06 PST", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "only RFC3339 not all of ISO 8601 are valid", + "data": "2013-350T01:01:01", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/date.json b/tests/draft2019-06/optional/format/date.json index cd23baae..735ac6ac 100644 --- a/tests/draft2019-06/optional/format/date.json +++ b/tests/draft2019-06/optional/format/date.json @@ -1,23 +1,98 @@ [ - { - "description": "validation of date strings", - "schema": {"format": "date"}, - "tests": [ - { - "description": "a valid date string", - "data": "1963-06-19", - "valid": true - }, - { - "description": "an invalid date-time string", - "data": "06/19/1963", - "valid": false - }, - { - "description": "only RFC3339 not all of ISO 8601 are valid", - "data": "2013-350", - "valid": false - } - ] - } -] + { + "description": "validation of date strings", + "schema": {"format": "date"}, + "tests": [ + { + "description": "a valid date string", + "data": "1963-06-19", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "date" + } + ] + } + } + }, + { + "description": "an invalid date-time string", + "data": "06/19/1963", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "only RFC3339 not all of ISO 8601 are valid", + "data": "2013-350", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/email.json b/tests/draft2019-06/optional/format/email.json index c837c84b..b31d4f68 100644 --- a/tests/draft2019-06/optional/format/email.json +++ b/tests/draft2019-06/optional/format/email.json @@ -1,18 +1,69 @@ [ - { - "description": "validation of e-mail addresses", - "schema": {"format": "email"}, - "tests": [ - { - "description": "a valid e-mail address", - "data": "joe.bloggs@example.com", - "valid": true - }, - { - "description": "an invalid e-mail address", - "data": "2962", - "valid": false - } - ] - } -] + { + "description": "validation of e-mail addresses", + "schema": {"format": "email"}, + "tests": [ + { + "description": "a valid e-mail address", + "data": "joe.bloggs@example.com", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "email" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "email" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "email" + } + ] + } + } + }, + { + "description": "an invalid e-mail address", + "data": "2962", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/hostname.json b/tests/draft2019-06/optional/format/hostname.json index d22e57db..797b0747 100644 --- a/tests/draft2019-06/optional/format/hostname.json +++ b/tests/draft2019-06/optional/format/hostname.json @@ -1,33 +1,130 @@ [ - { - "description": "validation of host names", - "schema": {"format": "hostname"}, - "tests": [ - { - "description": "a valid host name", - "data": "www.example.com", - "valid": true - }, - { - "description": "a valid punycoded IDN hostname", - "data": "xn--4gbwdl.xn--wgbh1c", - "valid": true - }, - { - "description": "a host name starting with an illegal character", - "data": "-a-host-name-that-starts-with--", - "valid": false - }, - { - "description": "a host name containing illegal characters", - "data": "not_a_valid_host_name", - "valid": false - }, - { - "description": "a host name with a component too long", - "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component", - "valid": false - } - ] - } -] + { + "description": "validation of host names", + "schema": {"format": "hostname"}, + "tests": [ + { + "description": "a valid host name", + "data": "www.example.com", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + } + ] + } + } + }, + { + "description": "a valid punycoded IDN hostname", + "data": "xn--4gbwdl.xn--wgbh1c", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "hostname" + } + ] + } + } + }, + { + "description": "a host name containing illegal characters", + "data": "not_a_valid_host_name", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a host name with a component too long", + "data": "a-vvvvvvvvvvvvvvvveeeeeeeeeeeeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyyyyy-long-host-name-component", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/idn-email.json b/tests/draft2019-06/optional/format/idn-email.json index 637409ea..03db6127 100644 --- a/tests/draft2019-06/optional/format/idn-email.json +++ b/tests/draft2019-06/optional/format/idn-email.json @@ -1,18 +1,40 @@ [ - { - "description": "validation of an internationalized e-mail addresses", - "schema": {"format": "idn-email"}, - "tests": [ - { - "description": "a valid idn e-mail (example@example.test in Hangul)", - "data": "실례@실례.테스트", - "valid": true - }, - { - "description": "an invalid idn e-mail address", - "data": "2962", - "valid": false - } - ] - } -] + { + "description": "validation of an internationalized e-mail addresses", + "schema": {"format": "idn-email"}, + "tests": [ + { + "description": "a valid idn e-mail (example@example.test in Hangul)", + "data": "실례@실례.테스트", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-email" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-email" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-email" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/idn-hostname.json b/tests/draft2019-06/optional/format/idn-hostname.json index 3291820e..13fa5c8f 100644 --- a/tests/draft2019-06/optional/format/idn-hostname.json +++ b/tests/draft2019-06/optional/format/idn-hostname.json @@ -1,28 +1,40 @@ [ - { - "description": "validation of internationalized host names", - "schema": {"format": "idn-hostname"}, - "tests": [ - { - "description": "a valid host name (example.test in Hangul)", - "data": "실례.테스트", - "valid": true - }, - { - "description": "illegal first char U+302E Hangul single dot tone mark", - "data": "〮실례.테스트", - "valid": false - }, - { - "description": "contains illegal char U+302E Hangul single dot tone mark", - "data": "실〮례.테스트", - "valid": false - }, - { - "description": "a host name with a component too long", - "data": "실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실실례례테스트례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례례례례례례례례테스트례례례례례례례례례례례례테스트례례실례.테스트", - "valid": false - } - ] - } -] + { + "description": "validation of internationalized host names", + "schema": {"format": "idn-hostname"}, + "tests": [ + { + "description": "a valid host name (example.test in Hangul)", + "data": "실례.테스트", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-hostname" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-hostname" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "idn-hostname" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/ipv4.json b/tests/draft2019-06/optional/format/ipv4.json index 661148a7..6e5b39be 100644 --- a/tests/draft2019-06/optional/format/ipv4.json +++ b/tests/draft2019-06/optional/format/ipv4.json @@ -1,33 +1,156 @@ [ - { - "description": "validation of IP addresses", - "schema": {"format": "ipv4"}, - "tests": [ - { - "description": "a valid IP address", - "data": "192.168.0.1", - "valid": true - }, - { - "description": "an IP address with too many components", - "data": "127.0.0.0.1", - "valid": false - }, - { - "description": "an IP address with out-of-range values", - "data": "256.256.256.256", - "valid": false - }, - { - "description": "an IP address without 4 components", - "data": "127.0", - "valid": false - }, - { - "description": "an IP address as an integer", - "data": "0x7f000001", - "valid": false - } - ] - } -] + { + "description": "validation of IP addresses", + "schema": {"format": "ipv4"}, + "tests": [ + { + "description": "a valid IP address", + "data": "192.168.0.1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv4" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv4" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv4" + } + ] + } + } + }, + { + "description": "an IP address with too many components", + "data": "127.0.0.0.1", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an IP address with out-of-range values", + "data": "256.256.256.256", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an IP address without 4 components", + "data": "127.0", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an IP address as an integer", + "data": "0x7f000001", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/ipv6.json b/tests/draft2019-06/optional/format/ipv6.json index f67559b3..519a4f61 100644 --- a/tests/draft2019-06/optional/format/ipv6.json +++ b/tests/draft2019-06/optional/format/ipv6.json @@ -1,28 +1,127 @@ [ - { - "description": "validation of IPv6 addresses", - "schema": {"format": "ipv6"}, - "tests": [ - { - "description": "a valid IPv6 address", - "data": "::1", - "valid": true - }, - { - "description": "an IPv6 address with out-of-range values", - "data": "12345::", - "valid": false - }, - { - "description": "an IPv6 address with too many components", - "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1", - "valid": false - }, - { - "description": "an IPv6 address containing illegal characters", - "data": "::laptop", - "valid": false - } - ] - } -] + { + "description": "validation of IPv6 addresses", + "schema": {"format": "ipv6"}, + "tests": [ + { + "description": "a valid IPv6 address", + "data": "::1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv6" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv6" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "ipv6" + } + ] + } + } + }, + { + "description": "an IPv6 address with out-of-range values", + "data": "12345::", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an IPv6 address with too many components", + "data": "1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an IPv6 address containing illegal characters", + "data": "::laptop", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/iri-reference.json b/tests/draft2019-06/optional/format/iri-reference.json index 1fd779c2..5fe48651 100644 --- a/tests/draft2019-06/optional/format/iri-reference.json +++ b/tests/draft2019-06/optional/format/iri-reference.json @@ -1,43 +1,168 @@ [ - { - "description": "validation of IRI References", - "schema": {"format": "iri-reference"}, - "tests": [ - { - "description": "a valid IRI", - "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx", - "valid": true - }, - { - "description": "a valid protocol-relative IRI Reference", - "data": "//ƒøø.ßår/?∂éœ=πîx#πîüx", - "valid": true - }, - { - "description": "a valid relative IRI Reference", - "data": "/âππ", - "valid": true - }, - { - "description": "an invalid IRI Reference", - "data": "\\\\WINDOWS\\filëßåré", - "valid": false - }, - { - "description": "a valid IRI Reference", - "data": "âππ", - "valid": true - }, - { - "description": "a valid IRI fragment", - "data": "#ƒrägmênt", - "valid": true - }, - { - "description": "an invalid IRI fragment", - "data": "#ƒräg\\mênt", - "valid": false - } - ] - } -] + { + "description": "validation of IRI References", + "schema": {"format": "iri-reference"}, + "tests": [ + { + "description": "a valid IRI", + "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + } + ] + } + } + }, + { + "description": "a valid protocol-relative IRI Reference", + "data": "//ƒøø.ßår/?∂éœ=πîx#πîüx", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + } + ] + } + } + }, + { + "description": "a valid relative IRI Reference", + "data": "/âππ", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + } + ] + } + } + }, + { + "description": "a valid IRI Reference", + "data": "âππ", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + } + ] + } + } + }, + { + "description": "a valid IRI fragment", + "data": "#ƒrägmênt", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri-reference" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/iri.json b/tests/draft2019-06/optional/format/iri.json index ed54094c..e3faf555 100644 --- a/tests/draft2019-06/optional/format/iri.json +++ b/tests/draft2019-06/optional/format/iri.json @@ -1,53 +1,223 @@ [ - { - "description": "validation of IRIs", - "schema": {"format": "iri"}, - "tests": [ - { - "description": "a valid IRI with anchor tag", - "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx", - "valid": true - }, - { - "description": "a valid IRI with anchor tag and parantheses", - "data": "http://ƒøø.com/blah_(wîkïpédiå)_blah#ßité-1", - "valid": true - }, - { - "description": "a valid IRI with URL-encoded stuff", - "data": "http://ƒøø.ßår/?q=Test%20URL-encoded%20stuff", - "valid": true - }, - { - "description": "a valid IRI with many special characters", - "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", - "valid": true - }, - { - "description": "a valid IRI based on IPv6", - "data": "http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]", - "valid": true - }, - { - "description": "an invalid IRI based on IPv6", - "data": "http://2001:0db8:85a3:0000:0000:8a2e:0370:7334", - "valid": false - }, - { - "description": "an invalid relative IRI Reference", - "data": "/abc", - "valid": false - }, - { - "description": "an invalid IRI", - "data": "\\\\WINDOWS\\filëßåré", - "valid": false - }, - { - "description": "an invalid IRI though valid IRI reference", - "data": "âππ", - "valid": false - } - ] - } -] + { + "description": "validation of IRIs", + "schema": {"format": "iri"}, + "tests": [ + { + "description": "a valid IRI with anchor tag", + "data": "http://ƒøø.ßår/?∂éœ=πîx#πîüx", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + } + ] + } + } + }, + { + "description": "a valid IRI with anchor tag and parantheses", + "data": "http://ƒøø.com/blah_(wîkïpédiå)_blah#ßité-1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + } + ] + } + } + }, + { + "description": "a valid IRI with many special characters", + "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + } + ] + } + } + }, + { + "description": "a valid IRI based on IPv6", + "data": "http://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "iri" + } + ] + } + } + }, + { + "description": "an invalid IRI based on IPv6", + "data": "http://2001:0db8:85a3:0000:0000:8a2e:0370:7334", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid IRI", + "data": "\\\\WINDOWS\filëßåré", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid IRI though valid IRI reference", + "data": "âππ", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/json-pointer.json b/tests/draft2019-06/optional/format/json-pointer.json index 65c2f064..1544a980 100644 --- a/tests/draft2019-06/optional/format/json-pointer.json +++ b/tests/draft2019-06/optional/format/json-pointer.json @@ -1,168 +1,964 @@ [ - { - "description": "validation of JSON-pointers (JSON String Representation)", - "schema": {"format": "json-pointer"}, - "tests": [ - { - "description": "a valid JSON-pointer", - "data": "/foo/bar~0/baz~1/%a", - "valid": true - }, - { - "description": "not a valid JSON-pointer (~ not escaped)", - "data": "/foo/bar~", - "valid": false - }, - { - "description": "valid JSON-pointer with empty segment", - "data": "/foo//bar", - "valid": true - }, - { - "description": "valid JSON-pointer with the last empty segment", - "data": "/foo/bar/", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #1", - "data": "", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #2", - "data": "/foo", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #3", - "data": "/foo/0", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #4", - "data": "/", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #5", - "data": "/a~1b", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #6", - "data": "/c%d", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #7", - "data": "/e^f", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #8", - "data": "/g|h", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #9", - "data": "/i\\j", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #10", - "data": "/k\"l", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #11", - "data": "/ ", - "valid": true - }, - { - "description": "valid JSON-pointer as stated in RFC 6901 #12", - "data": "/m~0n", - "valid": true - }, - { - "description": "valid JSON-pointer used adding to the last array position", - "data": "/foo/-", - "valid": true - }, - { - "description": "valid JSON-pointer (- used as object member name)", - "data": "/foo/-/bar", - "valid": true - }, - { - "description": "valid JSON-pointer (multiple escaped characters)", - "data": "/~1~0~0~1~1", - "valid": true - }, - { - "description": "valid JSON-pointer (escaped with fraction part) #1", - "data": "/~1.1", - "valid": true - }, - { - "description": "valid JSON-pointer (escaped with fraction part) #2", - "data": "/~0.1", - "valid": true - }, - { - "description": "not a valid JSON-pointer (URI Fragment Identifier) #1", - "data": "#", - "valid": false - }, - { - "description": "not a valid JSON-pointer (URI Fragment Identifier) #2", - "data": "#/", - "valid": false - }, - { - "description": "not a valid JSON-pointer (URI Fragment Identifier) #3", - "data": "#a", - "valid": false - }, - { - "description": "not a valid JSON-pointer (some escaped, but not all) #1", - "data": "/~0~", - "valid": false - }, - { - "description": "not a valid JSON-pointer (some escaped, but not all) #2", - "data": "/~0/~", - "valid": false - }, - { - "description": "not a valid JSON-pointer (wrong escape character) #1", - "data": "/~2", - "valid": false - }, - { - "description": "not a valid JSON-pointer (wrong escape character) #2", - "data": "/~-1", - "valid": false - }, - { - "description": "not a valid JSON-pointer (multiple characters not escaped)", - "data": "/~~", - "valid": false - }, - { - "description": "not a valid JSON-pointer (isn't empty nor starts with /) #1", - "data": "a", - "valid": false - }, - { - "description": "not a valid JSON-pointer (isn't empty nor starts with /) #2", - "data": "0", - "valid": false - }, - { - "description": "not a valid JSON-pointer (isn't empty nor starts with /) #3", - "data": "a/a", - "valid": false - } - ] - } -] + { + "description": "validation of JSON-pointers (JSON String Representation)", + "schema": {"format": "json-pointer"}, + "tests": [ + { + "description": "a valid JSON-pointer", + "data": "/foo/bar~0/baz~1/%a", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (~ not escaped)", + "data": "/foo/bar~", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "valid JSON-pointer with the last empty segment", + "data": "/foo/bar/", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #1", + "data": "", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #2", + "data": "/foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #3", + "data": "/foo/0", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #4", + "data": "/", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #5", + "data": "/a~1b", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #6", + "data": "/c%d", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #7", + "data": "/e^f", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #8", + "data": "/g|h", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #9", + "data": "/i\\j", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #10", + "data": "/k\"l", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #11", + "data": "/ ", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer as stated in RFC 6901 #12", + "data": "/m~0n", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer used adding to the last array position", + "data": "/foo/-", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer (- used as object member name)", + "data": "/foo/-/bar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer (multiple escaped characters)", + "data": "/~1~0~0~1~1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer (escaped with fraction part) #1", + "data": "/~1.1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "valid JSON-pointer (escaped with fraction part) #2", + "data": "/~0.1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "json-pointer" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (URI Fragment Identifier) #1", + "data": "#", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (URI Fragment Identifier) #2", + "data": "#/", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (URI Fragment Identifier) #3", + "data": "#a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (some escaped, but not all) #1", + "data": "/~0~", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (some escaped, but not all) #2", + "data": "/~0/~", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (wrong escape character) #1", + "data": "/~2", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (wrong escape character) #2", + "data": "/~-1", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (multiple characters not escaped)", + "data": "/~~", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (isn't empty nor starts with /) #1", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (isn't empty nor starts with /) #2", + "data": "0", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "not a valid JSON-pointer (isn't empty nor starts with /) #3", + "data": "a/a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/regex.json b/tests/draft2019-06/optional/format/regex.json index d99d021e..ff1a3873 100644 --- a/tests/draft2019-06/optional/format/regex.json +++ b/tests/draft2019-06/optional/format/regex.json @@ -1,18 +1,40 @@ [ - { - "description": "validation of regular expressions", - "schema": {"format": "regex"}, - "tests": [ - { - "description": "a valid regular expression", - "data": "([abc])+\\s+$", - "valid": true - }, - { - "description": "a regular expression with unclosed parens is invalid", - "data": "^(abc]", - "valid": false - } - ] - } -] + { + "description": "validation of regular expressions", + "schema": {"format": "regex"}, + "tests": [ + { + "description": "a valid regular expression", + "data": "([abc])+\\s+$", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "regex" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "regex" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "regex" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/relative-json-pointer.json b/tests/draft2019-06/optional/format/relative-json-pointer.json index ceeb743a..01ca5fae 100644 --- a/tests/draft2019-06/optional/format/relative-json-pointer.json +++ b/tests/draft2019-06/optional/format/relative-json-pointer.json @@ -1,33 +1,37 @@ [ - { - "description": "validation of Relative JSON Pointers (RJP)", - "schema": {"format": "relative-json-pointer"}, - "tests": [ - { - "description": "a valid upwards RJP", - "data": "1", - "valid": true - }, - { - "description": "a valid downwards RJP", - "data": "0/foo/bar", - "valid": true - }, - { - "description": "a valid up and then down RJP, with array index", - "data": "2/0/baz/1/zip", - "valid": true - }, - { - "description": "a valid RJP taking the member or index name", - "data": "0#", - "valid": true - }, - { - "description": "an invalid RJP that is a valid JSON Pointer", - "data": "/foo/bar", - "valid": false - } - ] - } -] + { + "description": "validation of Relative JSON Pointers (RJP)", + "schema": {"format": "relative-json-pointer"}, + "tests": [ + { + "description": "an invalid RJP that is a valid JSON Pointer", + "data": "/foo/bar", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/time.json b/tests/draft2019-06/optional/format/time.json index 4ec8a01a..1003afc9 100644 --- a/tests/draft2019-06/optional/format/time.json +++ b/tests/draft2019-06/optional/format/time.json @@ -1,23 +1,40 @@ [ - { - "description": "validation of time strings", - "schema": {"format": "time"}, - "tests": [ - { - "description": "a valid time string", - "data": "08:30:06.283185Z", - "valid": true - }, - { - "description": "an invalid time string", - "data": "08:30:06 PST", - "valid": false - }, - { - "description": "only RFC3339 not all of ISO 8601 are valid", - "data": "01:01:01,1111", - "valid": false - } - ] - } -] + { + "description": "validation of time strings", + "schema": {"format": "time"}, + "tests": [ + { + "description": "a valid time string", + "data": "08:30:06.283185Z", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "time" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "time" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "time" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/uri-reference.json b/tests/draft2019-06/optional/format/uri-reference.json index e4c9eef6..bebcf69a 100644 --- a/tests/draft2019-06/optional/format/uri-reference.json +++ b/tests/draft2019-06/optional/format/uri-reference.json @@ -1,43 +1,168 @@ [ - { - "description": "validation of URI References", - "schema": {"format": "uri-reference"}, - "tests": [ - { - "description": "a valid URI", - "data": "http://foo.bar/?baz=qux#quux", - "valid": true - }, - { - "description": "a valid protocol-relative URI Reference", - "data": "//foo.bar/?baz=qux#quux", - "valid": true - }, - { - "description": "a valid relative URI Reference", - "data": "/abc", - "valid": true - }, - { - "description": "an invalid URI Reference", - "data": "\\\\WINDOWS\\fileshare", - "valid": false - }, - { - "description": "a valid URI Reference", - "data": "abc", - "valid": true - }, - { - "description": "a valid URI fragment", - "data": "#fragment", - "valid": true - }, - { - "description": "an invalid URI fragment", - "data": "#frag\\ment", - "valid": false - } - ] - } -] + { + "description": "validation of URI References", + "schema": {"format": "uri-reference"}, + "tests": [ + { + "description": "a valid URI", + "data": "http://foo.bar/?baz=qux#quux", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + } + ] + } + } + }, + { + "description": "a valid protocol-relative URI Reference", + "data": "//foo.bar/?baz=qux#quux", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + } + ] + } + } + }, + { + "description": "a valid relative URI Reference", + "data": "/abc", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + } + ] + } + } + }, + { + "description": "a valid URI Reference", + "data": "abc", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + } + ] + } + } + }, + { + "description": "a valid URI fragment", + "data": "#fragment", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri-reference" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/uri-template.json b/tests/draft2019-06/optional/format/uri-template.json index d8396a5a..65c6da9c 100644 --- a/tests/draft2019-06/optional/format/uri-template.json +++ b/tests/draft2019-06/optional/format/uri-template.json @@ -1,30 +1,37 @@ [ - { - "description": "format: uri-template", - "schema": { - "format": "uri-template" - }, - "tests": [ - { - "description": "a valid uri-template", - "data": "http://example.com/dictionary/{term:1}/{term}", - "valid": true - }, - { - "description": "an invalid uri-template", - "data": "http://example.com/dictionary/{term:1}/{term", - "valid": false - }, - { - "description": "a valid uri-template without variables", - "data": "http://example.com/dictionary", - "valid": true - }, - { - "description": "a valid relative uri-template", - "data": "dictionary/{term:1}/{term}", - "valid": true - } - ] - } -] + { + "description": "format: uri-template", + "schema": {"format": "uri-template"}, + "tests": [ + { + "description": "an invalid uri-template", + "data": "http://example.com/dictionary/{term:1}/{term", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/format/uri.json b/tests/draft2019-06/optional/format/uri.json index 25cc40c8..b48281b8 100644 --- a/tests/draft2019-06/optional/format/uri.json +++ b/tests/draft2019-06/optional/format/uri.json @@ -1,103 +1,540 @@ [ - { - "description": "validation of URIs", - "schema": {"format": "uri"}, - "tests": [ - { - "description": "a valid URL with anchor tag", - "data": "http://foo.bar/?baz=qux#quux", - "valid": true - }, - { - "description": "a valid URL with anchor tag and parantheses", - "data": "http://foo.com/blah_(wikipedia)_blah#cite-1", - "valid": true - }, - { - "description": "a valid URL with URL-encoded stuff", - "data": "http://foo.bar/?q=Test%20URL-encoded%20stuff", - "valid": true - }, - { - "description": "a valid puny-coded URL ", - "data": "http://xn--nw2a.xn--j6w193g/", - "valid": true - }, - { - "description": "a valid URL with many special characters", - "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", - "valid": true - }, - { - "description": "a valid URL based on IPv4", - "data": "http://223.255.255.254", - "valid": true - }, - { - "description": "a valid URL with ftp scheme", - "data": "ftp://ftp.is.co.za/rfc/rfc1808.txt", - "valid": true - }, - { - "description": "a valid URL for a simple text file", - "data": "http://www.ietf.org/rfc/rfc2396.txt", - "valid": true - }, - { - "description": "a valid URL ", - "data": "ldap://[2001:db8::7]/c=GB?objectClass?one", - "valid": true - }, - { - "description": "a valid mailto URI", - "data": "mailto:John.Doe@example.com", - "valid": true - }, - { - "description": "a valid newsgroup URI", - "data": "news:comp.infosystems.www.servers.unix", - "valid": true - }, - { - "description": "a valid tel URI", - "data": "tel:+1-816-555-1212", - "valid": true - }, - { - "description": "a valid URN", - "data": "urn:oasis:names:specification:docbook:dtd:xml:4.1.2", - "valid": true - }, - { - "description": "an invalid protocol-relative URI Reference", - "data": "//foo.bar/?baz=qux#quux", - "valid": false - }, - { - "description": "an invalid relative URI Reference", - "data": "/abc", - "valid": false - }, - { - "description": "an invalid URI", - "data": "\\\\WINDOWS\\fileshare", - "valid": false - }, - { - "description": "an invalid URI though valid URI reference", - "data": "abc", - "valid": false - }, - { - "description": "an invalid URI with spaces", - "data": "http:// shouldfail.com", - "valid": false - }, - { - "description": "an invalid URI with spaces and missing scheme", - "data": ":// should fail", - "valid": false - } - ] - } -] + { + "description": "validation of URIs", + "schema": {"format": "uri"}, + "tests": [ + { + "description": "a valid URL with anchor tag", + "data": "http://foo.bar/?baz=qux#quux", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL with anchor tag and parantheses", + "data": "http://foo.com/blah_(wikipedia)_blah#cite-1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL with URL-encoded stuff", + "data": "http://foo.bar/?q=Test%20URL-encoded%20stuff", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid puny-coded URL ", + "data": "http://xn--nw2a.xn--j6w193g/", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL with many special characters", + "data": "http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL based on IPv4", + "data": "http://223.255.255.254", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL with ftp scheme", + "data": "ftp://ftp.is.co.za/rfc/rfc1808.txt", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL for a simple text file", + "data": "http://www.ietf.org/rfc/rfc2396.txt", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URL ", + "data": "ldap://[2001:db8::7]/c=GB?objectClass?one", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid mailto URI", + "data": "mailto:John.Doe@example.com", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid newsgroup URI", + "data": "news:comp.infosystems.www.servers.unix", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid tel URI", + "data": "tel:+1-816-555-1212", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "a valid URN", + "data": "urn:oasis:names:specification:docbook:dtd:xml:4.1.2", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/format", + "instanceLocation": "#", + "annotation": "uri" + } + ] + } + } + }, + { + "description": "an invalid protocol-relative URI Reference", + "data": "//foo.bar/?baz=qux#quux", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid URI", + "data": "\\\\WINDOWS\fileshare", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid URI with spaces", + "data": "http:// shouldfail.com", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an invalid URI with spaces and missing scheme", + "data": ":// should fail", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/format", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/optional/zeroTerminatedFloats.json b/tests/draft2019-06/optional/zeroTerminatedFloats.json index 1bcdf960..72b8712d 100644 --- a/tests/draft2019-06/optional/zeroTerminatedFloats.json +++ b/tests/draft2019-06/optional/zeroTerminatedFloats.json @@ -1,15 +1,37 @@ [ - { - "description": "some languages do not distinguish between different types of numeric value", - "schema": { - "type": "integer" - }, - "tests": [ - { - "description": "a float without fractional part is an integer", - "data": 1.0, - "valid": true - } - ] - } -] + { + "description": "some languages do not distinguish between different types of numeric value", + "schema": {"type": "integer"}, + "tests": [ + { + "description": "a float without fractional part is an integer", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/pattern.json b/tests/draft2019-06/pattern.json index 25e72997..fdf98705 100644 --- a/tests/draft2019-06/pattern.json +++ b/tests/draft2019-06/pattern.json @@ -1,34 +1,130 @@ [ - { - "description": "pattern validation", - "schema": {"pattern": "^a*$"}, - "tests": [ - { - "description": "a matching pattern is valid", - "data": "aaa", - "valid": true - }, - { - "description": "a non-matching pattern is invalid", - "data": "abc", - "valid": false - }, - { - "description": "ignores non-strings", - "data": true, - "valid": true - } - ] - }, - { - "description": "pattern is not anchored", - "schema": {"pattern": "a+"}, - "tests": [ - { - "description": "matches a substring", - "data": "xxaayy", - "valid": true - } - ] - } -] + { + "description": "pattern validation", + "schema": {"pattern": "^a*$"}, + "tests": [ + { + "description": "a matching pattern is valid", + "data": "aaa", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a non-matching pattern is invalid", + "data": "abc", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores non-strings", + "data": true, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "pattern is not anchored", + "schema": {"pattern": "a+"}, + "tests": [ + { + "description": "matches a substring", + "data": "xxaayy", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/pattern", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/patternProperties.json b/tests/draft2019-06/patternProperties.json index 1d04a167..d98ad986 100644 --- a/tests/draft2019-06/patternProperties.json +++ b/tests/draft2019-06/patternProperties.json @@ -1,151 +1,1010 @@ [ - { - "description": - "patternProperties validates properties matching a regex", - "schema": { - "patternProperties": { - "f.*o": {"type": "integer"} - } - }, - "tests": [ - { - "description": "a single valid match is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "multiple valid matches is valid", - "data": {"foo": 1, "foooooo" : 2}, - "valid": true - }, - { - "description": "a single invalid match is invalid", - "data": {"foo": "bar", "fooooo": 2}, - "valid": false - }, - { - "description": "multiple invalid matches is invalid", - "data": {"foo": "bar", "foooooo" : "baz"}, - "valid": false - }, - { - "description": "ignores arrays", - "data": ["foo"], - "valid": true - }, - { - "description": "ignores strings", - "data": "foo", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] + { + "description": "patternProperties validates properties matching a regex", + "schema": {"patternProperties": {"f.*o": {"type": "integer"}}}, + "tests": [ + { + "description": "a single valid match is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "multiple valid matches is valid", + "data": {"foo": 1, "foooooo": 2}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foooooo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foooooo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "a single invalid match is invalid", + "data": {"foo": "bar", "fooooo": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/fooooo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/fooooo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "multiple invalid matches is invalid", + "data": {"foo": "bar", "foooooo": "baz"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foooooo" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foooooo" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o", + "instanceLocation": "#/foooooo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.*o/type", + "instanceLocation": "#/foooooo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": ["foo"], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "multiple simultaneous patternProperties are validated", + "schema": { + "patternProperties": {"a*": {"type": "integer"}, "aaa*": {"maximum": 20}} }, - { - "description": "multiple simultaneous patternProperties are validated", - "schema": { - "patternProperties": { - "a*": {"type": "integer"}, - "aaa*": {"maximum": 20} - } - }, - "tests": [ - { - "description": "a single valid match is valid", - "data": {"a": 21}, - "valid": true - }, - { - "description": "a simultaneous match is valid", - "data": {"aaaa": 18}, - "valid": true - }, - { - "description": "multiple matches is valid", - "data": {"a": 21, "aaaa": 18}, - "valid": true - }, - { - "description": "an invalid due to one is invalid", - "data": {"a": "bar"}, - "valid": false - }, - { - "description": "an invalid due to the other is invalid", - "data": {"aaaa": 31}, - "valid": false - }, - { - "description": "an invalid due to both is invalid", - "data": {"aaa": "foo", "aaaa": 31}, - "valid": false - } - ] + "tests": [ + { + "description": "a single valid match is valid", + "data": {"a": 21}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/a", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/a" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "a simultaneous match is valid", + "data": {"aaaa": 18}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaaa" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "multiple matches is valid", + "data": {"a": 21, "aaaa": 18}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/a", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/a" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaaa" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "an invalid due to one is invalid", + "data": {"a": "bar"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/a" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/a" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/a", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/a" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "an invalid due to the other is invalid", + "data": {"aaaa": 31}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaaa" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*", + "instanceLocation": "#/aaaa", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "an invalid due to both is invalid", + "data": {"aaa": "foo", "aaaa": 31}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaa" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaa" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/aaa", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaa" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/a*", + "instanceLocation": "#/aaaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/a*/type", + "instanceLocation": "#/aaaa" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*", + "instanceLocation": "#/aaa", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaa" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*", + "instanceLocation": "#/aaaa", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/aaa*/maximum", + "instanceLocation": "#/aaaa" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "regexes are not anchored by default and are case sensitive", + "schema": { + "patternProperties": { + "[0-9]{2,}": {"type": "boolean"}, + "X_": {"type": "string"} + } }, - { - "description": "regexes are not anchored by default and are case sensitive", - "schema": { - "patternProperties": { - "[0-9]{2,}": { "type": "boolean" }, - "X_": { "type": "string" } - } - }, - "tests": [ - { - "description": "non recognized members are ignored", - "data": { "answer 1": "42" }, - "valid": true - }, - { - "description": "recognized members are accounted for", - "data": { "a31b": null }, - "valid": false - }, - { - "description": "regexes are case sensitive", - "data": { "a_x_3": 3 }, - "valid": true - }, - { - "description": "regexes are case sensitive, 2", - "data": { "a_X_3": 3 }, - "valid": false - } - ] - }, - { - "description": "patternProperties with boolean schemas", - "schema": { - "patternProperties": { - "f.*": true, - "b.*": false - } - }, - "tests": [ - { - "description": "object with property matching schema true is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "object with property matching 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 - } - ] - } -] + "tests": [ + { + "description": "non recognized members are ignored", + "data": {"answer 1": "42"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "recognized members are accounted for", + "data": {"a31b": null}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/[0-9]{2,}/type", + "instanceLocation": "#/a31b" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/[0-9]{2,}/type", + "instanceLocation": "#/a31b" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/[0-9]{2,}", + "instanceLocation": "#/a31b", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/[0-9]{2,}/type", + "instanceLocation": "#/a31b" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "regexes are case sensitive", + "data": {"a_x_3": 3}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "regexes are case sensitive, 2", + "data": {"a_X_3": 3}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/X_/type", + "instanceLocation": "#/a_X_3" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/X_/type", + "instanceLocation": "#/a_X_3" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/X_", + "instanceLocation": "#/a_X_3", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/X_/type", + "instanceLocation": "#/a_X_3" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "patternProperties with boolean schemas", + "schema": {"patternProperties": {"f.*": true, "b.*": false}}, + "tests": [ + { + "description": "object with property matching schema true is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*", + "instanceLocation": "#/foo" + } + ] + } + ] + } + } + }, + { + "description": "object with property matching schema false is invalid", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + } + ] + } + ] + } + } + }, + { + "description": "object with both properties is invalid", + "data": {"foo": 1, "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.*", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties/b.*", + "instanceLocation": "#/bar" + } + ] + } + ] + } + } + }, + { + "description": "empty object is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/properties.json b/tests/draft2019-06/properties.json index b86c1819..034ba52f 100644 --- a/tests/draft2019-06/properties.json +++ b/tests/draft2019-06/properties.json @@ -1,167 +1,1233 @@ [ - { - "description": "object properties validation", - "schema": { - "properties": { - "foo": {"type": "integer"}, - "bar": {"type": "string"} - } - }, - "tests": [ - { - "description": "both properties present and valid is valid", - "data": {"foo": 1, "bar": "baz"}, - "valid": true - }, - { - "description": "one property invalid is invalid", - "data": {"foo": 1, "bar": {}}, - "valid": false - }, - { - "description": "both properties invalid is invalid", - "data": {"foo": [], "bar": {}}, - "valid": false - }, - { - "description": "doesn't invalidate other properties", - "data": {"quux": []}, - "valid": true - }, - { - "description": "ignores arrays", - "data": [], - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] + { + "description": "object properties validation", + "schema": { + "properties": {"foo": {"type": "integer"}, "bar": {"type": "string"}} }, - { - "description": - "properties, patternProperties, additionalProperties interaction", - "schema": { - "properties": { - "foo": {"type": "array", "maxItems": 3}, - "bar": {"type": "array"} - }, - "patternProperties": {"f.o": {"minItems": 2}}, - "additionalProperties": {"type": "integer"} - }, - "tests": [ - { - "description": "property validates property", - "data": {"foo": [1, 2]}, - "valid": true - }, - { - "description": "property invalidates property", - "data": {"foo": [1, 2, 3, 4]}, - "valid": false - }, - { - "description": "patternProperty invalidates property", - "data": {"foo": []}, - "valid": false - }, - { - "description": "patternProperty validates nonproperty", - "data": {"fxo": [1, 2]}, - "valid": true - }, - { - "description": "patternProperty invalidates nonproperty", - "data": {"fxo": []}, - "valid": false - }, - { - "description": "additionalProperty ignores property", - "data": {"bar": []}, - "valid": true - }, - { - "description": "additionalProperty validates others", - "data": {"quux": 3}, - "valid": true - }, - { - "description": "additionalProperty invalidates others", - "data": {"quux": "foo"}, - "valid": false - } - ] + "tests": [ + { + "description": "both properties present and valid is valid", + "data": {"foo": 1, "bar": "baz"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "one property invalid is invalid", + "data": {"foo": 1, "bar": {}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "both properties invalid is invalid", + "data": {"foo": [], "bar": {}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "doesn't invalidate other properties", + "data": {"quux": []}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "properties, patternProperties, additionalProperties interaction", + "schema": { + "properties": { + "foo": {"type": "array", "maxItems": 3}, + "bar": {"type": "array"} + }, + "patternProperties": {"f.o": {"minItems": 2}}, + "additionalProperties": {"type": "integer"} }, - { - "description": "properties with boolean schema", - "schema": { - "properties": { - "foo": true, - "bar": false - } - }, - "tests": [ - { - "description": "no property present is valid", - "data": {}, - "valid": true - }, - { - "description": "only 'true' property present is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "only 'false' property present is invalid", - "data": {"bar": 2}, - "valid": false - }, - { - "description": "both properties present is invalid", - "data": {"foo": 1, "bar": 2}, - "valid": false - } - ] + "tests": [ + { + "description": "property validates property", + "data": {"foo": [1, 2]}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/maxItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "property invalidates property", + "data": {"foo": [1, 2, 3, 4]}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/foo/maxItems", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/foo/maxItems", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo/maxItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "patternProperty invalidates property", + "data": {"foo": []}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/type", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/maxItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.o", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/foo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "patternProperty validates nonproperty", + "data": {"fxo": [1, 2]}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o", + "instanceLocation": "#/fxo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/fxo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "patternProperty invalidates nonproperty", + "data": {"fxo": []}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/fxo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/fxo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.o", + "instanceLocation": "#/fxo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/patternProperties/f.o/minItems", + "instanceLocation": "#/fxo" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "additionalProperty ignores property", + "data": {"bar": []}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/type", + "instanceLocation": "#/bar" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "additionalProperty validates others", + "data": {"quux": 3}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/quux", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "additionalProperty invalidates others", + "data": {"quux": "foo"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/patternProperties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#/quux", + "errors": [ + { + "valid": false, + "keywordLocation": "#/additionalProperties/type", + "instanceLocation": "#/quux" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "properties with boolean schema", + "schema": {"properties": {"foo": true, "bar": false}}, + "tests": [ + { + "description": "no property present is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "only 'true' property present is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + } + ] + } + ] + } + } + }, + { + "description": "only 'false' property present is invalid", + "data": {"bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + } + ] + } + } + }, + { + "description": "both properties present is invalid", + "data": {"foo": 1, "bar": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "properties with escaped characters", + "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"} + } }, - { - "description": "properties with escaped characters", - "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": [ + { + "description": "object with all numbers is valid", + "data": { + "foo\nbar": 1, + "foo\"bar": 1, + "foo\bar": 1, + "foo\rbar": 1, + "foo\tbar": 1, + "foo\fbar": 1 + }, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\nbar", + "instanceLocation": "#/foo\nbar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\nbar/type", + "instanceLocation": "#/foo\nbar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo\"bar", + "instanceLocation": "#/foo\"bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\"bar/type", + "instanceLocation": "#/foo\"bar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo\bar", + "instanceLocation": "#/foo\bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\bar/type", + "instanceLocation": "#/foo\bar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo\rbar", + "instanceLocation": "#/foo\rbar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\rbar/type", + "instanceLocation": "#/foo\rbar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo\tbar", + "instanceLocation": "#/foo\tbar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\tbar/type", + "instanceLocation": "#/foo\tbar" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo\fbar", + "instanceLocation": "#/foo\fbar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\fbar/type", + "instanceLocation": "#/foo\fbar" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "object with strings is invalid", + "data": { + "foo\nbar": "1", + "foo\"bar": "1", + "foo\bar": "1", + "foo\rbar": "1", + "foo\tbar": "1", + "foo\fbar": "1" }, - "tests": [ - { - "description": "object with all numbers is valid", - "data": { - "foo\nbar": 1, - "foo\"bar": 1, - "foo\\bar": 1, - "foo\rbar": 1, - "foo\tbar": 1, - "foo\fbar": 1 - }, - "valid": true - }, - { - "description": "object with strings is invalid", - "data": { - "foo\nbar": "1", - "foo\"bar": "1", - "foo\\bar": "1", - "foo\rbar": "1", - "foo\tbar": "1", - "foo\fbar": "1" - }, - "valid": false - } - ] - } -] + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\nbar/type", + "instanceLocation": "#/foo\nbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/type", + "instanceLocation": "#/foo\"bar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\bar/type", + "instanceLocation": "#/foo\bar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\rbar/type", + "instanceLocation": "#/foo\rbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\tbar/type", + "instanceLocation": "#/foo\tbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\fbar/type", + "instanceLocation": "#/foo\fbar" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\nbar/type", + "instanceLocation": "#/foo\nbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/type", + "instanceLocation": "#/foo\"bar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\bar/type", + "instanceLocation": "#/foo\bar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\rbar/type", + "instanceLocation": "#/foo\rbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\tbar/type", + "instanceLocation": "#/foo\tbar" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\fbar/type", + "instanceLocation": "#/foo\fbar" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\nbar", + "instanceLocation": "#/foo\nbar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\nbar/type", + "instanceLocation": "#/foo\nbar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar", + "instanceLocation": "#/foo\"bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/type", + "instanceLocation": "#/foo\"bar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\bar", + "instanceLocation": "#/foo\bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\bar/type", + "instanceLocation": "#/foo\bar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\rbar", + "instanceLocation": "#/foo\rbar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\rbar/type", + "instanceLocation": "#/foo\rbar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\tbar", + "instanceLocation": "#/foo\tbar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\tbar/type", + "instanceLocation": "#/foo\tbar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/foo\fbar", + "instanceLocation": "#/foo\fbar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\fbar/type", + "instanceLocation": "#/foo\fbar" + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/propertyNames.json b/tests/draft2019-06/propertyNames.json index 8423690d..f57b5def 100644 --- a/tests/draft2019-06/propertyNames.json +++ b/tests/draft2019-06/propertyNames.json @@ -1,78 +1,376 @@ [ - { - "description": "propertyNames validation", - "schema": { - "propertyNames": {"maxLength": 3} - }, - "tests": [ - { - "description": "all property names valid", - "data": { - "f": {}, - "foo": {} - }, - "valid": true - }, - { - "description": "some property names invalid", - "data": { - "foo": {}, - "foobar": {} - }, - "valid": false - }, - { - "description": "object without properties is valid", - "data": {}, - "valid": true - }, - { - "description": "ignores arrays", - "data": [1, 2, 3, 4], - "valid": true - }, - { - "description": "ignores strings", - "data": "foobar", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] - }, - { - "description": "propertyNames with boolean schema true", - "schema": {"propertyNames": true}, - "tests": [ - { - "description": "object with any properties is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "empty object is valid", - "data": {}, - "valid": true - } - ] - }, - { - "description": "propertyNames with boolean schema false", - "schema": {"propertyNames": false}, - "tests": [ - { - "description": "object with any properties is invalid", - "data": {"foo": 1}, - "valid": false - }, - { - "description": "empty object is valid", - "data": {}, - "valid": true - } - ] - } -] + { + "description": "propertyNames validation", + "schema": {"propertyNames": {"maxLength": 3}}, + "tests": [ + { + "description": "all property names valid", + "data": {"f": {}, "foo": {}}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/f", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/f" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "some property names invalid", + "data": {"foo": {}, "foobar": {}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/foobar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/foobar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foobar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/propertyNames/maxLength", + "instanceLocation": "#/foobar" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "object without properties is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [1, 2, 3, 4], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "foobar", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "propertyNames with boolean schema true", + "schema": {"propertyNames": true}, + "tests": [ + { + "description": "object with any properties is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo" + } + ] + } + ] + } + } + }, + { + "description": "empty object is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "propertyNames with boolean schema false", + "schema": {"propertyNames": false}, + "tests": [ + { + "description": "object with any properties is invalid", + "data": {"foo": 1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#/foo" + } + ] + } + ] + } + } + }, + { + "description": "empty object is valid", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/propertyNames", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/ref.json b/tests/draft2019-06/ref.json index dbeb7d3b..cd55718a 100644 --- a/tests/draft2019-06/ref.json +++ b/tests/draft2019-06/ref.json @@ -1,443 +1,4305 @@ [ - { - "description": "root pointer ref", - "schema": { - "properties": { - "foo": {"$ref": "#"} - }, - "additionalProperties": false - }, - "tests": [ - { - "description": "match", - "data": {"foo": false}, - "valid": true - }, - { - "description": "recursive match", - "data": {"foo": {"foo": false}}, - "valid": true - }, - { - "description": "mismatch", - "data": {"bar": false}, - "valid": false - }, - { - "description": "recursive mismatch", - "data": {"foo": {"bar": false}}, - "valid": false - } - ] + { + "description": "root pointer ref", + "schema": { + "properties": {"foo": {"$ref": "#"}}, + "additionalProperties": false }, - { - "description": "relative pointer ref to object", - "schema": { - "properties": { - "foo": {"type": "integer"}, - "bar": {"$ref": "#/properties/foo"} - } - }, - "tests": [ - { - "description": "match", - "data": {"bar": 3}, - "valid": true - }, - { - "description": "mismatch", - "data": {"bar": true}, - "valid": false - } - ] + "tests": [ + { + "description": "match", + "data": {"foo": false}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties", + "instanceLocation": "#/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "recursive match", + "data": {"foo": {"foo": false}}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties/foo/$ref", + "instanceLocation": "#/foo/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties/foo/$ref", + "instanceLocation": "#/foo/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties/foo/$ref/properties", + "instanceLocation": "#/foo/foo" + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": {"bar": false}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "recursive mismatch", + "data": {"foo": {"bar": false}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/properties", + "instanceLocation": "#/foo" + }, + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/additionalProperties", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/additionalProperties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "relative pointer ref to object", + "schema": { + "properties": { + "foo": {"type": "integer"}, + "bar": {"$ref": "#/properties/foo"} + } }, - { - "description": "relative pointer ref to array", - "schema": { - "items": [ - {"type": "integer"}, - {"$ref": "#/items/0"} + "tests": [ + { + "description": "match", + "data": {"bar": 3}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/$ref", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/$ref", + "instanceLocation": "#/bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar/$ref/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } ] - }, - "tests": [ - { - "description": "match array", - "data": [1, 2], - "valid": true - }, - { - "description": "mismatch array", - "data": [1, "foo"], - "valid": false - } - ] + } + } + }, + { + "description": "mismatch", + "data": {"bar": true}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/bar/$ref/type", + "instanceLocation": "#/bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/bar/$ref/type", + "instanceLocation": "#/bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar/$ref", + "instanceLocation": "#/bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/bar/$ref/type", + "instanceLocation": "#/bar" + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "relative pointer ref to array", + "schema": {"items": [{"type": "integer"}, {"$ref": "#/items/0"}]}, + "tests": [ + { + "description": "match array", + "data": [1, 2], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "mismatch array", + "data": [1, "foo"], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/items/0", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/0/type", + "instanceLocation": "#/0" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/1/$ref", + "instanceLocation": "#/1", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/1/$ref/type", + "instanceLocation": "#/1" + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "escaped pointer ref", + "schema": { + "properties": { + "tilda": {"$ref": "#/tilda~0field"}, + "slash": {"$ref": "#/slash~1field"}, + "percent": {"$ref": "#/percent%25field"} + }, + "tilda~field": {"type": "integer"}, + "slash/field": {"type": "integer"}, + "percent%field": {"type": "integer"} }, - { - "description": "escaped pointer ref", - "schema": { - "tilda~field": {"type": "integer"}, - "slash/field": {"type": "integer"}, - "percent%field": {"type": "integer"}, - "properties": { - "tilda": {"$ref": "#/tilda~0field"}, - "slash": {"$ref": "#/slash~1field"}, - "percent": {"$ref": "#/percent%25field"} - } - }, - "tests": [ - { - "description": "slash invalid", - "data": {"slash": "aoeu"}, - "valid": false - }, - { - "description": "tilda invalid", - "data": {"tilda": "aoeu"}, - "valid": false - }, - { - "description": "percent invalid", - "data": {"percent": "aoeu"}, - "valid": false - }, - { - "description": "slash valid", - "data": {"slash": 123}, - "valid": true - }, - { - "description": "tilda valid", - "data": {"tilda": 123}, - "valid": true - }, - { - "description": "percent valid", - "data": {"percent": 123}, - "valid": true - } - ] + "tests": [ + { + "description": "slash invalid", + "data": {"slash": "aoeu"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/slash/$ref/type", + "instanceLocation": "#/slash" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/slash/$ref/type", + "instanceLocation": "#/slash" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/slash/$ref", + "instanceLocation": "#/slash", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/slash/$ref", + "instanceLocation": "#/slash", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/slash/$ref/type", + "instanceLocation": "#/slash" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "tilda invalid", + "data": {"tilda": "aoeu"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/tilda/$ref/type", + "instanceLocation": "#/tilda" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/tilda/$ref/type", + "instanceLocation": "#/tilda" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/tilda/$ref", + "instanceLocation": "#/tilda", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/tilda/$ref", + "instanceLocation": "#/tilda", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/tilda/$ref/type", + "instanceLocation": "#/tilda" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "percent invalid", + "data": {"percent": "aoeu"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/percent/$ref/type", + "instanceLocation": "#/percent" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/percent/$ref/type", + "instanceLocation": "#/percent" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/percent/$ref", + "instanceLocation": "#/percent", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/percent/$ref", + "instanceLocation": "#/percent", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/percent/$ref/type", + "instanceLocation": "#/percent" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "slash valid", + "data": {"slash": 123}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/slash/$ref", + "instanceLocation": "#/slash", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/slash/$ref", + "instanceLocation": "#/slash", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/slash/$ref/type", + "instanceLocation": "#/slash" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "tilda valid", + "data": {"tilda": 123}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/tilda/$ref", + "instanceLocation": "#/tilda", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/tilda/$ref", + "instanceLocation": "#/tilda", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/tilda/$ref/type", + "instanceLocation": "#/tilda" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "percent valid", + "data": {"percent": 123}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/percent/$ref", + "instanceLocation": "#/percent", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/percent/$ref", + "instanceLocation": "#/percent", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/percent/$ref/type", + "instanceLocation": "#/percent" + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "nested refs", + "schema": { + "$defs": { + "a": {"type": "integer"}, + "b": {"$ref": "#/$defs/a"}, + "c": {"$ref": "#/$defs/b"} + }, + "$ref": "#/$defs/c" }, - { - "description": "nested refs", - "schema": { - "$defs": { - "a": {"type": "integer"}, - "b": {"$ref": "#/$defs/a"}, - "c": {"$ref": "#/$defs/b"} - }, - "$ref": "#/$defs/c" - }, - "tests": [ - { - "description": "nested ref valid", - "data": 5, - "valid": true - }, - { - "description": "nested ref invalid", - "data": "a", - "valid": false - } - ] + "tests": [ + { + "description": "nested ref valid", + "data": 5, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "nested ref invalid", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref/$ref/$ref/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/$ref/$ref/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "ref overrides any sibling keywords", + "schema": { + "$defs": {"reffed": {"type": "array"}}, + "properties": {"foo": {"$ref": "#/$defs/reffed", "maxItems": 2}} }, - { - "description": "ref overrides any sibling keywords", - "schema": { - "$defs": { - "reffed": { - "type": "array" - } - }, - "properties": { - "foo": { - "$ref": "#/$defs/reffed", - "maxItems": 2 - } - } - }, - "tests": [ - { - "description": "ref valid", - "data": { "foo": [] }, - "valid": true - }, - { - "description": "ref valid, maxItems ignored", - "data": { "foo": [ 1, 2, 3] }, - "valid": true - }, - { - "description": "ref invalid", - "data": { "foo": "string" }, - "valid": false - } - ] + "tests": [ + { + "description": "ref valid", + "data": {"foo": []}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "ref valid, maxItems ignored", + "data": {"foo": [1, 2, 3]}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo/$ref/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "ref invalid", + "data": {"foo": "string"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/type", + "instanceLocation": "#/foo" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/type", + "instanceLocation": "#/foo" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref", + "instanceLocation": "#/foo", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo/$ref/type", + "instanceLocation": "#/foo" + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "remote ref, containing refs itself", + "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, + "tests": [ + { + "description": "remote ref valid", + "data": {"minLength": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + } + ] + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + } + ] + } + ] + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/minLength/$ref", + "instanceLocation": "#/minLength", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeIntegerDefault0/$ref", + "instanceLocation": "#/minLength", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger", + "instanceLocation": "#/minLength", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/type", + "instanceLocation": "#/minLength" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/minimum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/minimum", + "instanceLocation": "#/minLength" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "remote ref invalid", + "data": {"minLength": -1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/minimum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/minimum", + "instanceLocation": "#/minLength" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/minimum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/minimum", + "instanceLocation": "#/minLength" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/title", + "instanceLocation": "#", + "annotation": "Core schema meta-schema" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/title", + "instanceLocation": "#", + "annotation": "Core vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/0/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/core#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/1/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/title", + "instanceLocation": "#", + "annotation": "Applicator vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/applicator#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/2/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/title", + "instanceLocation": "#", + "annotation": "Validation vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/properties/minLength/$ref", + "instanceLocation": "#/minLength", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeIntegerDefault0/$ref", + "instanceLocation": "#/minLength", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger", + "instanceLocation": "#/minLength", + "errors": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/type", + "instanceLocation": "#/minLength" + }, + { + "valid": false, + "keywordLocation": "#/$ref/allOf/2/$ref/properties/minLength/$ref/$ref/minimum", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs/nonNegativeInteger/minimum", + "instanceLocation": "#/minLength" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/2/$ref/$defs", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/validation#/$defs", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/3/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/title", + "instanceLocation": "#", + "annotation": "Meta-data vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/3/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/meta-data#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/4/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/title", + "instanceLocation": "#", + "annotation": "Format vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/4/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/format#/properties", + "instanceLocation": "#" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/allOf/5/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/title", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/title", + "instanceLocation": "#", + "annotation": "Content vocabulary meta-schema" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/allOf/5/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/meta/content#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$ref/properties", + "absoluteKeywordLocation": "http://json-schema.org/draft/2019-06/schema#/properties", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "property named $ref that is not a reference", + "schema": {"properties": {"$ref": {"type": "string"}}}, + "tests": [ + { + "description": "property named $ref valid", + "data": {"$ref": "a"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/$ref", + "instanceLocation": "#/$ref", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/$ref/type", + "instanceLocation": "#/$ref" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "property named $ref invalid", + "data": {"$ref": 2}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/$ref/type", + "instanceLocation": "#/$ref" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/$ref/type", + "instanceLocation": "#/$ref" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/$ref", + "instanceLocation": "#/$ref", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/$ref/type", + "instanceLocation": "#/$ref" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "$ref to boolean schema true", + "schema": {"$ref": "#/$defs/bool", "$defs": {"bool": true}}, + "tests": [ + { + "description": "any value is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "$ref to boolean schema false", + "schema": {"$ref": "#/$defs/bool", "$defs": {"bool": false}}, + "tests": [ + { + "description": "any value is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "Recursive references between schemas", + "schema": { + "$id": "http://localhost:1234/tree", + "description": "tree of nodes", + "type": "object", + "properties": { + "meta": {"type": "string"}, + "nodes": {"type": "array", "items": {"$ref": "node"}} + }, + "required": ["meta", "nodes"], + "$defs": { + "node": { + "$id": "http://localhost:1234/node", + "description": "node", + "type": "object", + "properties": { + "value": {"type": "number"}, + "subtree": {"$ref": "tree"} + }, + "required": ["value"] + } + } }, - { - "description": "remote ref, containing refs itself", - "schema": {"$ref": "http://json-schema.org/draft/2019-06/schema#"}, - "tests": [ + "tests": [ + { + "description": "valid tree", + "data": { + "meta": "root", + "nodes": [ { - "description": "remote ref valid", - "data": {"minLength": 1}, - "valid": true + "value": 1, + "subtree": { + "meta": "child", + "nodes": [{"value": 1.1}, {"value": 1.2}] + } }, { - "description": "remote ref invalid", - "data": {"minLength": -1}, - "valid": false - } - ] - }, - { - "description": "property named $ref that is not a reference", - "schema": { - "properties": { - "$ref": {"type": "string"} + "value": 2, + "subtree": { + "meta": "child", + "nodes": [{"value": 2.1}, {"value": 2.2}] + } } + ] }, - "tests": [ + "valid": true, + "output": { + "basic": { + "valid": true, + "annotations": [ + {"valid": true, "keywordLocation": "#", "instanceLocation": "#"}, + { + "valid": true, + "keywordLocation": "#/description", + "instanceLocation": "#", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items", + "instanceLocation": "#/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/description", + "instanceLocation": "#", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items", + "instanceLocation": "#/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/description", + "instanceLocation": "#", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/meta", + "instanceLocation": "#/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/meta/type", + "instanceLocation": "#/meta" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes", + "instanceLocation": "#/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/type", + "instanceLocation": "#/nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items", + "instanceLocation": "#/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/value" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/subtree/$ref", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/type", + "instanceLocation": "#/nodes/0/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties", + "instanceLocation": "#/nodes/0/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta", + "instanceLocation": "#/nodes/0/subtree/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta/type", + "instanceLocation": "#/nodes/0/subtree/meta" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/type", + "instanceLocation": "#/nodes/0/subtree/nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0/subtree/nodes/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0/subtree/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/subtree/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/1/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0/subtree/nodes/1" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/tree#/required", + "instanceLocation": "#/nodes/0/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/tree#/$defs", + "instanceLocation": "#/nodes/0/subtree" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/value" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/subtree/$ref", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/type", + "instanceLocation": "#/nodes/1/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta", + "instanceLocation": "#/nodes/1/subtree/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta/type", + "instanceLocation": "#/nodes/1/subtree/meta" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/type", + "instanceLocation": "#/nodes/1/subtree/nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1/subtree/nodes/0" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/subtree/nodes/0/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/subtree/nodes/0/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1/subtree/nodes/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1/subtree/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/subtree/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/subtree/nodes/1/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1/subtree/nodes/1" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/tree#/required", + "instanceLocation": "#/nodes/1/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/tree#/$defs", + "instanceLocation": "#/nodes/1/subtree" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "invalid tree", + "data": { + "meta": "root", + "nodes": [ { - "description": "property named $ref valid", - "data": {"$ref": "a"}, - "valid": true + "value": 1, + "subtree": { + "meta": "child", + "nodes": [{"value": "string is invalid"}, {"value": 1.2}] + } }, { - "description": "property named $ref invalid", - "data": {"$ref": 2}, - "valid": false - } - ] - }, - { - "description": "$ref to boolean schema true", - "schema": { - "$ref": "#/$defs/bool", - "$defs": { - "bool": true - } - }, - "tests": [ - { - "description": "any value is valid", - "data": "foo", - "valid": true - } - ] - }, - { - "description": "$ref to boolean schema false", - "schema": { - "$ref": "#/$defs/bool", - "$defs": { - "bool": false + "value": 2, + "subtree": { + "meta": "child", + "nodes": [{"value": 2.1}, {"value": 2.2}] + } } + ] }, - "tests": [ - { - "description": "any value is invalid", - "data": "foo", - "valid": false - } - ] - }, - { - "description": "Recursive references between schemas", - "schema": { - "$id": "http://localhost:1234/tree", - "description": "tree of nodes", - "type": "object", - "properties": { - "meta": {"type": "string"}, - "nodes": { - "type": "array", - "items": {"$ref": "node"} - } - }, - "required": ["meta", "nodes"], - "$defs": { - "node": { - "$id": "http://localhost:1234/node", - "description": "node", - "type": "object", - "properties": { - "value": {"type": "number"}, - "subtree": {"$ref": "tree"} - }, - "required": ["value"] - } - } - }, - "tests": [ - { - "description": "valid tree", - "data": { - "meta": "root", - "nodes": [ - { - "value": 1, - "subtree": { - "meta": "child", - "nodes": [ - {"value": 1.1}, - {"value": 1.2} - ] - } - }, - { - "value": 2, - "subtree": { - "meta": "child", - "nodes": [ - {"value": 2.1}, - {"value": 2.2} - ] - } - } + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/description", + "instanceLocation": "#", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/meta", + "instanceLocation": "#/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/meta/type", + "instanceLocation": "#/meta" + } ] - }, - "valid": true - }, - { - "description": "invalid tree", - "data": { - "meta": "root", - "nodes": [ - { - "value": 1, - "subtree": { - "meta": "child", - "nodes": [ - {"value": "string is invalid"}, - {"value": 1.2} + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes", + "instanceLocation": "#/nodes", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/type", + "instanceLocation": "#/nodes" + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items", + "instanceLocation": "#/nodes", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0" + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/value" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/subtree/$ref", + "instanceLocation": "#/nodes/0/subtree", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/0/subtree", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/0/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/type", + "instanceLocation": "#/nodes/0/subtree" + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties", + "instanceLocation": "#/nodes/0/subtree", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta", + "instanceLocation": "#/nodes/0/subtree/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta/type", + "instanceLocation": "#/nodes/0/subtree/meta" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes", + "instanceLocation": "#/nodes/0/subtree/nodes", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/type", + "instanceLocation": "#/nodes/0/subtree/nodes" + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/0/subtree/nodes", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0" + }, + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0/subtree/nodes/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/0/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0/subtree/nodes/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/0/subtree/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/0/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/0/subtree/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/0/subtree/nodes/1/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0/subtree/nodes/1" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/tree#/required", + "instanceLocation": "#/nodes/0/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/tree#/$defs", + "instanceLocation": "#/nodes/0/subtree" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/0" + } ] - } - }, - { - "value": 2, - "subtree": { - "meta": "child", - "nodes": [ - {"value": 2.1}, - {"value": 2.2} + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/value" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/subtree/$ref", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/tree#/description", + "instanceLocation": "#/nodes/1/subtree", + "annotation": "tree of nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/type", + "instanceLocation": "#/nodes/1/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties", + "instanceLocation": "#/nodes/1/subtree", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta", + "instanceLocation": "#/nodes/1/subtree/meta", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/meta/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/meta/type", + "instanceLocation": "#/nodes/1/subtree/meta" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/type", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/type", + "instanceLocation": "#/nodes/1/subtree/nodes" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items", + "instanceLocation": "#/nodes/1/subtree/nodes", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1/subtree/nodes/0" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1/subtree/nodes/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/subtree/nodes/0/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/subtree/nodes/0/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1/subtree/nodes/0" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/tree#/properties/nodes/items/$ref", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/node#", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/description", + "absoluteKeywordLocation": "http://localhost:1234/node#/description", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotation": "node" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/type", + "instanceLocation": "#/nodes/1/subtree/nodes/1" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties", + "instanceLocation": "#/nodes/1/subtree/nodes/1", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value", + "instanceLocation": "#/nodes/1/subtree/nodes/1/value", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/properties/value/type", + "absoluteKeywordLocation": "http://localhost:1234/node#/properties/value/type", + "instanceLocation": "#/nodes/1/subtree/nodes/1/value" + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1/subtree/nodes/1" + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/tree#/required", + "instanceLocation": "#/nodes/1/subtree" + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/properties/subtree/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/tree#/$defs", + "instanceLocation": "#/nodes/1/subtree" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/nodes/items/$ref/required", + "absoluteKeywordLocation": "http://localhost:1234/node#/required", + "instanceLocation": "#/nodes/1" + } ] - } - } + } + ] + } + ] + } ] - }, - "valid": false - } - ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "refs with quote", + "schema": { + "properties": {"foo\"bar": {"$ref": "#/$defs/foo%22bar"}}, + "$defs": {"foo\"bar": {"type": "number"}} }, - { - "description": "refs with quote", - "schema": { - "properties": { - "foo\"bar": {"$ref": "#/$defs/foo%22bar"} - }, - "$defs": { - "foo\"bar": {"type": "number"} - } - }, - "tests": [ - { - "description": "object with numbers is valid", - "data": { - "foo\"bar": 1 - }, - "valid": true - }, - { - "description": "object with strings is invalid", - "data": { - "foo\"bar": "1" - }, - "valid": false - } - ] + "tests": [ + { + "description": "object with numbers is valid", + "data": {"foo\"bar": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\"bar/$ref", + "instanceLocation": "#/foo\"bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\"bar/$ref", + "instanceLocation": "#/foo\"bar", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo\"bar/$ref/type", + "instanceLocation": "#/foo\"bar" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "object with strings is invalid", + "data": {"foo\"bar": "1"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/$ref/type", + "instanceLocation": "#/foo\"bar" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/$ref/type", + "instanceLocation": "#/foo\"bar" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/$ref", + "instanceLocation": "#/foo\"bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/$ref", + "instanceLocation": "#/foo\"bar", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/foo\"bar/$ref/type", + "instanceLocation": "#/foo\"bar" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "Location-independent identifier", + "schema": { + "allOf": [{"$ref": "#foo"}], + "$defs": {"A": {"$id": "#foo", "type": "integer"}} }, - { - "description": "Location-independent identifier", - "schema": { - "allOf": [{ - "$ref": "#foo" - }], - "$defs": { - "A": { - "$id": "#foo", - "type": "integer" - } - } - }, - "tests": [ - { - "data": 1, - "description": "match", - "valid": true - }, - { - "data": "a", - "description": "mismatch", - "valid": false - } - ] + "tests": [ + { + "description": "match", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "Location-independent identifier with absolute URI", + "schema": { + "allOf": [{"$ref": "http://localhost:1234/bar#foo"}], + "$defs": { + "A": {"$id": "http://localhost:1234/bar#foo", "type": "integer"} + } }, - { - "description": "Location-independent identifier with absolute URI", - "schema": { - "allOf": [{ - "$ref": "http://localhost:1234/bar#foo" - }], - "$defs": { - "A": { - "$id": "http://localhost:1234/bar#foo", - "type": "integer" - } - } - }, - "tests": [ - { - "data": 1, - "description": "match", - "valid": true - }, - { - "data": "a", - "description": "mismatch", - "valid": false - } - ] + "tests": [ + { + "description": "match", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "Location-independent identifier with base URI change in subschema", + "schema": { + "$id": "http://localhost:1234/root", + "allOf": [{"$ref": "http://localhost:1234/nested.json#foo"}], + "$defs": { + "A": { + "$id": "nested.json", + "$defs": {"B": {"$id": "#foo", "type": "integer"}} + } + } }, - { - "description": "Location-independent identifier with base URI change in subschema", - "schema": { - "$id": "http://localhost:1234/root", - "allOf": [{ - "$ref": "http://localhost:1234/nested.json#foo" - }], - "$defs": { - "A": { - "$id": "nested.json", - "$defs": { - "B": { - "$id": "#foo", - "type": "integer" - } - } - } - } - }, - "tests": [ - { - "data": 1, - "description": "match", - "valid": true - }, - { - "data": "a", - "description": "mismatch", - "valid": false - } - ] - } -] + "tests": [ + { + "description": "match", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "absoluteKeywordLocation": "http://localhost:1234/root#/allOf/0/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "mismatch", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "absoluteKeywordLocation": "http://localhost:1234/root#/allOf/0/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/allOf/0/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/nested.json#foo#/foo/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/refRemote.json b/tests/draft2019-06/refRemote.json index 9cadc926..72ada10e 100644 --- a/tests/draft2019-06/refRemote.json +++ b/tests/draft2019-06/refRemote.json @@ -1,167 +1,1175 @@ [ - { - "description": "remote ref", - "schema": {"$ref": "http://localhost:1234/integer.json"}, - "tests": [ - { - "description": "remote ref valid", - "data": 1, - "valid": true - }, - { - "description": "remote ref invalid", - "data": "a", - "valid": false - } - ] + { + "description": "remote ref", + "schema": {"$ref": "http://localhost:1234/integer.json"}, + "tests": [ + { + "description": "remote ref valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#/type", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "remote ref invalid", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/integer.json#/type", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "fragment within remote ref", + "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"}, + "tests": [ + { + "description": "remote fragment valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + } + ] + } + ] + } + } + }, + { + "description": "remote fragment invalid", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + } + ] + } + ] + } + } + } + ] + }, + { + "description": "ref within remote ref", + "schema": {"$ref": "http://localhost:1234/subSchemas.json#/refToInteger"}, + "tests": [ + { + "description": "ref within ref valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/refToInteger/$ref", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/$ref/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + }, + { + "description": "ref within ref invalid", + "data": "a", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/$ref/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/$ref/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/refToInteger/$ref", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/$ref/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/subSchemas.json#/integer/type", + "instanceLocation": "#" + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "base URI change", + "schema": { + "$id": "http://localhost:1234/", + "items": {"$id": "folder/", "items": {"$ref": "folderInteger.json"}} }, - { - "description": "fragment within remote ref", - "schema": {"$ref": "http://localhost:1234/subSchemas.json#/integer"}, - "tests": [ - { - "description": "remote fragment valid", - "data": 1, - "valid": true - }, - { - "description": "remote fragment invalid", - "data": "a", - "valid": false - } - ] + "tests": [ + { + "description": "base URI change ref valid", + "data": [[1]], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/items/items/$ref", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/0/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/items/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/0/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "base URI change ref invalid", + "data": [["a"]], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/items/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/0/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/items/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/0/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items", + "instanceLocation": "#/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/items/items/$ref", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/0/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/items/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/0/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + }, + { + "description": "base URI change - change folder", + "schema": { + "$id": "http://localhost:1234/scope_change_defs1.json", + "type": "object", + "properties": {"list": {"$ref": "#/$defs/baz"}}, + "$defs": { + "baz": { + "$id": "folder/", + "type": "array", + "items": {"$ref": "folderInteger.json"} + } + } }, - { - "description": "ref within remote ref", - "schema": { - "$ref": "http://localhost:1234/subSchemas.json#/refToInteger" - }, - "tests": [ - { - "description": "ref within ref valid", - "data": 1, - "valid": true - }, - { - "description": "ref within ref invalid", - "data": "a", - "valid": false - } - ] + "tests": [ + { + "description": "number is valid", + "data": {"list": [1]}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/scope_change_defs1.json#/properties/list/$ref", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/type", + "instanceLocation": "#/list" + }, + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/items", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/items/$ref", + "instanceLocation": "#/list/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/list/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "string is invalid", + "data": {"list": ["a"]}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/scope_change_defs1.json#/properties/list/$ref", + "instanceLocation": "#/list", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz", + "instanceLocation": "#/list", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/type", + "instanceLocation": "#/list" + }, + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/items", + "instanceLocation": "#/list", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/items/$ref", + "instanceLocation": "#/list/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/list/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "base URI change - change folder in subschema", + "schema": { + "$id": "http://localhost:1234/scope_change_defs2.json", + "type": "object", + "properties": {"list": {"$ref": "#/$defs/baz/$defs/bar"}}, + "$defs": { + "baz": { + "$id": "folder/", + "$defs": { + "bar": {"type": "array", "items": {"$ref": "folderInteger.json"}} + } + } + } }, - { - "description": "base URI change", - "schema": { - "$id": "http://localhost:1234/", - "items": { - "$id": "folder/", - "items": {"$ref": "folderInteger.json"} - } - }, - "tests": [ - { - "description": "base URI change ref valid", - "data": [[1]], - "valid": true - }, - { - "description": "base URI change ref invalid", - "data": [["a"]], - "valid": false - } - ] + "tests": [ + { + "description": "number is valid", + "data": {"list": [1]}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/scope_change_defs2.json#/properties/list/$ref", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/type", + "instanceLocation": "#/list" + }, + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/items", + "instanceLocation": "#/list", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/items/$ref", + "instanceLocation": "#/list/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/list/0", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "string is invalid", + "data": {"list": ["a"]}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/scope_change_defs2.json#/properties/list/$ref", + "instanceLocation": "#/list", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar", + "instanceLocation": "#/list", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/list/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/type", + "instanceLocation": "#/list" + }, + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/items", + "instanceLocation": "#/list", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/#/$defs/baz/$defs/bar/items/$ref", + "instanceLocation": "#/list/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#", + "instanceLocation": "#/list/0", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/list/$ref/items/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/folder/folderInteger.json#/type", + "instanceLocation": "#/list/0" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "valid": true, + "keywordLocation": "#/$defs", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "root ref in remote ref", + "schema": { + "$id": "http://localhost:1234/object", + "type": "object", + "properties": {"name": {"$ref": "name-defs.json#/$defs/orNull"}} }, - { - "description": "base URI change - change folder", - "schema": { - "$id": "http://localhost:1234/scope_change_defs1.json", - "type" : "object", - "properties": {"list": {"$ref": "#/$defs/baz"}}, - "$defs": { - "baz": { - "$id": "folder/", - "type": "array", - "items": {"$ref": "folderInteger.json"} - } - } - }, - "tests": [ - { - "description": "number is valid", - "data": {"list": [1]}, - "valid": true - }, - { - "description": "string is invalid", - "data": {"list": ["a"]}, - "valid": false - } - ] - }, - { - "description": "base URI change - change folder in subschema", - "schema": { - "$id": "http://localhost:1234/scope_change_defs2.json", - "type" : "object", - "properties": {"list": {"$ref": "#/$defs/baz/$defs/bar"}}, - "$defs": { - "baz": { - "$id": "folder/", - "$defs": { - "bar": { - "type": "array", - "items": {"$ref": "folderInteger.json"} - } - } - } - } - }, - "tests": [ - { - "description": "number is valid", - "data": {"list": [1]}, - "valid": true - }, - { - "description": "string is invalid", - "data": {"list": ["a"]}, - "valid": false - } - ] - }, - { - "description": "root ref in remote ref", - "schema": { - "$id": "http://localhost:1234/object", - "type": "object", - "properties": { - "name": {"$ref": "name-defs.json#/$defs/orNull"} - } - }, - "tests": [ - { - "description": "string is valid", - "data": { - "name": "foo" - }, - "valid": true - }, - { - "description": "null is valid", - "data": { - "name": null - }, - "valid": true - }, - { - "description": "object is invalid", - "data": { - "name": { - "name": null - } - }, - "valid": false - } - ] - } -] + "tests": [ + { + "description": "string is valid", + "data": {"name": "foo"}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/object#/properties/name/$ref", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0/type", + "instanceLocation": "#/name" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/1/$ref", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs", + "instanceLocation": "#/name" + }, + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/type", + "instanceLocation": "#/name" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "null is valid", + "data": {"name": null}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/object#/properties/name/$ref", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/0", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0", + "instanceLocation": "#/name", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/0/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0/type", + "instanceLocation": "#/name" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/1/$ref", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#", + "instanceLocation": "#/name", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs", + "instanceLocation": "#/name" + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/type", + "instanceLocation": "#/name" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + }, + { + "description": "object is invalid", + "data": {"name": {"name": null}}, + "valid": false, + "output": { + "basic": { + "valid": false, + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf", + "instanceLocation": "#/name" + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0/type", + "instanceLocation": "#/name" + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/type", + "instanceLocation": "#/name" + } + ] + }, + "detailed": { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0/type", + "instanceLocation": "#/name" + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/type", + "instanceLocation": "#/name" + } + ] + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + { + "valid": false, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/object#/properties/name/$ref", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/0/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/0/type", + "instanceLocation": "#/name" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs/orNull/anyOf/1/$ref", + "instanceLocation": "#/name", + "errors": [ + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#", + "instanceLocation": "#/name", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/$defs", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/$defs", + "instanceLocation": "#/name" + }, + { + "valid": false, + "keywordLocation": "#/properties/name/$ref/anyOf/1/$ref/type", + "absoluteKeywordLocation": "http://localhost:1234/name-defs.json#/type", + "instanceLocation": "#/name" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/required.json b/tests/draft2019-06/required.json index abf18f34..3fd8780d 100644 --- a/tests/draft2019-06/required.json +++ b/tests/draft2019-06/required.json @@ -1,105 +1,347 @@ [ - { - "description": "required validation", - "schema": { - "properties": { - "foo": {}, - "bar": {} - }, - "required": ["foo"] - }, - "tests": [ - { - "description": "present required property is valid", - "data": {"foo": 1}, - "valid": true - }, - { - "description": "non-present required property is invalid", - "data": {"bar": 1}, - "valid": false - }, - { - "description": "ignores arrays", - "data": [], - "valid": true - }, - { - "description": "ignores strings", - "data": "", - "valid": true - }, - { - "description": "ignores other non-objects", - "data": 12, - "valid": true - } - ] - }, - { - "description": "required default validation", - "schema": { - "properties": { - "foo": {} - } - }, - "tests": [ - { - "description": "not required by default", - "data": {}, - "valid": true - } - ] + { + "description": "required validation", + "schema": {"properties": {"foo": {}, "bar": {}}, "required": ["foo"]}, + "tests": [ + { + "description": "present required property is valid", + "data": {"foo": 1}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/foo", + "instanceLocation": "#/foo" + } + ] + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-present required property is invalid", + "data": {"bar": 1}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties/bar", + "instanceLocation": "#/bar" + } + ] + }, + { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores arrays", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores strings", + "data": "", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "ignores other non-objects", + "data": 12, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "required default validation", + "schema": {"properties": {"foo": {}}}, + "tests": [ + { + "description": "not required by default", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "required with empty array", + "schema": {"properties": {"foo": {}}, "required": []}, + "tests": [ + { + "description": "property not required", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/properties", + "instanceLocation": "#" + }, + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "required with escaped characters", + "schema": { + "required": [ + "foo\nbar", + "foo\"bar", + "foo\bar", + "foo\rbar", + "foo\tbar", + "foo\fbar" + ] }, - { - "description": "required with empty array", - "schema": { - "properties": { - "foo": {} - }, - "required": [] + "tests": [ + { + "description": "object with all properties present is valid", + "data": { + "foo\nbar": 1, + "foo\"bar": 1, + "foo\bar": 1, + "foo\rbar": 1, + "foo\tbar": 1, + "foo\fbar": 1 }, - "tests": [ - { - "description": "property not required", - "data": {}, - "valid": true - } - ] - }, - { - "description": "required with escaped characters", - "schema": { - "required": [ - "foo\nbar", - "foo\"bar", - "foo\\bar", - "foo\rbar", - "foo\tbar", - "foo\fbar" + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/required", + "instanceLocation": "#" + } ] - }, - "tests": [ - { - "description": "object with all properties present is valid", - "data": { - "foo\nbar": 1, - "foo\"bar": 1, - "foo\\bar": 1, - "foo\rbar": 1, - "foo\tbar": 1, - "foo\fbar": 1 - }, - "valid": true - }, - { - "description": "object with some properties missing is invalid", - "data": { - "foo\nbar": "1", - "foo\"bar": "1" - }, - "valid": false - } - ] - } -] + } + } + }, + { + "description": "object with some properties missing is invalid", + "data": {"foo\nbar": "1", "foo\"bar": "1"}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/required", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/type.json b/tests/draft2019-06/type.json index ea33b182..9f1bedd6 100644 --- a/tests/draft2019-06/type.json +++ b/tests/draft2019-06/type.json @@ -1,464 +1,2330 @@ [ - { - "description": "integer type matches integers", - "schema": {"type": "integer"}, - "tests": [ - { - "description": "an integer is an integer", - "data": 1, - "valid": true - }, - { - "description": "a float is not an integer", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an integer", - "data": "foo", - "valid": false - }, - { - "description": "a string is still not an integer, even if it looks like one", - "data": "1", - "valid": false - }, - { - "description": "an object is not an integer", - "data": {}, - "valid": false - }, - { - "description": "an array is not an integer", - "data": [], - "valid": false - }, - { - "description": "a boolean is not an integer", - "data": true, - "valid": false - }, - { - "description": "null is not an integer", - "data": null, - "valid": false - } - ] - }, - { - "description": "number type matches numbers", - "schema": {"type": "number"}, - "tests": [ - { - "description": "an integer is a number", - "data": 1, - "valid": true - }, - { - "description": "a float is a number", - "data": 1.1, - "valid": true - }, - { - "description": "a string is not a number", - "data": "foo", - "valid": false - }, - { - "description": "a string is still not a number, even if it looks like one", - "data": "1", - "valid": false - }, - { - "description": "an object is not a number", - "data": {}, - "valid": false - }, - { - "description": "an array is not a number", - "data": [], - "valid": false - }, - { - "description": "a boolean is not a number", - "data": true, - "valid": false - }, - { - "description": "null is not a number", - "data": null, - "valid": false - } - ] - }, - { - "description": "string type matches strings", - "schema": {"type": "string"}, - "tests": [ - { - "description": "1 is not a string", - "data": 1, - "valid": false - }, - { - "description": "a float is not a string", - "data": 1.1, - "valid": false - }, - { - "description": "a string is a string", - "data": "foo", - "valid": true - }, - { - "description": "a string is still a string, even if it looks like a number", - "data": "1", - "valid": true - }, - { - "description": "an empty string is still a string", - "data": "", - "valid": true - }, - { - "description": "an object is not a string", - "data": {}, - "valid": false - }, - { - "description": "an array is not a string", - "data": [], - "valid": false - }, - { - "description": "a boolean is not a string", - "data": true, - "valid": false - }, - { - "description": "null is not a string", - "data": null, - "valid": false - } - ] - }, - { - "description": "object type matches objects", - "schema": {"type": "object"}, - "tests": [ - { - "description": "an integer is not an object", - "data": 1, - "valid": false - }, - { - "description": "a float is not an object", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an object", - "data": "foo", - "valid": false - }, - { - "description": "an object is an object", - "data": {}, - "valid": true - }, - { - "description": "an array is not an object", - "data": [], - "valid": false - }, - { - "description": "a boolean is not an object", - "data": true, - "valid": false - }, - { - "description": "null is not an object", - "data": null, - "valid": false - } - ] - }, - { - "description": "array type matches arrays", - "schema": {"type": "array"}, - "tests": [ - { - "description": "an integer is not an array", - "data": 1, - "valid": false - }, - { - "description": "a float is not an array", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not an array", - "data": "foo", - "valid": false - }, - { - "description": "an object is not an array", - "data": {}, - "valid": false - }, - { - "description": "an array is an array", - "data": [], - "valid": true - }, - { - "description": "a boolean is not an array", - "data": true, - "valid": false - }, - { - "description": "null is not an array", - "data": null, - "valid": false - } - ] - }, - { - "description": "boolean type matches booleans", - "schema": {"type": "boolean"}, - "tests": [ - { - "description": "an integer is not a boolean", - "data": 1, - "valid": false - }, - { - "description": "zero is not a boolean", - "data": 0, - "valid": false - }, - { - "description": "a float is not a boolean", - "data": 1.1, - "valid": false - }, - { - "description": "a string is not a boolean", - "data": "foo", - "valid": false - }, - { - "description": "an empty string is not a boolean", - "data": "", - "valid": false - }, - { - "description": "an object is not a boolean", - "data": {}, - "valid": false - }, - { - "description": "an array is not a boolean", - "data": [], - "valid": false - }, - { - "description": "true is a boolean", - "data": true, - "valid": true - }, - { - "description": "false is a boolean", - "data": false, - "valid": true - }, - { - "description": "null is not a boolean", - "data": null, - "valid": false - } - ] - }, - { - "description": "null type matches only the null object", - "schema": {"type": "null"}, - "tests": [ - { - "description": "an integer is not null", - "data": 1, - "valid": false - }, - { - "description": "a float is not null", - "data": 1.1, - "valid": false - }, - { - "description": "zero is not null", - "data": 0, - "valid": false - }, - { - "description": "a string is not null", - "data": "foo", - "valid": false - }, - { - "description": "an empty string is not null", - "data": "", - "valid": false - }, - { - "description": "an object is not null", - "data": {}, - "valid": false - }, - { - "description": "an array is not null", - "data": [], - "valid": false - }, - { - "description": "true is not null", - "data": true, - "valid": false - }, - { - "description": "false is not null", - "data": false, - "valid": false - }, - { - "description": "null is null", - "data": null, - "valid": true - } - ] - }, - { - "description": "multiple types can be specified in an array", - "schema": {"type": ["integer", "string"]}, - "tests": [ - { - "description": "an integer is valid", - "data": 1, - "valid": true - }, - { - "description": "a string is valid", - "data": "foo", - "valid": true - }, - { - "description": "a float is invalid", - "data": 1.1, - "valid": false - }, - { - "description": "an object is invalid", - "data": {}, - "valid": false - }, - { - "description": "an array is invalid", - "data": [], - "valid": false - }, - { - "description": "a boolean is invalid", - "data": true, - "valid": false - }, - { - "description": "null is invalid", - "data": null, - "valid": false - } - ] - }, - { - "description": "type as array with one item", - "schema": { - "type": ["string"] - }, - "tests": [ - { - "description": "string is valid", - "data": "foo", - "valid": true - }, - { - "description": "number is invalid", - "data": 123, - "valid": false - } - ] - }, - { - "description": "type: array or object", - "schema": { - "type": ["array", "object"] - }, - "tests": [ - { - "description": "array is valid", - "data": [1,2,3], - "valid": true - }, - { - "description": "object is valid", - "data": {"foo": 123}, - "valid": true - }, - { - "description": "number is invalid", - "data": 123, - "valid": false - }, - { - "description": "string is invalid", - "data": "foo", - "valid": false - }, - { - "description": "null is invalid", - "data": null, - "valid": false - } - ] - }, - { - "description": "type: array, object or null", - "schema": { - "type": ["array", "object", "null"] - }, - "tests": [ - { - "description": "array is valid", - "data": [1,2,3], - "valid": true - }, - { - "description": "object is valid", - "data": {"foo": 123}, - "valid": true - }, - { - "description": "null is valid", - "data": null, - "valid": true - }, - { - "description": "number is invalid", - "data": 123, - "valid": false - }, - { - "description": "string is invalid", - "data": "foo", - "valid": false - } - ] - } -] + { + "description": "integer type matches integers", + "schema": {"type": "integer"}, + "tests": [ + { + "description": "an integer is an integer", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not an integer", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not an integer", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is still not an integer, even if it looks like one", + "data": "1", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not an integer", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not an integer", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is not an integer", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not an integer", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "number type matches numbers", + "schema": {"type": "number"}, + "tests": [ + { + "description": "an integer is a number", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is a number", + "data": 1.1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not a number", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is still not a number, even if it looks like one", + "data": "1", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not a number", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not a number", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is not a number", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not a number", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "string type matches strings", + "schema": {"type": "string"}, + "tests": [ + { + "description": "1 is not a string", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not a string", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is a string", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is still a string, even if it looks like a number", + "data": "1", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an empty string is still a string", + "data": "", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not a string", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not a string", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is not a string", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not a string", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "object type matches objects", + "schema": {"type": "object"}, + "tests": [ + { + "description": "an integer is not an object", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not an object", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not an object", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is an object", + "data": {}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not an object", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is not an object", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not an object", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "array type matches arrays", + "schema": {"type": "array"}, + "tests": [ + { + "description": "an integer is not an array", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not an array", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not an array", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not an array", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is an array", + "data": [], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is not an array", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not an array", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "boolean type matches booleans", + "schema": {"type": "boolean"}, + "tests": [ + { + "description": "an integer is not a boolean", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "zero is not a boolean", + "data": 0, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not a boolean", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not a boolean", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an empty string is not a boolean", + "data": "", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not a boolean", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not a boolean", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "true is a boolean", + "data": true, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "false is a boolean", + "data": false, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is not a boolean", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "null type matches only the null object", + "schema": {"type": "null"}, + "tests": [ + { + "description": "an integer is not null", + "data": 1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is not null", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "zero is not null", + "data": 0, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is not null", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an empty string is not null", + "data": "", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is not null", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is not null", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "true is not null", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "false is not null", + "data": false, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is null", + "data": null, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "multiple types can be specified in an array", + "schema": {"type": ["integer", "string"]}, + "tests": [ + { + "description": "an integer is valid", + "data": 1, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a string is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a float is invalid", + "data": 1.1, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an object is invalid", + "data": {}, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "an array is invalid", + "data": [], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "a boolean is invalid", + "data": true, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is invalid", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "type as array with one item", + "schema": {"type": "string"}, + "tests": [ + { + "description": "string is valid", + "data": "foo", + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "number is invalid", + "data": 123, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "type: array or object", + "schema": {"type": ["array", "object"]}, + "tests": [ + { + "description": "array is valid", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "object is valid", + "data": {"foo": 123}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "number is invalid", + "data": 123, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "string is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is invalid", + "data": null, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + }, + { + "description": "type: array, object or null", + "schema": {"type": ["array", "null", "object"]}, + "tests": [ + { + "description": "array is valid", + "data": [1, 2, 3], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "object is valid", + "data": {"foo": 123}, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "null is valid", + "data": null, + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "number is invalid", + "data": 123, + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "string is invalid", + "data": "foo", + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/type", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file diff --git a/tests/draft2019-06/uniqueItems.json b/tests/draft2019-06/uniqueItems.json index c1f4ab99..dd845f4d 100644 --- a/tests/draft2019-06/uniqueItems.json +++ b/tests/draft2019-06/uniqueItems.json @@ -1,79 +1,391 @@ [ - { - "description": "uniqueItems validation", - "schema": {"uniqueItems": true}, - "tests": [ - { - "description": "unique array of integers is valid", - "data": [1, 2], - "valid": true - }, - { - "description": "non-unique array of integers is invalid", - "data": [1, 1], - "valid": false - }, - { - "description": "numbers are unique if mathematically unequal", - "data": [1.0, 1.00, 1], - "valid": false - }, - { - "description": "unique array of objects is valid", - "data": [{"foo": "bar"}, {"foo": "baz"}], - "valid": true - }, - { - "description": "non-unique array of objects is invalid", - "data": [{"foo": "bar"}, {"foo": "bar"}], - "valid": false - }, - { - "description": "unique array of nested objects is valid", - "data": [ - {"foo": {"bar" : {"baz" : true}}}, - {"foo": {"bar" : {"baz" : false}}} - ], - "valid": true - }, - { - "description": "non-unique array of nested objects is invalid", - "data": [ - {"foo": {"bar" : {"baz" : true}}}, - {"foo": {"bar" : {"baz" : true}}} - ], - "valid": false - }, - { - "description": "unique array of arrays is valid", - "data": [["foo"], ["bar"]], - "valid": true - }, - { - "description": "non-unique array of arrays is invalid", - "data": [["foo"], ["foo"]], - "valid": false - }, - { - "description": "1 and true are unique", - "data": [1, true], - "valid": true - }, - { - "description": "0 and false are unique", - "data": [0, false], - "valid": true - }, - { - "description": "unique heterogeneous types are valid", - "data": [{}, [1], true, null, 1], - "valid": true - }, - { - "description": "non-unique heterogeneous types are invalid", - "data": [{}, [1], true, null, {}, 1], - "valid": false - } - ] - } -] + { + "description": "uniqueItems validation", + "schema": {"uniqueItems": true}, + "tests": [ + { + "description": "unique array of integers is valid", + "data": [1, 2], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-unique array of integers is invalid", + "data": [1, 1], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "numbers are unique if mathematically unequal", + "data": [1, 1, 1], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "unique array of objects is valid", + "data": [{"foo": "bar"}, {"foo": "baz"}], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-unique array of objects is invalid", + "data": [{"foo": "bar"}, {"foo": "bar"}], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "unique array of nested objects is valid", + "data": [ + {"foo": {"bar": {"baz": true}}}, + {"foo": {"bar": {"baz": false}}} + ], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-unique array of nested objects is invalid", + "data": [ + {"foo": {"bar": {"baz": true}}}, + {"foo": {"bar": {"baz": true}}} + ], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "unique array of arrays is valid", + "data": [["foo"], ["bar"]], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-unique array of arrays is invalid", + "data": [["foo"], ["foo"]], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "1 and true are unique", + "data": [1, true], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "0 and false are unique", + "data": [0, false], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "unique heterogeneous types are valid", + "data": [{}, [1], true, null, 1], + "valid": true, + "output": { + "basic": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "detailed": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#" + }, + "verbose": { + "valid": true, + "keywordLocation": "#", + "instanceLocation": "#", + "annotations": [ + { + "valid": true, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + }, + { + "description": "non-unique heterogeneous types are invalid", + "data": [{}, [1], true, null, {}, 1], + "valid": false, + "output": { + "basic": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "detailed": { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + }, + "verbose": { + "valid": false, + "keywordLocation": "#", + "instanceLocation": "#", + "errors": [ + { + "valid": false, + "keywordLocation": "#/uniqueItems", + "instanceLocation": "#" + } + ] + } + } + } + ] + } +] \ No newline at end of file