From 572232614d697291fb4f39d9794ebcebcf23f795 Mon Sep 17 00:00:00 2001
From: Niels <niels.lohmann@gmail.com>
Date: Sun, 8 Feb 2015 16:37:21 +0100
Subject: [PATCH] more test cases

---
 test/unit.cpp | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/test/unit.cpp b/test/unit.cpp
index 3996611f..49a5473b 100644
--- a/test/unit.cpp
+++ b/test/unit.cpp
@@ -1326,4 +1326,97 @@ TEST_CASE("value conversion")
             CHECK(json(a) == j);
         }
     }
+
+    SECTION("get a string (explicit)")
+    {
+        json::string_t s_reference {"Hello world"};
+        json j(s_reference);
+        
+        SECTION("string_t")
+        {
+            json::string_t s = j.get<json::string_t>();
+            CHECK(json(s) == j);
+        }
+
+        SECTION("std::string")
+        {
+            std::string s = j.get<std::string>();
+            CHECK(json(s) == j);
+        }
+
+        SECTION("exception in case of a non-string type")
+        {
+            CHECK_THROWS_AS(json(json::value_t::null).get<json::string_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::object).get<json::string_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::array).get<json::string_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::boolean).get<json::string_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::number_integer).get<json::string_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::number_float).get<json::string_t>(), std::logic_error);
+        }
+    }
+
+    SECTION("get a string (implicit)")
+    {
+        json::string_t s_reference {"Hello world"};
+        json j(s_reference);
+        
+        SECTION("string_t")
+        {
+            json::string_t s = j;
+            CHECK(json(s) == j);
+        }
+
+        SECTION("std::string")
+        {
+            std::string s = j;
+            CHECK(json(s) == j);
+        }
+    }
+
+    SECTION("get a boolean (explicit)")
+    {
+        json::boolean_t b_reference {true};
+        json j(b_reference);
+        
+        SECTION("boolean_t")
+        {
+            json::boolean_t b = j.get<json::boolean_t>();
+            CHECK(json(b) == j);
+        }
+
+        SECTION("bool")
+        {
+            bool b = j.get<bool>();
+            CHECK(json(b) == j);
+        }
+
+        SECTION("exception in case of a non-string type")
+        {
+            CHECK_THROWS_AS(json(json::value_t::null).get<json::boolean_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::object).get<json::boolean_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::array).get<json::boolean_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::string).get<json::boolean_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::number_integer).get<json::boolean_t>(), std::logic_error);
+            CHECK_THROWS_AS(json(json::value_t::number_float).get<json::boolean_t>(), std::logic_error);
+        }
+    }
+
+    SECTION("get a boolean (implicit)")
+    {
+        json::boolean_t b_reference {true};
+        json j(b_reference);
+        
+        SECTION("boolean_t")
+        {
+            json::boolean_t b = j;
+            CHECK(json(b) == j);
+        }
+
+        SECTION("bool")
+        {
+            bool b = j;
+            CHECK(json(b) == j);
+        }
+    }
+
 }