// ArduinoJson - https://arduinojson.org // Copyright © 2014-2022, Benoit BLANCHON // MIT License #include #include static void eraseString(std::string& str) { char* p = const_cast(str.c_str()); while (*p) *p++ = '*'; } TEST_CASE("std::string") { DynamicJsonDocument doc(4096); SECTION("operator[]") { char json[] = "{\"key\":\"value\"}"; deserializeJson(doc, json); JsonObject obj = doc.as(); REQUIRE(std::string("value") == obj[std::string("key")]); } SECTION("operator[] const") { char json[] = "{\"key\":\"value\"}"; deserializeJson(doc, json); JsonObject obj = doc.as(); REQUIRE(std::string("value") == obj[std::string("key")]); } SECTION("createNestedObject()") { JsonObject obj = doc.to(); std::string key = "key"; char json[64]; obj.createNestedObject(key); eraseString(key); serializeJson(doc, json, sizeof(json)); REQUIRE(std::string("{\"key\":{}}") == json); } SECTION("createNestedArray()") { JsonObject obj = doc.to(); std::string key = "key"; char json[64]; obj.createNestedArray(key); eraseString(key); serializeJson(doc, json, sizeof(json)); REQUIRE(std::string("{\"key\":[]}") == json); } SECTION("containsKey()") { char json[] = "{\"key\":\"value\"}"; deserializeJson(doc, json); JsonObject obj = doc.as(); REQUIRE(true == obj.containsKey(std::string("key"))); } SECTION("remove()") { JsonObject obj = doc.to(); obj["key"] = "value"; obj.remove(std::string("key")); REQUIRE(0 == obj.size()); } SECTION("operator[], set key") { std::string key("hello"); JsonObject obj = doc.to(); obj[key] = "world"; eraseString(key); REQUIRE(std::string("world") == obj["hello"]); } SECTION("operator[], set value") { std::string value("world"); JsonObject obj = doc.to(); obj["hello"] = value; eraseString(value); REQUIRE(std::string("world") == obj["hello"]); } SECTION("memoryUsage() increases when adding a new key") { std::string key1("hello"), key2("world"); JsonObject obj = doc.to(); obj[key1] = 1; size_t sizeBefore = doc.memoryUsage(); obj[key2] = 2; size_t sizeAfter = doc.memoryUsage(); REQUIRE(sizeAfter - sizeBefore >= key2.size()); } SECTION("memoryUsage() remains when adding the same key") { std::string key("hello"); JsonObject obj = doc.to(); obj[key] = 1; size_t sizeBefore = doc.memoryUsage(); obj[key] = 2; size_t sizeAfter = doc.memoryUsage(); REQUIRE(sizeBefore == sizeAfter); } }