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

Generator: added a test of a float in an array

Benoît Blanchon 11 лет назад
Родитель
Сommit
22ca52326c
2 измененных файлов с 64 добавлено и 12 удалено
  1. 57 12
      JsonGeneratorTests/JsonArray.h
  2. 7 0
      JsonGeneratorTests/JsonArrayTests.cpp

+ 57 - 12
JsonGeneratorTests/JsonArray.h

@@ -5,48 +5,93 @@
 
 #pragma once
 
+#include <stdarg.h>
+
+enum JsonObjectType
+{
+    JSON_STRING,
+    JSON_NUMBER,
+};
+
+union JsonObjectValue
+{
+    const char* string;
+    double number;
+};
+
+struct JsonObject
+{
+    JsonObjectType type;
+    JsonObjectValue value;
+};
+
 template<int N>
 class JsonArray
 {
+    
+
 public:
     JsonArray()
     {
         itemCount = 0;
     }
     
-    void add(const char* data)
+    void add(const char* value)
     {
-        if (itemCount < N)
-            items[itemCount++] = data;
+        if (itemCount >= N) return;
+
+        items[itemCount].type = JSON_STRING;
+        items[itemCount].value.string = value;
+        itemCount++;
+    }
+
+    void add(double value)
+    {
+        if (itemCount >= N) return;
+        
+        items[itemCount].type = JSON_NUMBER;
+        items[itemCount].value.number = value;
+        itemCount++;
     }
 
     void writeTo(char* buffer, size_t bufferSize)
     {
         buffer[0] = 0;
 
-        append("[", buffer, bufferSize);
+        append(buffer, bufferSize, "[");
 
         for (int i = 0; i < itemCount; i++)
         {
             if (i>0)
-                append(",", buffer, bufferSize);
+                append(buffer, bufferSize, ",");
 
-            append("'", buffer, bufferSize);
-            append(items[i], buffer, bufferSize);           
-            append("'", buffer, bufferSize);
+            switch (items[i].type)
+            {
+            case JSON_STRING:
+                append(buffer, bufferSize, "'%s'", items[i].value.string);
+                break;
+
+            case JSON_NUMBER:
+                append(buffer, bufferSize, "%lg", items[i].value.number);
+                break;
+            }
         }
 
-        append("]", buffer, bufferSize);       
+        append(buffer, bufferSize, "]");
     }
 
 private:
-    const char* items[N];
+    JsonObject items[N];
     int itemCount;
 
-    void append(const char* source, char* dest, size_t destSize)
+    void append(char* dest, size_t destSize, const char* format, ...)
     {
         int len = strlen(dest);
-        strncpy(dest + len, source, destSize - len);
+
+        va_list args;
+        va_start(args, format);
+        vsnprintf(dest + len, destSize - len, format, args);
+        va_end(args);
     }
 };
 

+ 7 - 0
JsonGeneratorTests/JsonArrayTests.cpp

@@ -40,6 +40,13 @@ namespace JsonGeneratorTests
             AssertJsonIs("['hello','world']");
         }
 
+        TEST_METHOD(OneNumber)
+        {
+            arr.add(3.14);
+
+            AssertJsonIs("[3.14]");
+        }
+
         void AssertJsonIs(const char* expected)
         {      
             char buffer[256];