Просмотр исходного кода

Test that string can be stored in JsonObject

Benoit Blanchon 11 лет назад
Родитель
Сommit
a9a51ec1e2
4 измененных файлов с 27 добавлено и 1 удалено
  1. 1 0
      srcs/JsonNode.h
  2. 15 0
      srcs/JsonValue.cpp
  3. 2 0
      srcs/JsonValue.h
  4. 9 1
      tests/JsonObjectTests.cpp

+ 1 - 0
srcs/JsonNode.h

@@ -26,6 +26,7 @@ struct JsonNode
         bool asBoolean;
         double asDouble;
         int asInteger;
+        const char* asString;
 
         struct 
         {

+ 15 - 0
srcs/JsonValue.cpp

@@ -10,6 +10,14 @@ void JsonValue::operator=(bool value)
     _node->content.asBoolean = value;
 }
 
+void JsonValue::operator=(char const* value)
+{
+    if (!_node) return;
+
+    _node->type = JSON_STRING;
+    _node->content.asString = value;
+}
+
 void JsonValue::operator=(double value)
 {
     if (!_node) return;
@@ -33,6 +41,13 @@ JsonValue::operator bool()
     return _node->content.asBoolean;
 }
 
+JsonValue::operator char const*()
+{
+    if (!_node || _node->type != JSON_STRING) return 0;
+
+    return _node->content.asString;
+}
+
 JsonValue::operator double()
 {
     if (!_node || _node->type < JSON_DOUBLE_0_DECIMALS) return 0;

+ 2 - 0
srcs/JsonValue.h

@@ -14,10 +14,12 @@ public:
     }
 
     void operator=(bool);
+    void operator=(const char*);
     void operator=(double);
     void operator=(int);
 
     operator bool();
+    operator const char*();
     operator double();
     operator int();
 

+ 9 - 1
tests/JsonObjectTests.cpp

@@ -50,7 +50,6 @@ TEST_F(JsonObjectTests, CanStoreDoubles)
     EXPECT_EQ(456.78, (double) object["world"]);
 }
 
-
 TEST_F(JsonObjectTests, CanStoreBooleans)
 {
     object["hello"] = true;
@@ -58,4 +57,13 @@ TEST_F(JsonObjectTests, CanStoreBooleans)
 
     EXPECT_TRUE((bool) object["hello"]);
     EXPECT_FALSE((bool) object["world"]);
+}
+
+TEST_F(JsonObjectTests, CanStoreStrings)
+{
+    object["hello"] = "h3110";
+    object["world"] = "w0r1d";
+
+    EXPECT_STREQ("h3110", (const char*) object["hello"]);
+    EXPECT_STREQ("w0r1d", (const char*) object["world"]);
 }