mirror of
https://github.com/nlohmann/json.git
synced 2025-08-07 18:02:57 +03:00
Extend type_name() to invalid type (#4786)
* ✅ add regression test Signed-off-by: Niels Lohmann <mail@nlohmann.me> * 💚 fix build Signed-off-by: Niels Lohmann <mail@nlohmann.me> * 📝 add comment Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -563,7 +563,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
(t == value_t::binary && binary == nullptr)
|
(t == value_t::binary && binary == nullptr)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//not initialized (e.g., due to exception in the ctor)
|
// not initialized (e.g., due to exception in the ctor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (t == value_t::array || t == value_t::object)
|
if (t == value_t::array || t == value_t::object)
|
||||||
@@ -4206,8 +4206,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
case value_t::number_integer:
|
case value_t::number_integer:
|
||||||
case value_t::number_unsigned:
|
case value_t::number_unsigned:
|
||||||
case value_t::number_float:
|
case value_t::number_float:
|
||||||
default:
|
|
||||||
return "number";
|
return "number";
|
||||||
|
default:
|
||||||
|
return "invalid";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20648,7 +20648,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
(t == value_t::binary && binary == nullptr)
|
(t == value_t::binary && binary == nullptr)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//not initialized (e.g., due to exception in the ctor)
|
// not initialized (e.g., due to exception in the ctor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (t == value_t::array || t == value_t::object)
|
if (t == value_t::array || t == value_t::object)
|
||||||
@@ -24291,8 +24291,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
|
|||||||
case value_t::number_integer:
|
case value_t::number_integer:
|
||||||
case value_t::number_unsigned:
|
case value_t::number_unsigned:
|
||||||
case value_t::number_float:
|
case value_t::number_float:
|
||||||
default:
|
|
||||||
return "number";
|
return "number";
|
||||||
|
default:
|
||||||
|
return "invalid";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1080,6 +1080,20 @@ TEST_CASE("regression tests 2")
|
|||||||
CHECK(t4.port.has_value());
|
CHECK(t4.port.has_value());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(_MSVC_LANG)
|
||||||
|
// MSVC returns garbage on invalid enum values, so this test is excluded
|
||||||
|
// there.
|
||||||
|
SECTION("issue #4762 - json exception 302 with unhelpful explanation : type must be number, but is number")
|
||||||
|
{
|
||||||
|
// In #4762, the main issue was that a json object with an invalid type
|
||||||
|
// returned "number" as type_name(), because this was the default case.
|
||||||
|
// This test makes sure we now return "invalid" instead.
|
||||||
|
json j;
|
||||||
|
j.m_data.m_type = static_cast<json::value_t>(100); // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange)
|
||||||
|
CHECK(j.type_name() == "invalid");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
DOCTEST_CLANG_SUPPRESS_WARNING_POP
|
||||||
|
Reference in New Issue
Block a user