diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f1248cc..cd67e2f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ HEAD * Added fake class `InvalidConversion` to easily identify invalid conversions (issue #1585) * Added support for `std::string_view` (issue #1578, PR #1554 by @0xFEEDC0DE64) * Fixed warning `definition of implicit copy constructor for 'MsgPackDeserializer' is deprecated because it has a user-declared copy assignment operator` +* Added `JsonArray::clear()` (issue #1597) v6.18.0 (2021-05-05) ------- diff --git a/extras/tests/JsonArray/CMakeLists.txt b/extras/tests/JsonArray/CMakeLists.txt index 54a4de49..e0052a9a 100644 --- a/extras/tests/JsonArray/CMakeLists.txt +++ b/extras/tests/JsonArray/CMakeLists.txt @@ -4,6 +4,7 @@ add_executable(JsonArrayTests add.cpp + clear.cpp copyArray.cpp createNested.cpp equals.cpp diff --git a/extras/tests/JsonArray/clear.cpp b/extras/tests/JsonArray/clear.cpp new file mode 100644 index 00000000..568c6aa7 --- /dev/null +++ b/extras/tests/JsonArray/clear.cpp @@ -0,0 +1,25 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#include +#include + +TEST_CASE("JsonArray::clear()") { + SECTION("No-op on null JsonArray") { + JsonArray array; + array.clear(); + REQUIRE(array.isNull() == true); + REQUIRE(array.size() == 0); + } + + SECTION("Removes all elements") { + StaticJsonDocument<64> doc; + JsonArray array = doc.to(); + array.add(1); + array.add(2); + array.clear(); + REQUIRE(array.size() == 0); + REQUIRE(array.isNull() == false); + } +} diff --git a/extras/tests/JsonObject/CMakeLists.txt b/extras/tests/JsonObject/CMakeLists.txt index 73cf1e5f..6b8a9fdb 100644 --- a/extras/tests/JsonObject/CMakeLists.txt +++ b/extras/tests/JsonObject/CMakeLists.txt @@ -3,6 +3,7 @@ # MIT License add_executable(JsonObjectTests + clear.cpp containsKey.cpp copy.cpp createNestedArray.cpp diff --git a/extras/tests/JsonObject/clear.cpp b/extras/tests/JsonObject/clear.cpp new file mode 100644 index 00000000..c18bc5e2 --- /dev/null +++ b/extras/tests/JsonObject/clear.cpp @@ -0,0 +1,25 @@ +// ArduinoJson - https://arduinojson.org +// Copyright Benoit Blanchon 2014-2021 +// MIT License + +#include +#include + +TEST_CASE("JsonObject::clear()") { + SECTION("No-op on null JsonObject") { + JsonObject obj; + obj.clear(); + REQUIRE(obj.isNull() == true); + REQUIRE(obj.size() == 0); + } + + SECTION("Removes all elements") { + StaticJsonDocument<64> doc; + JsonObject obj = doc.to(); + obj["hello"] = 1; + obj["world"] = 2; + obj.clear(); + REQUIRE(obj.size() == 0); + REQUIRE(obj.isNull() == false); + } +} diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index 9a6f82d8..219a6b84 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -161,6 +161,12 @@ class ArrayRef : public ArrayRefBase, _data->removeElement(index); } + void clear() const { + if (!_data) + return; + _data->clear(); + } + private: MemoryPool* _pool; };