mirror of
https://github.com/nlohmann/json.git
synced 2026-02-10 12:02:28 +00:00
✅ improved test coverage
This commit is contained in:
@@ -64,11 +64,24 @@ TEST_CASE("reference access")
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_NOTHROW(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_float_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is object");
|
||||
}
|
||||
|
||||
SECTION("const reference access to const object_t")
|
||||
@@ -100,12 +113,25 @@ TEST_CASE("reference access")
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
CHECK_NOTHROW(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_float_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is array");
|
||||
}
|
||||
|
||||
SECTION("reference access to string_t")
|
||||
@@ -123,12 +149,25 @@ TEST_CASE("reference access")
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
CHECK_NOTHROW(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_float_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is string");
|
||||
}
|
||||
|
||||
SECTION("reference access to boolean_t")
|
||||
@@ -146,18 +185,31 @@ TEST_CASE("reference access")
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
CHECK_NOTHROW(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_float_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is boolean");
|
||||
}
|
||||
|
||||
SECTION("reference access to number_integer_t")
|
||||
{
|
||||
using test_type = json::number_integer_t;
|
||||
json value = 23;
|
||||
json value = -23;
|
||||
|
||||
// check if references are returned correctly
|
||||
test_type& p1 = value.get_ref<test_type&>();
|
||||
@@ -169,12 +221,61 @@ TEST_CASE("reference access")
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_NOTHROW(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_float_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
}
|
||||
|
||||
SECTION("reference access to number_unsigned_t")
|
||||
{
|
||||
using test_type = json::number_unsigned_t;
|
||||
json value = 23u;
|
||||
|
||||
// check if references are returned correctly
|
||||
test_type& p1 = value.get_ref<test_type&>();
|
||||
CHECK(&p1 == value.get_ptr<test_type*>());
|
||||
CHECK(p1 == value.get<test_type>());
|
||||
|
||||
const test_type& p2 = value.get_ref<const test_type&>();
|
||||
CHECK(&p2 == value.get_ptr<const test_type*>());
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
//CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
//CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
// "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_NOTHROW(value.get_ref<json::number_unsigned_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_float_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_float_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
}
|
||||
|
||||
SECTION("reference access to number_float_t")
|
||||
@@ -192,11 +293,24 @@ TEST_CASE("reference access")
|
||||
CHECK(p2 == value.get<test_type>());
|
||||
|
||||
// check if mismatching references throw correctly
|
||||
CHECK_THROWS(value.get_ref<json::object_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::array_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::string_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::boolean_t&>());
|
||||
CHECK_THROWS(value.get_ref<json::number_integer_t&>());
|
||||
CHECK_THROWS_AS(value.get_ref<json::object_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::object_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::array_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::array_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::string_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::string_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::boolean_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::boolean_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_integer_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_integer_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_THROWS_AS(value.get_ref<json::number_unsigned_t&>(), json::type_error&);
|
||||
CHECK_THROWS_WITH(value.get_ref<json::number_unsigned_t&>(),
|
||||
"[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number");
|
||||
CHECK_NOTHROW(value.get_ref<json::number_float_t&>());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user