mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Inverted dependency between MemoryPool and string adapters.
Inserted a null after each raw string in the pool.
This commit is contained in:
		| @@ -102,13 +102,13 @@ TEST_CASE("JsonArray::add()") { | ||||
|  | ||||
|   SECTION("should duplicate char*") { | ||||
|     array.add(const_cast<char*>("world")); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate std::string") { | ||||
|     array.add(std::string("world")); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -119,13 +119,13 @@ TEST_CASE("JsonArray::operator[]") { | ||||
|  | ||||
|   SECTION("should duplicate char*") { | ||||
|     array[0] = const_cast<char*>("world"); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate std::string") { | ||||
|     array[0] = std::string("world"); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -56,7 +56,7 @@ TEST_CASE("deserialize JSON array with a StaticJsonDocument") { | ||||
|  | ||||
|     deserializeJson(doc, "  [ \"1234567\" ] "); | ||||
|  | ||||
|     REQUIRE(JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(8) == doc.memoryUsage()); | ||||
|     REQUIRE(JSON_ARRAY_SIZE(1) + JSON_STRING_SIZE(7) == doc.memoryUsage()); | ||||
|     // note: we use a string of 8 bytes to be sure that the StaticMemoryPool | ||||
|     // will not insert bytes to enforce alignement | ||||
|   } | ||||
|   | ||||
| @@ -94,8 +94,8 @@ TEST_CASE("BasicJsonDocument::shrinkToFit()") { | ||||
|   } | ||||
|  | ||||
|   SECTION("owned raw") { | ||||
|     doc.set(serialized(std::string("[{},123]"))); | ||||
|     testShrinkToFit(doc, "[{},123]", 8); | ||||
|     doc.set(serialized(std::string("[{},12]"))); | ||||
|     testShrinkToFit(doc, "[{},12]", 8); | ||||
|   } | ||||
|  | ||||
|   SECTION("linked key") { | ||||
|   | ||||
| @@ -107,43 +107,43 @@ TEST_CASE("JsonObject::operator[]") { | ||||
|  | ||||
|   SECTION("should duplicate char* value") { | ||||
|     obj["hello"] = const_cast<char*>("world"); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate char* key") { | ||||
|     obj[const_cast<char*>("hello")] = "world"; | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate char* key&value") { | ||||
|     obj[const_cast<char*>("hello")] = const_cast<char*>("world"); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + 2 * JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + 2 * JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize <= doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate std::string value") { | ||||
|     obj["hello"] = std::string("world"); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate std::string key") { | ||||
|     obj[std::string("hello")] = "world"; | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate std::string key&value") { | ||||
|     obj[std::string("hello")] = std::string("world"); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + 2 * JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + 2 * JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize <= doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   SECTION("should duplicate a non-static JsonString key") { | ||||
|     obj[JsonString("hello", false)] = "world"; | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(6); | ||||
|     const size_t expectedSize = JSON_OBJECT_SIZE(1) + JSON_STRING_SIZE(5); | ||||
|     REQUIRE(expectedSize == doc.memoryUsage()); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -47,20 +47,20 @@ TEST_CASE("JsonVariant::set(JsonVariant)") { | ||||
|     var1.set(str); | ||||
|     var2.set(var1); | ||||
|  | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|   } | ||||
|  | ||||
|   SECTION("stores std::string by copy") { | ||||
|     var1.set(std::string("hello!!")); | ||||
|     var2.set(var1); | ||||
|  | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|   } | ||||
|  | ||||
|   SECTION("stores Serialized<const char*> by reference") { | ||||
|     var1.set(serialized("hello!!", JSON_STRING_SIZE(8))); | ||||
|     var1.set(serialized("hello!!", 8)); | ||||
|     var2.set(var1); | ||||
|  | ||||
|     REQUIRE(doc1.memoryUsage() == 0); | ||||
| @@ -69,18 +69,18 @@ TEST_CASE("JsonVariant::set(JsonVariant)") { | ||||
|  | ||||
|   SECTION("stores Serialized<char*> by copy") { | ||||
|     char str[] = "hello!!"; | ||||
|     var1.set(serialized(str, 8)); | ||||
|     var1.set(serialized(str, 7)); | ||||
|     var2.set(var1); | ||||
|  | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|   } | ||||
|  | ||||
|   SECTION("stores Serialized<std::string> by copy") { | ||||
|     var1.set(serialized(std::string("hello!!!"))); | ||||
|     var1.set(serialized(std::string("hello!!"))); | ||||
|     var2.set(var1); | ||||
|  | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(8)); | ||||
|     REQUIRE(doc1.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|     REQUIRE(doc2.memoryUsage() == JSON_STRING_SIZE(7)); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -36,6 +36,6 @@ TEST_CASE("StringBuilder") { | ||||
|     str.append('h'); | ||||
|     str.complete(); | ||||
|  | ||||
|     REQUIRE(JSON_STRING_SIZE(2) == pool.size()); | ||||
|     REQUIRE(JSON_STRING_SIZE(1) == pool.size()); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -30,19 +30,19 @@ TEST_CASE("MemoryPool::size()") { | ||||
|   SECTION("Decreases after freezeString()") { | ||||
|     StringSlot a = pool.allocExpandableString(); | ||||
|     pool.freezeString(a, 1); | ||||
|     REQUIRE(pool.size() == JSON_STRING_SIZE(1)); | ||||
|     REQUIRE(pool.size() == 1); | ||||
|  | ||||
|     StringSlot b = pool.allocExpandableString(); | ||||
|     pool.freezeString(b, 1); | ||||
|     REQUIRE(pool.size() == 2 * JSON_STRING_SIZE(1)); | ||||
|     REQUIRE(pool.size() == 2); | ||||
|   } | ||||
|  | ||||
|   SECTION("Increases after allocFrozenString()") { | ||||
|     pool.allocFrozenString(0); | ||||
|     REQUIRE(pool.size() == JSON_STRING_SIZE(0)); | ||||
|     pool.allocFrozenString(1); | ||||
|     REQUIRE(pool.size() == 1); | ||||
|  | ||||
|     pool.allocFrozenString(0); | ||||
|     REQUIRE(pool.size() == 2 * JSON_STRING_SIZE(0)); | ||||
|     pool.allocFrozenString(2); | ||||
|     REQUIRE(pool.size() == 3); | ||||
|   } | ||||
|  | ||||
|   SECTION("Doesn't grow when memory pool is full") { | ||||
|   | ||||
| @@ -145,4 +145,12 @@ TEST_CASE("IsString<T>") { | ||||
|   SECTION("const __FlashStringHelper*") { | ||||
|     CHECK(IsString<const __FlashStringHelper*>::value == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("const char*") { | ||||
|     CHECK(IsString<const char*>::value == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("const char[]") { | ||||
|     CHECK(IsString<const char[8]>::value == true); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -7,9 +7,9 @@ | ||||
|  | ||||
| template <size_t Capacity> | ||||
| static void check(const char* input, DeserializationError expected) { | ||||
|   StaticJsonDocument<Capacity> variant; | ||||
|   StaticJsonDocument<Capacity> doc; | ||||
|  | ||||
|   DeserializationError error = deserializeMsgPack(variant, input); | ||||
|   DeserializationError error = deserializeMsgPack(doc, input); | ||||
|  | ||||
|   CAPTURE(input); | ||||
|   REQUIRE(error == expected); | ||||
| @@ -17,7 +17,7 @@ static void check(const char* input, DeserializationError expected) { | ||||
|  | ||||
| template <size_t Size> | ||||
| static void checkString(const char* input, DeserializationError expected) { | ||||
|   check<JSON_STRING_SIZE(Size)>(input, expected); | ||||
|   check<Size>(input, expected); | ||||
| } | ||||
|  | ||||
| TEST_CASE("deserializeMsgPack(StaticJsonDocument&)") { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user