mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Generator: added a test of a float in an array
This commit is contained in:
		| @@ -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); | ||||
|     } | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -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]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user