Add definitions tests for draft 7

This commit is contained in:
Tristan Penman 2021-05-21 10:11:45 +10:00
parent bb2c425104
commit e94179e191
2 changed files with 166 additions and 11 deletions

151
doc/schema/draft-07.json Normal file
View File

@ -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
}

View File

@ -7,6 +7,7 @@
#endif #endif
#include <iostream> #include <iostream>
#include <map>
#include <gtest/gtest.h> #include <gtest/gtest.h>
@ -42,21 +43,19 @@ using valijson::Validator;
std::string getRelativePath(const std::string &uri) std::string getRelativePath(const std::string &uri)
{ {
const std::string dummyUri = "http://localhost:1234/"; const std::string dummyUri = "http://localhost:1234/";
size_t n = uri.find(dummyUri); if (uri.find(dummyUri) != std::string::npos) {
if (n != std::string::npos) {
return REMOTES_DIR + uri.substr(dummyUri.size()); return REMOTES_DIR + uri.substr(dummyUri.size());
} }
const std::string v3SchemaUri = "http://json-schema.org/draft-03/schema"; static const std::map<std::string, std::string> schemaMap = {
n = uri.find(v3SchemaUri); { "http://json-schema.org/draft-03/schema", "../doc/schema/draft-03.json" },
if (n != std::string::npos) { { "http://json-schema.org/draft-04/schema", "../doc/schema/draft-04.json" },
return "../doc/schema/draft-03.json"; { "http://json-schema.org/draft-07/schema", "../doc/schema/draft-07.json" }
} };
const std::string v4SchemaUri = "http://json-schema.org/draft-04/schema"; const auto itr = schemaMap.find(uri);
n = uri.find(v4SchemaUri); if (itr != schemaMap.end()) {
if (n != std::string::npos) { return itr->second;
return "../doc/schema/draft-04.json";
} }
valijson::throwRuntimeError("Attempt fetchDoc of " + uri); valijson::throwRuntimeError("Attempt fetchDoc of " + uri);
@ -475,6 +474,11 @@ TEST_F(TestValidator, Draft7_Contains)
// TOOD: untested default // TOOD: untested default
TEST_F(TestValidator, Draft7_Definitions)
{
processDraft7TestFile(TEST_SUITE_DIR "draft7/definitions.json");
}
TEST_F(TestValidator, Draft7_Dependencies) TEST_F(TestValidator, Draft7_Dependencies)
{ {
processDraft7TestFile(TEST_SUITE_DIR "draft7/dependencies.json"); processDraft7TestFile(TEST_SUITE_DIR "draft7/dependencies.json");