🔨 added user-defined exceptions 401-402

parent 491c9780
...@@ -3648,7 +3648,7 @@ class basic_json ...@@ -3648,7 +3648,7 @@ class basic_json
@throw type_error.304 if the JSON value is not an array; example: `"cannot @throw type_error.304 if the JSON value is not an array; example: `"cannot
use at() with string"` use at() with string"`
@throw std::out_of_range if the index @a idx is out of range of the array; @throw out_of_range.401 if the index @a idx is out of range of the array;
that is, `idx >= size()`; example: `"array index 7 is out of range"` that is, `idx >= size()`; example: `"array index 7 is out of range"`
@complexity Constant. @complexity Constant.
...@@ -3670,7 +3670,7 @@ class basic_json ...@@ -3670,7 +3670,7 @@ class basic_json
JSON_CATCH (std::out_of_range&) JSON_CATCH (std::out_of_range&)
{ {
// create better exception explanation // create better exception explanation
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
} }
else else
...@@ -3691,7 +3691,7 @@ class basic_json ...@@ -3691,7 +3691,7 @@ class basic_json
@throw type_error.304 if the JSON value is not an array; example: `"cannot @throw type_error.304 if the JSON value is not an array; example: `"cannot
use at() with string"` use at() with string"`
@throw std::out_of_range if the index @a idx is out of range of the array; @throw out_of_range.401 if the index @a idx is out of range of the array;
that is, `idx >= size()`; example: `"array index 7 is out of range"` that is, `idx >= size()`; example: `"array index 7 is out of range"`
@complexity Constant. @complexity Constant.
...@@ -3713,7 +3713,7 @@ class basic_json ...@@ -3713,7 +3713,7 @@ class basic_json
JSON_CATCH (std::out_of_range&) JSON_CATCH (std::out_of_range&)
{ {
// create better exception explanation // create better exception explanation
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
} }
else else
...@@ -4666,7 +4666,7 @@ class basic_json ...@@ -4666,7 +4666,7 @@ class basic_json
{ {
if (idx >= size()) if (idx >= size())
{ {
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
...@@ -12179,9 +12179,9 @@ basic_json_parser_74: ...@@ -12179,9 +12179,9 @@ basic_json_parser_74:
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" always fails the range check // "-" always fails the range check
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -12238,9 +12238,9 @@ basic_json_parser_74: ...@@ -12238,9 +12238,9 @@ basic_json_parser_74:
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" cannot be used for const access // "-" cannot be used for const access
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -12289,9 +12289,9 @@ basic_json_parser_74: ...@@ -12289,9 +12289,9 @@ basic_json_parser_74:
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" always fails the range check // "-" always fails the range check
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -12850,7 +12850,7 @@ basic_json_parser_74: ...@@ -12850,7 +12850,7 @@ basic_json_parser_74:
if (static_cast<size_type>(idx) > parent.size()) if (static_cast<size_type>(idx) > parent.size())
{ {
// avoid undefined behavior // avoid undefined behavior
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
else else
{ {
......
...@@ -3648,7 +3648,7 @@ class basic_json ...@@ -3648,7 +3648,7 @@ class basic_json
@throw type_error.304 if the JSON value is not an array; example: `"cannot @throw type_error.304 if the JSON value is not an array; example: `"cannot
use at() with string"` use at() with string"`
@throw std::out_of_range if the index @a idx is out of range of the array; @throw out_of_range.401 if the index @a idx is out of range of the array;
that is, `idx >= size()`; example: `"array index 7 is out of range"` that is, `idx >= size()`; example: `"array index 7 is out of range"`
@complexity Constant. @complexity Constant.
...@@ -3670,7 +3670,7 @@ class basic_json ...@@ -3670,7 +3670,7 @@ class basic_json
JSON_CATCH (std::out_of_range&) JSON_CATCH (std::out_of_range&)
{ {
// create better exception explanation // create better exception explanation
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
} }
else else
...@@ -3691,7 +3691,7 @@ class basic_json ...@@ -3691,7 +3691,7 @@ class basic_json
@throw type_error.304 if the JSON value is not an array; example: `"cannot @throw type_error.304 if the JSON value is not an array; example: `"cannot
use at() with string"` use at() with string"`
@throw std::out_of_range if the index @a idx is out of range of the array; @throw out_of_range.401 if the index @a idx is out of range of the array;
that is, `idx >= size()`; example: `"array index 7 is out of range"` that is, `idx >= size()`; example: `"array index 7 is out of range"`
@complexity Constant. @complexity Constant.
...@@ -3713,7 +3713,7 @@ class basic_json ...@@ -3713,7 +3713,7 @@ class basic_json
JSON_CATCH (std::out_of_range&) JSON_CATCH (std::out_of_range&)
{ {
// create better exception explanation // create better exception explanation
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
} }
else else
...@@ -4666,7 +4666,7 @@ class basic_json ...@@ -4666,7 +4666,7 @@ class basic_json
{ {
if (idx >= size()) if (idx >= size())
{ {
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx)); m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
...@@ -11212,9 +11212,9 @@ class basic_json ...@@ -11212,9 +11212,9 @@ class basic_json
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" always fails the range check // "-" always fails the range check
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -11271,9 +11271,9 @@ class basic_json ...@@ -11271,9 +11271,9 @@ class basic_json
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" cannot be used for const access // "-" cannot be used for const access
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -11322,9 +11322,9 @@ class basic_json ...@@ -11322,9 +11322,9 @@ class basic_json
if (reference_token == "-") if (reference_token == "-")
{ {
// "-" always fails the range check // "-" always fails the range check
JSON_THROW(std::out_of_range("array index '-' (" + JSON_THROW(out_of_range(402, "array index '-' (" +
std::to_string(ptr->m_value.array->size()) + std::to_string(ptr->m_value.array->size()) +
") is out of range")); ") is out of range"));
} }
// error condition (cf. RFC 6901, Sect. 4) // error condition (cf. RFC 6901, Sect. 4)
...@@ -11883,7 +11883,7 @@ class basic_json ...@@ -11883,7 +11883,7 @@ class basic_json
if (static_cast<size_type>(idx) > parent.size()) if (static_cast<size_type>(idx) > parent.size())
{ {
// avoid undefined behavior // avoid undefined behavior
JSON_THROW(std::out_of_range("array index " + std::to_string(idx) + " is out of range")); JSON_THROW(out_of_range(401, "array index " + std::to_string(idx) + " is out of range"));
} }
else else
{ {
......
...@@ -63,11 +63,13 @@ TEST_CASE("element access 1") ...@@ -63,11 +63,13 @@ TEST_CASE("element access 1")
SECTION("access outside bounds") SECTION("access outside bounds")
{ {
CHECK_THROWS_AS(j.at(8), std::out_of_range); CHECK_THROWS_AS(j.at(8), json::out_of_range);
CHECK_THROWS_AS(j_const.at(8), std::out_of_range); CHECK_THROWS_AS(j_const.at(8), json::out_of_range);
CHECK_THROWS_WITH(j.at(8), "array index 8 is out of range"); CHECK_THROWS_WITH(j.at(8),
CHECK_THROWS_WITH(j_const.at(8), "array index 8 is out of range"); "[json.exception.out_of_range.401] array index 8 is out of range");
CHECK_THROWS_WITH(j_const.at(8),
"[json.exception.out_of_range.401] array index 8 is out of range");
} }
SECTION("access on non-array type") SECTION("access on non-array type")
...@@ -311,8 +313,9 @@ TEST_CASE("element access 1") ...@@ -311,8 +313,9 @@ TEST_CASE("element access 1")
} }
{ {
json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}};
CHECK_THROWS_AS(jarray.erase(8), std::out_of_range); CHECK_THROWS_AS(jarray.erase(8), json::out_of_range);
CHECK_THROWS_WITH(jarray.erase(8), "array index 8 is out of range"); CHECK_THROWS_WITH(jarray.erase(8),
"[json.exception.out_of_range.401] array index 8 is out of range");
} }
} }
......
...@@ -741,8 +741,9 @@ TEST_CASE("JSON patch") ...@@ -741,8 +741,9 @@ TEST_CASE("JSON patch")
{ {
json j = {1, 2}; json j = {1, 2};
json patch = {{{"op", "add"}, {"path", "/4"}, {"value", 4}}}; json patch = {{{"op", "add"}, {"path", "/4"}, {"value", 4}}};
CHECK_THROWS_AS(j.patch(patch), std::out_of_range); CHECK_THROWS_AS(j.patch(patch), json::out_of_range);
CHECK_THROWS_WITH(j.patch(patch), "array index 4 is out of range"); CHECK_THROWS_WITH(j.patch(patch),
"[json.exception.out_of_range.401] array index 4 is out of range");
} }
} }
...@@ -770,8 +771,9 @@ TEST_CASE("JSON patch") ...@@ -770,8 +771,9 @@ TEST_CASE("JSON patch")
{ {
json j = {1, 2, 3}; json j = {1, 2, 3};
json patch = {{{"op", "remove"}, {"path", "/17"}}}; json patch = {{{"op", "remove"}, {"path", "/17"}}};
CHECK_THROWS_AS(j.patch(patch), std::out_of_range); CHECK_THROWS_AS(j.patch(patch), json::out_of_range);
CHECK_THROWS_WITH(j.patch(patch), "array index 17 is out of range"); CHECK_THROWS_WITH(j.patch(patch),
"[json.exception.out_of_range.401] array index 17 is out of range");
} }
SECTION("nonexisting target location (object)") SECTION("nonexisting target location (object)")
...@@ -824,8 +826,9 @@ TEST_CASE("JSON patch") ...@@ -824,8 +826,9 @@ TEST_CASE("JSON patch")
{ {
json j = {1, 2, 3}; json j = {1, 2, 3};
json patch = {{{"op", "replace"}, {"path", "/17"}, {"value", 19}}}; json patch = {{{"op", "replace"}, {"path", "/17"}, {"value", 19}}};
CHECK_THROWS_AS(j.patch(patch), std::out_of_range); CHECK_THROWS_AS(j.patch(patch), json::out_of_range);
CHECK_THROWS_WITH(j.patch(patch), "array index 17 is out of range"); CHECK_THROWS_WITH(j.patch(patch),
"[json.exception.out_of_range.401] array index 17 is out of range");
} }
SECTION("nonexisting target location (object)") SECTION("nonexisting target location (object)")
...@@ -879,8 +882,9 @@ TEST_CASE("JSON patch") ...@@ -879,8 +882,9 @@ TEST_CASE("JSON patch")
{ {
json j = {1, 2, 3}; json j = {1, 2, 3};
json patch = {{{"op", "move"}, {"path", "/0"}, {"from", "/5"}}}; json patch = {{{"op", "move"}, {"path", "/0"}, {"from", "/5"}}};
CHECK_THROWS_AS(j.patch(patch), std::out_of_range); CHECK_THROWS_AS(j.patch(patch), json::out_of_range);
CHECK_THROWS_WITH(j.patch(patch), "array index 5 is out of range"); CHECK_THROWS_WITH(j.patch(patch),
"[json.exception.out_of_range.401] array index 5 is out of range");
} }
SECTION("nonexisting from location (object)") SECTION("nonexisting from location (object)")
...@@ -934,8 +938,9 @@ TEST_CASE("JSON patch") ...@@ -934,8 +938,9 @@ TEST_CASE("JSON patch")
{ {
json j = {1, 2, 3}; json j = {1, 2, 3};
json patch = {{{"op", "copy"}, {"path", "/0"}, {"from", "/5"}}}; json patch = {{{"op", "copy"}, {"path", "/0"}, {"from", "/5"}}};
CHECK_THROWS_AS(j.patch(patch), std::out_of_range); CHECK_THROWS_AS(j.patch(patch), json::out_of_range);
CHECK_THROWS_WITH(j.patch(patch), "array index 5 is out of range"); CHECK_THROWS_WITH(j.patch(patch),
"[json.exception.out_of_range.401] array index 5 is out of range");
} }
SECTION("nonexisting from location (object)") SECTION("nonexisting from location (object)")
......
...@@ -271,14 +271,17 @@ TEST_CASE("JSON pointers") ...@@ -271,14 +271,17 @@ TEST_CASE("JSON pointers")
CHECK(j == json({1, 13, 3, 33, nullptr, 55, 99})); CHECK(j == json({1, 13, 3, 33, nullptr, 55, 99}));
// error when using "-" in const object // error when using "-" in const object
CHECK_THROWS_AS(j_const["/-"_json_pointer], std::out_of_range); CHECK_THROWS_AS(j_const["/-"_json_pointer], json::out_of_range);
CHECK_THROWS_WITH(j_const["/-"_json_pointer], "array index '-' (3) is out of range"); CHECK_THROWS_WITH(j_const["/-"_json_pointer],
"[json.exception.out_of_range.402] array index '-' (3) is out of range");
// error when using "-" with at // error when using "-" with at
CHECK_THROWS_AS(j.at("/-"_json_pointer), std::out_of_range); CHECK_THROWS_AS(j.at("/-"_json_pointer), json::out_of_range);
CHECK_THROWS_WITH(j.at("/-"_json_pointer), "array index '-' (7) is out of range"); CHECK_THROWS_WITH(j.at("/-"_json_pointer),
CHECK_THROWS_AS(j_const.at("/-"_json_pointer), std::out_of_range); "[json.exception.out_of_range.402] array index '-' (7) is out of range");
CHECK_THROWS_WITH(j_const.at("/-"_json_pointer), "array index '-' (3) 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");
} }
SECTION("const access") SECTION("const access")
...@@ -291,18 +294,22 @@ TEST_CASE("JSON pointers") ...@@ -291,18 +294,22 @@ TEST_CASE("JSON pointers")
CHECK(j["/2"_json_pointer] == j[2]); CHECK(j["/2"_json_pointer] == j[2]);
// assign to nonexisting index // assign to nonexisting index
CHECK_THROWS_AS(j.at("/3"_json_pointer), std::out_of_range); CHECK_THROWS_AS(j.at("/3"_json_pointer), json::out_of_range);
CHECK_THROWS_WITH(j.at("/3"_json_pointer), "array index 3 is out of range"); CHECK_THROWS_WITH(j.at("/3"_json_pointer),
"[json.exception.out_of_range.401] array index 3 is out of range");
// assign to nonexisting index (with gap) // assign to nonexisting index (with gap)
CHECK_THROWS_AS(j.at("/5"_json_pointer), std::out_of_range); CHECK_THROWS_AS(j.at("/5"_json_pointer), json::out_of_range);
CHECK_THROWS_WITH(j.at("/5"_json_pointer), "array index 5 is out of range"); CHECK_THROWS_WITH(j.at("/5"_json_pointer),
"[json.exception.out_of_range.401] array index 5 is out of range");
// assign to "-" // assign to "-"
CHECK_THROWS_AS(j["/-"_json_pointer], std::out_of_range); CHECK_THROWS_AS(j["/-"_json_pointer], json::out_of_range);
CHECK_THROWS_WITH(j["/-"_json_pointer], "array index '-' (3) is out of range"); CHECK_THROWS_WITH(j["/-"_json_pointer],
CHECK_THROWS_AS(j.at("/-"_json_pointer), std::out_of_range); "[json.exception.out_of_range.402] array index '-' (3) is out of range");
CHECK_THROWS_WITH(j.at("/-"_json_pointer), "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");
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment