more test cases
This commit is contained in:
parent
8ed9eaa629
commit
441a6f267f
3 changed files with 62 additions and 16 deletions
14
src/json.hpp
14
src/json.hpp
|
@ -497,6 +497,8 @@ class basic_json
|
|||
///////////////////////
|
||||
|
||||
/*!
|
||||
@brief serialization
|
||||
|
||||
Serialization function for JSON objects. The function tries to mimick Python's
|
||||
@p json.dumps() function, and currently supports its @p indent parameter.
|
||||
|
||||
|
@ -536,7 +538,7 @@ class basic_json
|
|||
// value conversion //
|
||||
//////////////////////
|
||||
|
||||
/// get an object
|
||||
/// get an object (explicit)
|
||||
template <class T, typename
|
||||
std::enable_if<
|
||||
std::is_constructible<string_t, typename T::key_type>::value and
|
||||
|
@ -553,7 +555,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get an array
|
||||
/// get an array (explicit)
|
||||
template <class T, typename
|
||||
std::enable_if<
|
||||
not std::is_same<T, string_t>::value and
|
||||
|
@ -570,7 +572,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get a string
|
||||
/// get a string (explicit)
|
||||
template <typename T, typename
|
||||
std::enable_if<
|
||||
std::is_constructible<T, string_t>::value, int>::type
|
||||
|
@ -586,7 +588,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get a boolean
|
||||
/// get a boolean (explicit)
|
||||
template <typename T, typename
|
||||
std::enable_if<
|
||||
std::is_same<boolean_t, T>::value, int>::type
|
||||
|
@ -602,7 +604,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// explicitly get a number
|
||||
/// get a number (explicit)
|
||||
template<typename T, typename
|
||||
std::enable_if<
|
||||
not std::is_same<boolean_t, T>::value and
|
||||
|
@ -621,7 +623,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// explicitly get a value
|
||||
/// get a value (implicit)
|
||||
template<typename T>
|
||||
inline operator T() const
|
||||
{
|
||||
|
|
|
@ -497,6 +497,8 @@ class basic_json
|
|||
///////////////////////
|
||||
|
||||
/*!
|
||||
@brief serialization
|
||||
|
||||
Serialization function for JSON objects. The function tries to mimick Python's
|
||||
@p json.dumps() function, and currently supports its @p indent parameter.
|
||||
|
||||
|
@ -536,7 +538,7 @@ class basic_json
|
|||
// value conversion //
|
||||
//////////////////////
|
||||
|
||||
/// get an object
|
||||
/// get an object (explicit)
|
||||
template <class T, typename
|
||||
std::enable_if<
|
||||
std::is_constructible<string_t, typename T::key_type>::value and
|
||||
|
@ -553,7 +555,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get an array
|
||||
/// get an array (explicit)
|
||||
template <class T, typename
|
||||
std::enable_if<
|
||||
not std::is_same<T, string_t>::value and
|
||||
|
@ -570,7 +572,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get a string
|
||||
/// get a string (explicit)
|
||||
template <typename T, typename
|
||||
std::enable_if<
|
||||
std::is_constructible<T, string_t>::value, int>::type
|
||||
|
@ -586,7 +588,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// get a boolean
|
||||
/// get a boolean (explicit)
|
||||
template <typename T, typename
|
||||
std::enable_if<
|
||||
std::is_same<boolean_t, T>::value, int>::type
|
||||
|
@ -602,7 +604,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// explicitly get a number
|
||||
/// get a number (explicit)
|
||||
template<typename T, typename
|
||||
std::enable_if<
|
||||
not std::is_same<boolean_t, T>::value and
|
||||
|
@ -621,7 +623,7 @@ class basic_json
|
|||
}
|
||||
}
|
||||
|
||||
/// explicitly get a value
|
||||
/// get a value (implicit)
|
||||
template<typename T>
|
||||
inline operator T() const
|
||||
{
|
||||
|
|
|
@ -1034,23 +1034,26 @@ TEST_CASE("other constructors and destructor")
|
|||
|
||||
TEST_CASE("object inspection")
|
||||
{
|
||||
SECTION("dump")
|
||||
SECTION("serialization")
|
||||
{
|
||||
json j {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"} };
|
||||
|
||||
SECTION("no indent")
|
||||
{
|
||||
CHECK(j.dump() == "{\"array\":[1,2,3,4],\"boolean\":false,\"null\":null,\"number\":42,\"object\":{},\"string\":\"Hello world\"}");
|
||||
CHECK(j.dump() ==
|
||||
"{\"array\":[1,2,3,4],\"boolean\":false,\"null\":null,\"number\":42,\"object\":{},\"string\":\"Hello world\"}");
|
||||
}
|
||||
|
||||
SECTION("indent=0")
|
||||
{
|
||||
CHECK(j.dump(0) == "{\n\"array\": [\n1,\n2,\n3,\n4\n],\n\"boolean\": false,\n\"null\": null,\n\"number\": 42,\n\"object\": {},\n\"string\": \"Hello world\"\n}");
|
||||
CHECK(j.dump(0) ==
|
||||
"{\n\"array\": [\n1,\n2,\n3,\n4\n],\n\"boolean\": false,\n\"null\": null,\n\"number\": 42,\n\"object\": {},\n\"string\": \"Hello world\"\n}");
|
||||
}
|
||||
|
||||
SECTION("indent=4")
|
||||
{
|
||||
CHECK(j.dump(4) == "{\n \"array\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"boolean\": false,\n \"null\": null,\n \"number\": 42,\n \"object\": {},\n \"string\": \"Hello world\"\n}");
|
||||
CHECK(j.dump(4) ==
|
||||
"{\n \"array\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"boolean\": false,\n \"null\": null,\n \"number\": 42,\n \"object\": {},\n \"string\": \"Hello world\"\n}");
|
||||
}
|
||||
|
||||
SECTION("dump and floating-point numbers")
|
||||
|
@ -1157,3 +1160,42 @@ TEST_CASE("object inspection")
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("value conversion")
|
||||
{
|
||||
SECTION("get an object (explicit)")
|
||||
{
|
||||
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 = j.get<std::map<std::string, json>>();
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::map<std::string, json>")
|
||||
{
|
||||
std::map<std::string, json> o = j.get<std::map<std::string, json>>();
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::multimap<std::string, json>")
|
||||
{
|
||||
std::multimap<std::string, json> o = j.get<std::multimap<std::string, json>>();
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::unordered_map<std::string, json>")
|
||||
{
|
||||
std::unordered_map<std::string, json> o = j.get<std::unordered_map<std::string, json>>();
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
|
||||
SECTION("std::unordered_multimap<std::string, json>")
|
||||
{
|
||||
std::unordered_multimap<std::string, json> o = j.get<std::unordered_multimap<std::string, json>>();
|
||||
CHECK(json(o) == j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue