From 44d242da7d22c630c94e5b27a966005c6dca5447 Mon Sep 17 00:00:00 2001 From: Krzysiek Karbowiak Date: Thu, 17 Mar 2022 10:42:03 +0100 Subject: [PATCH] Refactor assertions in unit-json_pointer.cpp --- test/src/unit-json_pointer.cpp | 192 +++++++++++++-------------------- 1 file changed, 76 insertions(+), 116 deletions(-) diff --git a/test/src/unit-json_pointer.cpp b/test/src/unit-json_pointer.cpp index 41d7d3a9d..f2d52691f 100644 --- a/test/src/unit-json_pointer.cpp +++ b/test/src/unit-json_pointer.cpp @@ -37,33 +37,27 @@ TEST_CASE("JSON pointers") { SECTION("errors") { - CHECK_THROWS_AS(json::json_pointer("foo"), json::parse_error&); - CHECK_THROWS_WITH(json::json_pointer("foo"), - "[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'"); + CHECK_THROWS_WITH_AS(json::json_pointer("foo"), + "[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'", json::parse_error&); - CHECK_THROWS_AS(json::json_pointer("/~~"), json::parse_error&); - CHECK_THROWS_WITH(json::json_pointer("/~~"), - "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'"); + CHECK_THROWS_WITH_AS(json::json_pointer("/~~"), + "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'", json::parse_error&); - CHECK_THROWS_AS(json::json_pointer("/~"), json::parse_error&); - CHECK_THROWS_WITH(json::json_pointer("/~"), - "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'"); + CHECK_THROWS_WITH_AS(json::json_pointer("/~"), + "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'", json::parse_error&); json::json_pointer p; - CHECK_THROWS_AS(p.top(), json::out_of_range&); - CHECK_THROWS_WITH(p.top(), - "[json.exception.out_of_range.405] JSON pointer has no parent"); - CHECK_THROWS_AS(p.pop_back(), json::out_of_range&); - CHECK_THROWS_WITH(p.pop_back(), - "[json.exception.out_of_range.405] JSON pointer has no parent"); + CHECK_THROWS_WITH_AS(p.top(), + "[json.exception.out_of_range.405] JSON pointer has no parent", json::out_of_range&); + CHECK_THROWS_WITH_AS(p.pop_back(), + "[json.exception.out_of_range.405] JSON pointer has no parent", json::out_of_range&); SECTION("array index error") { json v = {1, 2, 3, 4}; json::json_pointer ptr("/10e"); - CHECK_THROWS_AS(v[ptr], json::out_of_range&); - CHECK_THROWS_WITH(v[ptr], - "[json.exception.out_of_range.404] unresolved reference token '10e'"); + CHECK_THROWS_WITH_AS(v[ptr], + "[json.exception.out_of_range.404] unresolved reference token '10e'", json::out_of_range&); } } @@ -165,12 +159,10 @@ TEST_CASE("JSON pointers") // unresolved access json j_primitive = 1; - CHECK_THROWS_AS(j_primitive["/foo"_json_pointer], json::out_of_range&); - CHECK_THROWS_WITH(j_primitive["/foo"_json_pointer], - "[json.exception.out_of_range.404] unresolved reference token 'foo'"); - CHECK_THROWS_AS(j_primitive.at("/foo"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j_primitive.at("/foo"_json_pointer), - "[json.exception.out_of_range.404] unresolved reference token 'foo'"); + CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer], + "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&); + CHECK_THROWS_WITH_AS(j_primitive.at("/foo"_json_pointer), + "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&); CHECK(!j_primitive.contains(json::json_pointer("/foo"))); } @@ -229,18 +221,15 @@ TEST_CASE("JSON pointers") CHECK(j[json::json_pointer("/m~0n")] == j["m~n"]); // unescaped access - CHECK_THROWS_AS(j.at(json::json_pointer("/a/b")), json::out_of_range&); - CHECK_THROWS_WITH(j.at(json::json_pointer("/a/b")), - "[json.exception.out_of_range.403] key 'a' not found"); + CHECK_THROWS_WITH_AS(j.at(json::json_pointer("/a/b")), + "[json.exception.out_of_range.403] key 'a' not found", json::out_of_range&); // unresolved access const json j_primitive = 1; - CHECK_THROWS_AS(j_primitive["/foo"_json_pointer], json::out_of_range&); - CHECK_THROWS_WITH(j_primitive["/foo"_json_pointer], - "[json.exception.out_of_range.404] unresolved reference token 'foo'"); - CHECK_THROWS_AS(j_primitive.at("/foo"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j_primitive.at("/foo"_json_pointer), - "[json.exception.out_of_range.404] unresolved reference token 'foo'"); + CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer], + "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&); + CHECK_THROWS_WITH_AS(j_primitive.at("/foo"_json_pointer), + "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&); } SECTION("user-defined string literal") @@ -300,18 +289,14 @@ TEST_CASE("JSON pointers") CHECK(j == json({1, 13, 3, 33, nullptr, 55})); // error with leading 0 - CHECK_THROWS_AS(j["/01"_json_pointer], json::parse_error&); - CHECK_THROWS_WITH(j["/01"_json_pointer], - "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'"); - CHECK_THROWS_AS(j_const["/01"_json_pointer], json::parse_error&); - CHECK_THROWS_WITH(j_const["/01"_json_pointer], - "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'"); - CHECK_THROWS_AS(j.at("/01"_json_pointer), json::parse_error&); - CHECK_THROWS_WITH(j.at("/01"_json_pointer), - "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'"); - CHECK_THROWS_AS(j_const.at("/01"_json_pointer), json::parse_error&); - CHECK_THROWS_WITH(j_const.at("/01"_json_pointer), - "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'"); + CHECK_THROWS_WITH_AS(j["/01"_json_pointer], + "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const["/01"_json_pointer], + "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'", json::parse_error&); + CHECK_THROWS_WITH_AS(j.at("/01"_json_pointer), + "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const.at("/01"_json_pointer), + "[json.exception.parse_error.106] parse error: array index '01' must not begin with '0'", json::parse_error&); CHECK(!j.contains("/01"_json_pointer)); CHECK(!j.contains("/01"_json_pointer)); @@ -319,43 +304,33 @@ TEST_CASE("JSON pointers") CHECK(!j_const.contains("/01"_json_pointer)); // error with incorrect numbers - CHECK_THROWS_AS(j["/one"_json_pointer] = 1, json::parse_error&); - CHECK_THROWS_WITH(j["/one"_json_pointer] = 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); - CHECK_THROWS_AS(j_const["/one"_json_pointer] == 1, json::parse_error&); - CHECK_THROWS_WITH(j_const["/one"_json_pointer] == 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); + CHECK_THROWS_WITH_AS(j["/one"_json_pointer] = 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const["/one"_json_pointer] == 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); - CHECK_THROWS_AS(j.at("/one"_json_pointer) = 1, json::parse_error&); - CHECK_THROWS_WITH(j.at("/one"_json_pointer) = 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); - CHECK_THROWS_AS(j_const.at("/one"_json_pointer) == 1, json::parse_error&); - CHECK_THROWS_WITH(j_const.at("/one"_json_pointer) == 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); + CHECK_THROWS_WITH_AS(j.at("/one"_json_pointer) = 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const.at("/one"_json_pointer) == 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); - CHECK_THROWS_AS(j["/+1"_json_pointer] = 1, json::parse_error&); - CHECK_THROWS_WITH(j["/+1"_json_pointer] = 1, - "[json.exception.parse_error.109] parse error: array index '+1' is not a number"); - CHECK_THROWS_AS(j_const["/+1"_json_pointer] == 1, json::parse_error&); - CHECK_THROWS_WITH(j_const["/+1"_json_pointer] == 1, - "[json.exception.parse_error.109] parse error: array index '+1' is not a number"); + CHECK_THROWS_WITH_AS(j["/+1"_json_pointer] = 1, + "[json.exception.parse_error.109] parse error: array index '+1' is not a number", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const["/+1"_json_pointer] == 1, + "[json.exception.parse_error.109] parse error: array index '+1' is not a number", json::parse_error&); - CHECK_THROWS_AS(j["/1+1"_json_pointer] = 1, json::out_of_range&); - CHECK_THROWS_WITH(j["/1+1"_json_pointer] = 1, - "[json.exception.out_of_range.404] unresolved reference token '1+1'"); - CHECK_THROWS_AS(j_const["/1+1"_json_pointer] == 1, json::out_of_range&); - CHECK_THROWS_WITH(j_const["/1+1"_json_pointer] == 1, - "[json.exception.out_of_range.404] unresolved reference token '1+1'"); + CHECK_THROWS_WITH_AS(j["/1+1"_json_pointer] = 1, + "[json.exception.out_of_range.404] unresolved reference token '1+1'", json::out_of_range&); + CHECK_THROWS_WITH_AS(j_const["/1+1"_json_pointer] == 1, + "[json.exception.out_of_range.404] unresolved reference token '1+1'", json::out_of_range&); { auto too_large_index = std::to_string((std::numeric_limits::max)()) + "1"; json::json_pointer jp(std::string("/") + too_large_index); std::string throw_msg = std::string("[json.exception.out_of_range.404] unresolved reference token '") + too_large_index + "'"; - CHECK_THROWS_AS(j[jp] = 1, json::out_of_range&); - CHECK_THROWS_WITH(j[jp] = 1, throw_msg.c_str()); - CHECK_THROWS_AS(j_const[jp] == 1, json::out_of_range&); - CHECK_THROWS_WITH(j_const[jp] == 1, throw_msg.c_str()); + CHECK_THROWS_WITH_AS(j[jp] = 1, throw_msg.c_str(), json::out_of_range&); + CHECK_THROWS_WITH_AS(j_const[jp] == 1, throw_msg.c_str(), json::out_of_range&); } // on some machines, the check below is not constant @@ -369,47 +344,39 @@ TEST_CASE("JSON pointers") json::json_pointer jp(std::string("/") + too_large_index); std::string throw_msg = std::string("[json.exception.out_of_range.410] array index ") + too_large_index + " exceeds size_type"; - CHECK_THROWS_AS(j[jp] = 1, json::out_of_range&); - CHECK_THROWS_WITH(j[jp] = 1, throw_msg.c_str()); - CHECK_THROWS_AS(j_const[jp] == 1, json::out_of_range&); - CHECK_THROWS_WITH(j_const[jp] == 1, throw_msg.c_str()); + CHECK_THROWS_WITH_AS(j[jp] = 1, throw_msg.c_str(), json::out_of_range&); + CHECK_THROWS_WITH_AS(j_const[jp] == 1, throw_msg.c_str(), json::out_of_range&); } DOCTEST_MSVC_SUPPRESS_WARNING_POP - CHECK_THROWS_AS(j.at("/one"_json_pointer) = 1, json::parse_error&); - CHECK_THROWS_WITH(j.at("/one"_json_pointer) = 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); - CHECK_THROWS_AS(j_const.at("/one"_json_pointer) == 1, json::parse_error&); - CHECK_THROWS_WITH(j_const.at("/one"_json_pointer) == 1, - "[json.exception.parse_error.109] parse error: array index 'one' is not a number"); + CHECK_THROWS_WITH_AS(j.at("/one"_json_pointer) = 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); + CHECK_THROWS_WITH_AS(j_const.at("/one"_json_pointer) == 1, + "[json.exception.parse_error.109] parse error: array index 'one' is not a number", json::parse_error&); CHECK(!j.contains("/one"_json_pointer)); CHECK(!j.contains("/one"_json_pointer)); CHECK(!j_const.contains("/one"_json_pointer)); CHECK(!j_const.contains("/one"_json_pointer)); - CHECK_THROWS_AS(json({{"/list/0", 1}, {"/list/1", 2}, {"/list/three", 3}}).unflatten(), json::parse_error&); - CHECK_THROWS_WITH(json({{"/list/0", 1}, {"/list/1", 2}, {"/list/three", 3}}).unflatten(), - "[json.exception.parse_error.109] parse error: array index 'three' is not a number"); + CHECK_THROWS_WITH_AS(json({{"/list/0", 1}, {"/list/1", 2}, {"/list/three", 3}}).unflatten(), + "[json.exception.parse_error.109] parse error: array index 'three' is not a number", json::parse_error&); // assign to "-" j["/-"_json_pointer] = 99; CHECK(j == json({1, 13, 3, 33, nullptr, 55, 99})); // error when using "-" in const object - CHECK_THROWS_AS(j_const["/-"_json_pointer], json::out_of_range&); - CHECK_THROWS_WITH(j_const["/-"_json_pointer], - "[json.exception.out_of_range.402] array index '-' (3) is out of range"); + CHECK_THROWS_WITH_AS(j_const["/-"_json_pointer], + "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&); CHECK(!j_const.contains("/-"_json_pointer)); // error when using "-" with at - CHECK_THROWS_AS(j.at("/-"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j.at("/-"_json_pointer), - "[json.exception.out_of_range.402] array index '-' (7) is out of range"); - CHECK_THROWS_AS(j_const.at("/-"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j_const.at("/-"_json_pointer), - "[json.exception.out_of_range.402] array index '-' (3) is out of range"); + CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer), + "[json.exception.out_of_range.402] array index '-' (7) is out of range", json::out_of_range&); + CHECK_THROWS_WITH_AS(j_const.at("/-"_json_pointer), + "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&); CHECK(!j_const.contains("/-"_json_pointer)); } @@ -423,24 +390,20 @@ TEST_CASE("JSON pointers") CHECK(j["/2"_json_pointer] == j[2]); // assign to nonexisting index - CHECK_THROWS_AS(j.at("/3"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j.at("/3"_json_pointer), - "[json.exception.out_of_range.401] array index 3 is out of range"); + CHECK_THROWS_WITH_AS(j.at("/3"_json_pointer), + "[json.exception.out_of_range.401] array index 3 is out of range", json::out_of_range&); CHECK(!j.contains("/3"_json_pointer)); // assign to nonexisting index (with gap) - CHECK_THROWS_AS(j.at("/5"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j.at("/5"_json_pointer), - "[json.exception.out_of_range.401] array index 5 is out of range"); + CHECK_THROWS_WITH_AS(j.at("/5"_json_pointer), + "[json.exception.out_of_range.401] array index 5 is out of range", json::out_of_range&); CHECK(!j.contains("/5"_json_pointer)); // assign to "-" - CHECK_THROWS_AS(j["/-"_json_pointer], json::out_of_range&); - CHECK_THROWS_WITH(j["/-"_json_pointer], - "[json.exception.out_of_range.402] array index '-' (3) is out of range"); - CHECK_THROWS_AS(j.at("/-"_json_pointer), json::out_of_range&); - CHECK_THROWS_WITH(j.at("/-"_json_pointer), - "[json.exception.out_of_range.402] array index '-' (3) is out of range"); + CHECK_THROWS_WITH_AS(j["/-"_json_pointer], + "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&); + CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer), + "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&); CHECK(!j.contains("/-"_json_pointer)); } } @@ -496,23 +459,20 @@ TEST_CASE("JSON pointers") CHECK(j_flatten.unflatten() == j); // error for nonobjects - CHECK_THROWS_AS(json(1).unflatten(), json::type_error&); - CHECK_THROWS_WITH(json(1).unflatten(), - "[json.exception.type_error.314] only objects can be unflattened"); + CHECK_THROWS_WITH_AS(json(1).unflatten(), + "[json.exception.type_error.314] only objects can be unflattened", json::type_error&); // error for nonprimitve values - CHECK_THROWS_AS(json({{"/1", {1, 2, 3}}}).unflatten(), json::type_error&); #if JSON_DIAGNOSTICS - CHECK_THROWS_WITH(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] (/~11) values in object must be primitive"); + CHECK_THROWS_WITH_AS(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] (/~11) values in object must be primitive", json::type_error&); #else - CHECK_THROWS_WITH(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] values in object must be primitive"); + CHECK_THROWS_WITH_AS(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] values in object must be primitive", json::type_error&); #endif // error for conflicting values json j_error = {{"", 42}, {"/foo", 17}}; - CHECK_THROWS_AS(j_error.unflatten(), json::type_error&); - CHECK_THROWS_WITH(j_error.unflatten(), - "[json.exception.type_error.313] invalid value to unflatten"); + CHECK_THROWS_WITH_AS(j_error.unflatten(), + "[json.exception.type_error.313] invalid value to unflatten", json::type_error&); // explicit roundtrip check CHECK(j.flatten().unflatten() == j);