make sure values are overwritten in from_json overloads
Caused unexpected behaviors when using get_to with values previously set. Fixes !1511
This commit is contained in:
parent
b21c04c938
commit
2806b201a8
4 changed files with 206 additions and 41 deletions
test/src
|
@ -140,6 +140,54 @@ TEST_CASE("value conversion")
|
|||
}
|
||||
}
|
||||
|
||||
SECTION("get an object (explicit, get_to)")
|
||||
{
|
||||
json::object_t o_reference = {{"object", json::object()},
|
||||
{"array", {1, 2, 3, 4}},
|
||||
{"number", 42},
|
||||
{"boolean", false},
|
||||
{"null", nullptr},
|
||||
{"string", "Hello world"}
|
||||
};
|
||||
json j(o_reference);
|
||||
|
||||
SECTION("json::object_t")
|
||||
{
|
||||
json::object_t o = {{"previous", "value"}};
|
||||
j.get_to(o);
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::map<json::string_t, json>")
|
||||
{
|
||||
std::map<json::string_t, json> o{{"previous", "value"}};
|
||||
j.get_to(o);
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::multimap<json::string_t, json>")
|
||||
{
|
||||
std::multimap<json::string_t, json> o{{"previous", "value"}};
|
||||
j.get_to(o);
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::unordered_map<json::string_t, json>")
|
||||
{
|
||||
std::unordered_map<json::string_t, json> o{{"previous", "value"}};
|
||||
j.get_to(o);
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::unordered_multimap<json::string_t, json>")
|
||||
{
|
||||
std::unordered_multimap<json::string_t, json> o{{"previous", "value"}};
|
||||
j.get_to(o);
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SECTION("get an object (implicit)")
|
||||
{
|
||||
json::object_t o_reference = {{"object", json::object()},
|
||||
|
@ -226,11 +274,6 @@ TEST_CASE("value conversion")
|
|||
#if not defined(JSON_NOEXCEPTION)
|
||||
SECTION("reserve is called on containers that supports it")
|
||||
{
|
||||
// making the call to from_json throw in order to check capacity
|
||||
std::vector<float> v;
|
||||
CHECK_THROWS_AS(nlohmann::from_json(j, v), json::type_error&);
|
||||
CHECK(v.capacity() == j.size());
|
||||
|
||||
// make sure all values are properly copied
|
||||
std::vector<int> v2 = json({1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
|
||||
CHECK(v2.size() == 10);
|
||||
|
@ -302,6 +345,55 @@ TEST_CASE("value conversion")
|
|||
}
|
||||
}
|
||||
|
||||
SECTION("get an array (explicit, get_to)")
|
||||
{
|
||||
json::array_t a_reference{json(1), json(1u), json(2.2),
|
||||
json(false), json("string"), json()};
|
||||
json j(a_reference);
|
||||
|
||||
SECTION("json::array_t")
|
||||
{
|
||||
json::array_t a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
|
||||
SECTION("std::valarray<json>")
|
||||
{
|
||||
std::valarray<json> a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
|
||||
SECTION("std::list<json>")
|
||||
{
|
||||
std::list<json> a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
|
||||
SECTION("std::forward_list<json>")
|
||||
{
|
||||
std::forward_list<json> a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
|
||||
SECTION("std::vector<json>")
|
||||
{
|
||||
std::vector<json> a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
|
||||
SECTION("std::deque<json>")
|
||||
{
|
||||
std::deque<json> a{"previous", "value"};
|
||||
j.get_to(a);
|
||||
CHECK(json(a) == j);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("get an array (implicit)")
|
||||
{
|
||||
json::array_t a_reference{json(1), json(1u), json(2.2),
|
||||
|
@ -433,6 +525,35 @@ TEST_CASE("value conversion")
|
|||
#endif
|
||||
}
|
||||
|
||||
SECTION("get a string (explicit, get_to)")
|
||||
{
|
||||
json::string_t s_reference{"Hello world"};
|
||||
json j(s_reference);
|
||||
|
||||
SECTION("string_t")
|
||||
{
|
||||
json::string_t s = "previous value";
|
||||
j.get_to(s);
|
||||
CHECK(json(s) == j);
|
||||
}
|
||||
|
||||
SECTION("std::string")
|
||||
{
|
||||
std::string s = "previous value";
|
||||
j.get_to(s);
|
||||
CHECK(json(s) == j);
|
||||
}
|
||||
#if defined(JSON_HAS_CPP_17)
|
||||
SECTION("std::string_view")
|
||||
{
|
||||
std::string s = "previous value";
|
||||
std::string_view sv = s;
|
||||
j.get_to(sv);
|
||||
CHECK(json(sv) == j);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
SECTION("get null (explicit)")
|
||||
{
|
||||
std::nullptr_t n = nullptr;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue