fix #55: make additionalProperties-error-message clearer
Done this by using sub-error-handler of type first_error_handler and constructing a message.
This commit is contained in:
parent
99e05c8335
commit
c0d3a287d3
@ -791,9 +791,14 @@ class object : public schema
|
||||
a_prop_or_pattern_matched = true;
|
||||
schema_pp.second->validate(ptr / p.key(), p.value(), e);
|
||||
}
|
||||
|
||||
// check additionalProperties as a last resort
|
||||
if (!a_prop_or_pattern_matched && additionalProperties_)
|
||||
additionalProperties_->validate(ptr / p.key(), p.value(), e);
|
||||
if (!a_prop_or_pattern_matched && additionalProperties_) {
|
||||
first_error_handler additional_prop_err;
|
||||
additionalProperties_->validate(ptr / p.key(), p.value(), additional_prop_err);
|
||||
if (additional_prop_err)
|
||||
e.error(ptr, instance, "validation failed for additional property '" + p.key() + "': " + additional_prop_err.message_);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &dep : dependencies_) {
|
||||
|
||||
@ -45,6 +45,7 @@ static json person_schema = R"(
|
||||
"name",
|
||||
"age"
|
||||
],
|
||||
"additionalProperties": false,
|
||||
"type": "object"
|
||||
})"_json;
|
||||
|
||||
@ -88,19 +89,20 @@ int main(void)
|
||||
|
||||
validator.validate({{"age", 42}}, err); // no name
|
||||
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "");
|
||||
EXPECT_EQ(err.failed_pointers.size(), 1);
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "");
|
||||
err.reset();
|
||||
|
||||
validator.validate({{"street", "Boulevard"}}, err); // no name and no age
|
||||
EXPECT_EQ(err.failed_pointers.size(), 3);
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "");
|
||||
EXPECT_EQ(err.failed_pointers[1].to_string(), "");
|
||||
EXPECT_EQ(err.failed_pointers.size(), 2);
|
||||
EXPECT_EQ(err.failed_pointers[2].to_string(), "");
|
||||
err.reset();
|
||||
|
||||
validator.validate({{"age", 42}, {"name", 12}}, err); // name must be a string
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "/name");
|
||||
EXPECT_EQ(err.failed_pointers.size(), 1);
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "/name");
|
||||
err.reset();
|
||||
|
||||
validator.validate({
|
||||
@ -109,8 +111,19 @@ int main(void)
|
||||
{"phones", {1234, "223"}},
|
||||
},
|
||||
err); // name must be a string
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "/phones/1");
|
||||
EXPECT_EQ(err.failed_pointers.size(), 1);
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "/phones/1");
|
||||
err.reset();
|
||||
|
||||
validator.validate({
|
||||
{"age", 42},
|
||||
{"name", "John"},
|
||||
{"phones", {0}},
|
||||
{"post-code", 12345},
|
||||
},
|
||||
err); // name must be a string
|
||||
EXPECT_EQ(err.failed_pointers.size(), 1);
|
||||
EXPECT_EQ(err.failed_pointers[0].to_string(), "");
|
||||
err.reset();
|
||||
|
||||
return error_count;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user