diff --git a/src/test-suite/tests/contains.json b/src/test-suite/tests/contains.json index 3bf0d7c..e503c87 100644 --- a/src/test-suite/tests/contains.json +++ b/src/test-suite/tests/contains.json @@ -96,6 +96,88 @@ }, "instance": ["foo", 42], "errors": [] + }, + { + "description": "contains fails due to too many matching items with success explanations", + "compatibility": "2019", + "schema": { + "contains": { "type": "string" }, + "maxContains": 1 + }, + "instance": [42, "foo", "bar"], + "errors": [ + { + "messageId": "contains-exact-message", + "messageParams": { + "minContains": 1, + "maxContains": 1 + }, + "instanceLocation": "#", + "schemaLocations": ["#/contains", "#/maxContains"], + "alternatives": [ + [ + { + "messageId": "type-success", + "messageParams": { + "actualType": "string" + }, + "instanceLocation": "#/1", + "schemaLocations": ["#/contains/type"] + } + ], + [ + { + "messageId": "type-success", + "messageParams": { + "actualType": "string" + }, + "instanceLocation": "#/2", + "schemaLocations": ["#/contains/type"] + } + ] + ] + }, + { + "description": "contains fails with multiple object matches", + "compatibility": "2019", + "schema": { + "contains": { + "required": ["a"] + }, + "maxContains": 1 + }, + "instance": [{ "a": 1 }, { "a": 2 }], + "errors": [ + { + "messageId": "contains-exact-message", + "messageParams": { + "minContains": 1, + "maxContains": 1 + }, + "instanceLocation": "#", + "schemaLocations": ["#/contains", "#/maxContains"], + "alternatives": [ + [ + { + "messageId": "required-success", + "messageParams": { "property": "a" }, + "instanceLocation": "#/0", + "schemaLocations": ["#/contains/required"] + } + ], + [ + { + "messageId": "required-success", + "messageParams": { "property": "a" }, + "instanceLocation": "#/1", + "schemaLocations": ["#/contains/required"] + } + ] + ] + } + ] + } + ] } ] } diff --git a/src/test-suite/tests/not.json b/src/test-suite/tests/not.json index 154b397..8a676a7 100644 --- a/src/test-suite/tests/not.json +++ b/src/test-suite/tests/not.json @@ -24,6 +24,58 @@ }, "instance": "foo", "errors": [] + }, + { + "description": "not fails with success explanation", + "schema": { + "not": { "pattern": "^a" } + }, + "instance": "apple", + "errors": [ + { + "messageId": "not-message", + "instanceLocation": "#", + "schemaLocations": ["#/not"], + "alternatives": [ + [ + { + "messageId": "pattern-success", + "messageParams": { + "pattern": "^a" + }, + "instanceLocation": "#", + "schemaLocations": ["#/not/pattern"] + } + ] + ] + } + ] + }, + { + "description": "not with nested schema producing a match", + "schema": { + "not": { + "required": ["a"] + } + }, + "instance": { "a": 1 }, + "errors": [ + { + "messageId": "not-message", + "instanceLocation": "#", + "schemaLocations": ["#/not"], + "alternatives": [ + [ + { + "messageId": "required-success", + "messageParams": { "property": "a" }, + "instanceLocation": "#", + "schemaLocations": ["#/not/required"] + } + ] + ] + } + ] } ] } diff --git a/src/test-suite/tests/oneOf.json b/src/test-suite/tests/oneOf.json index 658af9d..cd7ea10 100644 --- a/src/test-suite/tests/oneOf.json +++ b/src/test-suite/tests/oneOf.json @@ -6,10 +6,7 @@ { "description": "oneOf", "schema": { - "oneOf": [ - { "type": "string" }, - { "type": "number" } - ] + "oneOf": [{ "type": "string" }, { "type": "number" }] }, "instance": null, "errors": [ @@ -46,10 +43,7 @@ { "description": "oneOf more than one match", "schema": { - "oneOf": [ - { "type": "integer" }, - { "type": "number" } - ] + "oneOf": [{ "type": "integer" }, { "type": "number" }] }, "instance": 1, "errors": [ @@ -66,13 +60,126 @@ { "description": "oneOf pass", "schema": { - "oneOf": [ - { "type": "string" }, - { "type": "number" } - ] + "oneOf": [{ "type": "string" }, { "type": "number" }] }, "instance": 42, "errors": [] + }, + { + "description": "oneOf more than one match with success explanations", + "schema": { + "oneOf": [{ "type": "integer" }, { "type": "number" }] + }, + "instance": 66, + "errors": [ + { + "messageId": "oneOf-message", + "messageParams": { "matchCount": 2 }, + "alternatives": [ + [ + { + "messageId": "type-success", + "messageParams": { + "actualType": "integer" + }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/0/type"] + } + ], + [ + { + "messageId": "type-success", + "messageParams": { + "actualType": "number" + }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/1/type"] + } + ] + ], + "instanceLocation": "#", + "schemaLocations": ["#/oneOf"] + } + ] + }, + { + "description": "oneOf more than one match with failed alternatives ignored", + "schema": { + "oneOf": [ + { "required": ["a"] }, + { "required": ["b"] }, + { "required": ["c"] } + ] + }, + "instance": { "a": 1, "b": 2 }, + "errors": [ + { + "messageId": "oneOf-message", + "messageParams": { "matchCount": 2 }, + "alternatives": [ + [ + { + "messageId": "required-success", + "messageParams": { + "property": "a" + }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/0/required"] + } + ], + [ + { + "messageId": "required-success", + "messageParams": { + "property": "b" + }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/1/required"] + } + ] + ], + "instanceLocation": "#", + "schemaLocations": ["#/oneOf"] + } + ] + }, + { + "description": "nested oneOf producing multiple matches in inner oneOf", + "schema": { + "oneOf": [ + { + "oneOf": [{ "required": ["a"] }, { "required": ["b"] }] + }, + { "required": ["c"] } + ] + }, + "instance": { "a": 1, "b": 2 }, + "errors": [ + { + "messageId": "oneOf-message", + "messageParams": { "matchCount": 2 }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/0/oneOf"], + "alternatives": [ + [ + { + "messageId": "required-success", + "messageParams": { "property": "a" }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/0/oneOf/0/required"] + } + ], + [ + { + "messageId": "required-success", + "messageParams": { "property": "b" }, + "instanceLocation": "#", + "schemaLocations": ["#/oneOf/0/oneOf/1/required"] + } + ] + ] + } + ] } ] }