json-schema-validator/app/json-schema-test.cpp
Patrick Boettcher bf4cef21c3 initial commit
2016-12-23 00:04:42 +01:00

62 lines
1.5 KiB
C++

#include "json-schema-validator.hpp"
using nlohmann::json;
using nlohmann::json_validator;
int main(void)
{
json validation;
try {
std::cin >> validation;
} catch (std::exception &e) {
std::cerr << e.what() << "\n";
return EXIT_FAILURE;
}
json_validator validator;
size_t failed = 0,
total = 0;
for (auto &test_group : validation) {
std::cerr << "Testing Group " << test_group["description"] << "\n";
const auto &schema = test_group["schema"];
for (auto &test_case : test_group["tests"]) {
std::cerr << " Testing Case " << test_case["description"] << "\n";
bool valid = true;
try {
validator.validate(test_case["data"], schema);
} catch (const std::out_of_range &e) {
valid = false;
std::cerr << " Test Case Exception (out of range): " << e.what() << "\n";
} catch (const std::invalid_argument &e) {
valid = false;
std::cerr << " Test Case Exception (invalid argument): " << e.what() << "\n";
} catch (const std::logic_error &e) {
valid = !test_case["valid"]; /* force test-case failure */
std::cerr << " Not yet implemented: " << e.what() << "\n";
}
if (valid == test_case["valid"])
std::cerr << " --> Test Case exited with " << valid << " as expected.\n";
else {
failed++;
std::cerr << " --> Test Case exited with " << valid << " NOT expected.\n";
}
total++;
std::cerr << "\n";
}
std::cerr << "-------------\n";
}
std::cerr << (total - failed) << " of " << total << " have succeeded - " << failed << " failed\n";
return failed;
}