// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #include #include #include TEST_CASE("JsonArray::operator[]") { DynamicJsonDocument doc; JsonArray _array = doc.to(); _array.add(0); SECTION("int") { _array[0] = 123; REQUIRE(123 == _array[0].as()); REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64 SECTION("long long") { _array[0] = 9223372036854775807; REQUIRE(9223372036854775807 == _array[0].as()); REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } #endif SECTION("double") { _array[0] = 123.45; REQUIRE(123.45 == _array[0].as()); REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } SECTION("bool") { _array[0] = true; REQUIRE(true == _array[0].as()); REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } SECTION("const char*") { const char* str = "hello"; _array[0] = str; REQUIRE(str == _array[0].as()); REQUIRE(str == _array[0].as()); // <- short hand REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } SECTION("nested array") { DynamicJsonDocument doc2; JsonArray arr = doc2.to(); _array[0] = arr; REQUIRE(arr == _array[0].as()); REQUIRE(arr == _array[0].as()); // <- short hand // REQUIRE(arr == _array[0].as()); // REQUIRE(arr == _array[0].as()); // <- short hand REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } SECTION("nested object") { DynamicJsonDocument doc2; JsonObject obj = doc2.to(); _array[0] = obj; REQUIRE(obj == _array[0].as()); REQUIRE(obj == _array[0].as()); // <- short hand REQUIRE(true == _array[0].is()); REQUIRE(false == _array[0].is()); } SECTION("array subscript") { DynamicJsonDocument doc2; JsonArray arr = doc2.to(); const char* str = "hello"; arr.add(str); _array[0] = arr[0]; REQUIRE(str == _array[0]); } SECTION("object subscript") { const char* str = "hello"; DynamicJsonDocument doc2; JsonObject obj = doc2.to(); obj["x"] = str; _array[0] = obj["x"]; REQUIRE(str == _array[0]); } SECTION("should not duplicate const char*") { _array[0] = "world"; const size_t expectedSize = JSON_ARRAY_SIZE(1); REQUIRE(expectedSize == doc.memoryUsage()); } SECTION("should duplicate char*") { _array[0] = const_cast("world"); const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6; REQUIRE(expectedSize == doc.memoryUsage()); } SECTION("should duplicate std::string") { _array[0] = std::string("world"); const size_t expectedSize = JSON_ARRAY_SIZE(1) + 6; REQUIRE(expectedSize == doc.memoryUsage()); } }