Cancel patch change for each non valid logical combination (#231)
* Cancel patch change for each non valid logical combination * Update CMakeLists.txt --------- Co-authored-by: Patrick Boettcher <p@yai.se>
This commit is contained in:
parent
540a7e3dd4
commit
8912ad3490
@ -436,9 +436,12 @@ class logical_combination : public schema
|
|||||||
|
|
||||||
for (auto &s : subschemata_) {
|
for (auto &s : subschemata_) {
|
||||||
first_error_handler esub;
|
first_error_handler esub;
|
||||||
|
json_patch old_patch(patch);
|
||||||
s->validate(ptr, instance, patch, esub);
|
s->validate(ptr, instance, patch, esub);
|
||||||
if (!esub)
|
if (!esub)
|
||||||
count++;
|
count++;
|
||||||
|
else
|
||||||
|
patch = old_patch;
|
||||||
|
|
||||||
if (is_validate_complete(instance, ptr, e, esub, count))
|
if (is_validate_complete(instance, ptr, e, esub, count))
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -74,6 +74,10 @@ add_executable(issue-189-default-values issue-189-default-values.cpp)
|
|||||||
target_link_libraries(issue-189-default-values nlohmann_json_schema_validator)
|
target_link_libraries(issue-189-default-values nlohmann_json_schema_validator)
|
||||||
add_test(NAME issue-189-default-values COMMAND issue-189-default-values)
|
add_test(NAME issue-189-default-values COMMAND issue-189-default-values)
|
||||||
|
|
||||||
|
add_executable(issue-229-oneof-default-values issue-229-oneof-default-values.cpp)
|
||||||
|
target_link_libraries(issue-229-oneof-default-values nlohmann_json_schema_validator)
|
||||||
|
add_test(NAME issue-229-oneof-default-values COMMAND issue-229-oneof-default-values)
|
||||||
|
|
||||||
add_executable(issue-243-root-default-values issue-243-root-default-values.cpp)
|
add_executable(issue-243-root-default-values issue-243-root-default-values.cpp)
|
||||||
target_link_libraries(issue-243-root-default-values nlohmann_json_schema_validator)
|
target_link_libraries(issue-243-root-default-values nlohmann_json_schema_validator)
|
||||||
add_test(NAME issue-243-root-default-values COMMAND issue-243-root-default-values)
|
add_test(NAME issue-243-root-default-values COMMAND issue-243-root-default-values)
|
||||||
|
|||||||
69
test/issue-229-oneof-default-values.cpp
Normal file
69
test/issue-229-oneof-default-values.cpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <nlohmann/json-schema.hpp>
|
||||||
|
|
||||||
|
using nlohmann::json;
|
||||||
|
using nlohmann::json_uri;
|
||||||
|
using nlohmann::json_schema::json_validator;
|
||||||
|
|
||||||
|
static const json default_schema = R"(
|
||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"oneOf": [
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"enum": "foo"
|
||||||
|
},
|
||||||
|
"code": {
|
||||||
|
"const": 1,
|
||||||
|
"default": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"enum": "bar"
|
||||||
|
},
|
||||||
|
"code": {
|
||||||
|
"const": 2,
|
||||||
|
"default": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})"_json;
|
||||||
|
|
||||||
|
static void loader(const json_uri &uri, json &schema)
|
||||||
|
{
|
||||||
|
schema = default_schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
json_validator validator(loader);
|
||||||
|
|
||||||
|
validator.set_root_schema(default_schema);
|
||||||
|
|
||||||
|
json data = R"({"name": "bar"})"_json;
|
||||||
|
json expected = R"(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"op": "add",
|
||||||
|
"path": "/code",
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)"_json;
|
||||||
|
|
||||||
|
json patch = validator.validate(data);
|
||||||
|
if (patch != expected) {
|
||||||
|
std::cerr << "Patch contains wrong operation: '" << patch.dump() << "' instead of expected '" << expected.dump() << "'" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user