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
|
Serialization function for JSON objects. The function tries to mimick Python's
|
||||||
@p json.dumps() function, and currently supports its @p indent parameter.
|
@p json.dumps() function, and currently supports its @p indent parameter.
|
||||||
|
|
||||||
|
@ -536,7 +538,7 @@ class basic_json
|
||||||
// value conversion //
|
// value conversion //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
|
|
||||||
/// get an object
|
/// get an object (explicit)
|
||||||
template <class T, typename
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_constructible<string_t, typename T::key_type>::value and
|
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
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
not std::is_same<T, string_t>::value and
|
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
|
template <typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_constructible<T, string_t>::value, int>::type
|
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
|
template <typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_same<boolean_t, T>::value, int>::type
|
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
|
template<typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
not std::is_same<boolean_t, T>::value and
|
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>
|
template<typename T>
|
||||||
inline operator T() const
|
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
|
Serialization function for JSON objects. The function tries to mimick Python's
|
||||||
@p json.dumps() function, and currently supports its @p indent parameter.
|
@p json.dumps() function, and currently supports its @p indent parameter.
|
||||||
|
|
||||||
|
@ -536,7 +538,7 @@ class basic_json
|
||||||
// value conversion //
|
// value conversion //
|
||||||
//////////////////////
|
//////////////////////
|
||||||
|
|
||||||
/// get an object
|
/// get an object (explicit)
|
||||||
template <class T, typename
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_constructible<string_t, typename T::key_type>::value and
|
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
|
template <class T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
not std::is_same<T, string_t>::value and
|
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
|
template <typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_constructible<T, string_t>::value, int>::type
|
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
|
template <typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
std::is_same<boolean_t, T>::value, int>::type
|
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
|
template<typename T, typename
|
||||||
std::enable_if<
|
std::enable_if<
|
||||||
not std::is_same<boolean_t, T>::value and
|
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>
|
template<typename T>
|
||||||
inline operator T() const
|
inline operator T() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -1034,23 +1034,26 @@ TEST_CASE("other constructors and destructor")
|
||||||
|
|
||||||
TEST_CASE("object inspection")
|
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"} };
|
json j {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"} };
|
||||||
|
|
||||||
SECTION("no indent")
|
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")
|
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")
|
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")
|
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