force schema-instance-type of unknown-keywords to an object

fixes #143
This commit is contained in:
Patrick Boettcher 2021-02-08 17:56:57 +01:00
parent 73d57d9540
commit a4bc67d754
6 changed files with 50 additions and 1 deletions

View File

@ -172,7 +172,10 @@ public:
if (unresolved != file.unresolved.end())
schema::make(value, this, {}, {{new_uri}});
else // no, nothing ref'd it, keep for later
file.unknown_keywords[fragment] = value;
// could use fragment here, but better not to: if key is an integer the pointer will be interpreted as
// an array. This cannot be the case here, so we force using key as a string when storing the
// unknown_keyword-schema.
file.unknown_keywords[uri.pointer()][key] = value;
// recursively add possible subschemas of unknown keywords
if (value.type() == json::value_t::object)

View File

@ -0,0 +1,13 @@
add_test_simple_schema(Issue::143-1
${CMAKE_CURRENT_SOURCE_DIR}/schema.json
${CMAKE_CURRENT_SOURCE_DIR}/instance-fail-1.json)
add_test_simple_schema(Issue::143-a
${CMAKE_CURRENT_SOURCE_DIR}/schema.json
${CMAKE_CURRENT_SOURCE_DIR}/instance-fail-a.json)
add_test_simple_schema(Issue::143-ok
${CMAKE_CURRENT_SOURCE_DIR}/schema.json
${CMAKE_CURRENT_SOURCE_DIR}/instance.json)
set_tests_properties(Issue::143-1 Issue::143-a
PROPERTIES
WILL_FAIL 1)

View File

@ -0,0 +1,4 @@
{
"ref1": "a",
"refa": "a"
}

View File

@ -0,0 +1,4 @@
{
"ref1": 12,
"refa": 12
}

View File

@ -0,0 +1,4 @@
{
"ref1": 12,
"refa": "a"
}

View File

@ -0,0 +1,21 @@
{
"type": "object",
"properties": {
"unknown_keyword_storage": {
"1": {
"type": "number"
},
"a": {
"type": "string"
}
},
"ref1": {
"$ref": "#/properties/unknown_keyword_storage/1"
},
"refa": {
"$ref": "#/properties/unknown_keyword_storage/a"
}
},
"additionalProperties": false
}