From e94179e1911761fa57a72358f8569e773ae6d514 Mon Sep 17 00:00:00 2001 From: Tristan Penman Date: Fri, 21 May 2021 10:11:45 +1000 Subject: [PATCH] Add definitions tests for draft 7 --- doc/schema/draft-07.json | 151 +++++++++++++++++++++++++++++++++++++++ tests/test_validator.cpp | 26 ++++--- 2 files changed, 166 insertions(+), 11 deletions(-) create mode 100644 doc/schema/draft-07.json diff --git a/doc/schema/draft-07.json b/doc/schema/draft-07.json new file mode 100644 index 0000000..6a74851 --- /dev/null +++ b/doc/schema/draft-07.json @@ -0,0 +1,151 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": {"$ref": "#"} + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "allOf": [{"$ref": "#/definitions/nonNegativeInteger"}, {"default": 0}] + }, + "simpleTypes": { + "enum": ["array", "boolean", "integer", "null", "number", "object", "string"] + }, + "stringArray": { + "type": "array", + "items": {"type": "string"}, + "uniqueItems": true, + "default": [] + } + }, + "type": ["object", "boolean"], + "properties": { + "$id": { + "type": "string", + "format": "uri-reference" + }, + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": {"$ref": "#/definitions/nonNegativeInteger"}, + "minLength": {"$ref": "#/definitions/nonNegativeIntegerDefault0"}, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": {"$ref": "#"}, + "items": { + "anyOf": [{"$ref": "#"}, {"$ref": "#/definitions/schemaArray"}], + "default": true + }, + "maxItems": {"$ref": "#/definitions/nonNegativeInteger"}, + "minItems": {"$ref": "#/definitions/nonNegativeIntegerDefault0"}, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": {"$ref": "#"}, + "maxProperties": {"$ref": "#/definitions/nonNegativeInteger"}, + "minProperties": {"$ref": "#/definitions/nonNegativeIntegerDefault0"}, + "required": {"$ref": "#/definitions/stringArray"}, + "additionalProperties": {"$ref": "#"}, + "definitions": { + "type": "object", + "additionalProperties": {"$ref": "#"}, + "default": {} + }, + "properties": { + "type": "object", + "additionalProperties": {"$ref": "#"}, + "default": {} + }, + "patternProperties": { + "type": "object", + "additionalProperties": {"$ref": "#"}, + "propertyNames": {"format": "regex"}, + "default": {} + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [{"$ref": "#"}, {"$ref": "#/definitions/stringArray"}] + } + }, + "propertyNames": {"$ref": "#"}, + "const": true, + "enum": { + "type": "array", + "items": true, + "minItems": 1, + "uniqueItems": true + }, + "type": { + "anyOf": [ + {"$ref": "#/definitions/simpleTypes"}, + { + "type": "array", + "items": {"$ref": "#/definitions/simpleTypes"}, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": {"type": "string"}, + "contentMediaType": {"type": "string"}, + "contentEncoding": {"type": "string"}, + "if": {"$ref": "#"}, + "then": {"$ref": "#"}, + "else": {"$ref": "#"}, + "allOf": {"$ref": "#/definitions/schemaArray"}, + "anyOf": {"$ref": "#/definitions/schemaArray"}, + "oneOf": {"$ref": "#/definitions/schemaArray"}, + "not": {"$ref": "#"} + }, + "default": true +} diff --git a/tests/test_validator.cpp b/tests/test_validator.cpp index 276240f..11dba78 100644 --- a/tests/test_validator.cpp +++ b/tests/test_validator.cpp @@ -7,6 +7,7 @@ #endif #include +#include #include @@ -42,21 +43,19 @@ using valijson::Validator; std::string getRelativePath(const std::string &uri) { const std::string dummyUri = "http://localhost:1234/"; - size_t n = uri.find(dummyUri); - if (n != std::string::npos) { + if (uri.find(dummyUri) != std::string::npos) { return REMOTES_DIR + uri.substr(dummyUri.size()); } - const std::string v3SchemaUri = "http://json-schema.org/draft-03/schema"; - n = uri.find(v3SchemaUri); - if (n != std::string::npos) { - return "../doc/schema/draft-03.json"; - } + static const std::map schemaMap = { + { "http://json-schema.org/draft-03/schema", "../doc/schema/draft-03.json" }, + { "http://json-schema.org/draft-04/schema", "../doc/schema/draft-04.json" }, + { "http://json-schema.org/draft-07/schema", "../doc/schema/draft-07.json" } + }; - const std::string v4SchemaUri = "http://json-schema.org/draft-04/schema"; - n = uri.find(v4SchemaUri); - if (n != std::string::npos) { - return "../doc/schema/draft-04.json"; + const auto itr = schemaMap.find(uri); + if (itr != schemaMap.end()) { + return itr->second; } valijson::throwRuntimeError("Attempt fetchDoc of " + uri); @@ -475,6 +474,11 @@ TEST_F(TestValidator, Draft7_Contains) // TOOD: untested default +TEST_F(TestValidator, Draft7_Definitions) +{ + processDraft7TestFile(TEST_SUITE_DIR "draft7/definitions.json"); +} + TEST_F(TestValidator, Draft7_Dependencies) { processDraft7TestFile(TEST_SUITE_DIR "draft7/dependencies.json");