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…
	
	Add table
		Add a link
		
	
		Reference in a new issue