From 816441f4e67ddba7b9ff8a5bea8d5e26c2447a4a Mon Sep 17 00:00:00 2001 From: Ben Hutton Date: Thu, 12 Dec 2019 12:59:37 +0000 Subject: [PATCH 1/2] Add tests for Single-schema items and unevaluatedItems Resolves #291 --- tests/draft2019-09/unevaluatedItems.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/draft2019-09/unevaluatedItems.json b/tests/draft2019-09/unevaluatedItems.json index afde31d9..9ae9ab7d 100644 --- a/tests/draft2019-09/unevaluatedItems.json +++ b/tests/draft2019-09/unevaluatedItems.json @@ -146,6 +146,30 @@ } ] }, + { + "description": "Single-schema items and unevaluatedItems", + "schema": { + "unevaluatedItems": {"type": "boolean"}, + "anyOf": [ { "items": {"type": "string"} }, true ] + }, + "tests": [ + { + "description": "unevaluatedItems is applied", + "data": [true, false], + "valid": true + }, + { + "description": "unevaluatedItems isn't applied unnecessarily on items annotation boolean of true", + "data": ["yes", "no"], + "valid": true + }, + { + "description": "unevaluatedItems is applied on items annotation boolean false", + "data": ["yes", false], + "valid": false + } + ] + }, { "description": "unevaluatedItems with nested additionalItems", "schema": { From b683de5a3b9bd9caaf7c2c431036aaaebb66e942 Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Thu, 30 Jun 2022 13:23:51 -0400 Subject: [PATCH 2/2] Forward-port and reword the new unevaluatedItems test. Makes it fit a bit better with its neighbors by using similar language in the descriptions. This *precise* case seems uncovered by said neighbors because none precisely have all of: * nested unevaluatedItems * no prefixItems * cases where unevaluatedItems actually gets used for a scenario It's possible that in aggregate all the cases that are here already would catch any bugs this scenario would catch (i.e. it's possible this is redundant in aggregate) but it's safe enough to add just in case obviously. --- tests/draft-next/unevaluatedItems.json | 28 +++++++++++++++++++++++- tests/draft2019-09/unevaluatedItems.json | 15 ++++++++----- tests/draft2020-12/unevaluatedItems.json | 28 +++++++++++++++++++++++- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/tests/draft-next/unevaluatedItems.json b/tests/draft-next/unevaluatedItems.json index af209b0e..d113ea64 100644 --- a/tests/draft-next/unevaluatedItems.json +++ b/tests/draft-next/unevaluatedItems.json @@ -149,7 +149,33 @@ { "description": "unevaluatedItems with nested items", "schema": { - "type": "array", + "unevaluatedItems": {"type": "boolean"}, + "anyOf": [ + { "items": {"type": "string"} }, + true + ] + }, + "tests": [ + { + "description": "with only (valid) additional items", + "data": [true, false], + "valid": true + }, + { + "description": "with no additional items", + "data": ["yes", "no"], + "valid": true + }, + { + "description": "with invalid additional item", + "data": ["yes", false], + "valid": false + } + ] + }, + { + "description": "unevaluatedItems with nested prefixItems and items", + "schema": { "allOf": [ { "prefixItems": [ diff --git a/tests/draft2019-09/unevaluatedItems.json b/tests/draft2019-09/unevaluatedItems.json index 9ae9ab7d..87ce2a98 100644 --- a/tests/draft2019-09/unevaluatedItems.json +++ b/tests/draft2019-09/unevaluatedItems.json @@ -147,31 +147,34 @@ ] }, { - "description": "Single-schema items and unevaluatedItems", + "description": "unevaluatedItems with nested items", "schema": { "unevaluatedItems": {"type": "boolean"}, - "anyOf": [ { "items": {"type": "string"} }, true ] + "anyOf": [ + { "items": {"type": "string"} }, + true + ] }, "tests": [ { - "description": "unevaluatedItems is applied", + "description": "with only (valid) additional items", "data": [true, false], "valid": true }, { - "description": "unevaluatedItems isn't applied unnecessarily on items annotation boolean of true", + "description": "with no additional items", "data": ["yes", "no"], "valid": true }, { - "description": "unevaluatedItems is applied on items annotation boolean false", + "description": "with invalid additional item", "data": ["yes", false], "valid": false } ] }, { - "description": "unevaluatedItems with nested additionalItems", + "description": "unevaluatedItems with nested items and additionalItems", "schema": { "type": "array", "allOf": [ diff --git a/tests/draft2020-12/unevaluatedItems.json b/tests/draft2020-12/unevaluatedItems.json index af209b0e..d113ea64 100644 --- a/tests/draft2020-12/unevaluatedItems.json +++ b/tests/draft2020-12/unevaluatedItems.json @@ -149,7 +149,33 @@ { "description": "unevaluatedItems with nested items", "schema": { - "type": "array", + "unevaluatedItems": {"type": "boolean"}, + "anyOf": [ + { "items": {"type": "string"} }, + true + ] + }, + "tests": [ + { + "description": "with only (valid) additional items", + "data": [true, false], + "valid": true + }, + { + "description": "with no additional items", + "data": ["yes", "no"], + "valid": true + }, + { + "description": "with invalid additional item", + "data": ["yes", false], + "valid": false + } + ] + }, + { + "description": "unevaluatedItems with nested prefixItems and items", + "schema": { "allOf": [ { "prefixItems": [