diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e88d08a..0c44e4c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ HEAD * Add `ElementProxy::memoryUsage()` * Add `MemberProxy::memoryUsage()` (issue #1730) * Add implicit conversion from `JsonDocument` to `JsonVariant` +* Fix comparisons operators with `const JsonDocument&` v6.19.3 (2022-03-08) ------- diff --git a/extras/tests/JsonDocument/compare.cpp b/extras/tests/JsonDocument/compare.cpp index 24d27bc5..7e9b9500 100644 --- a/extras/tests/JsonDocument/compare.cpp +++ b/extras/tests/JsonDocument/compare.cpp @@ -75,3 +75,29 @@ TEST_CASE("StaticJsonDocument::operator==(const DynamicJsonDocument&)") { REQUIRE(doc1 != doc2); } } + +TEST_CASE("JsonDocument::operator==(const JsonDocument&)") { + StaticJsonDocument<256> doc1; + StaticJsonDocument<256> doc2; + const JsonDocument& ref1 = doc1; + const JsonDocument& ref2 = doc2; + + SECTION("Empty") { + REQUIRE(ref1 == ref2); + REQUIRE_FALSE(ref1 != ref2); + } + + SECTION("With same object") { + doc1["hello"] = "world"; + doc2["hello"] = "world"; + REQUIRE(ref1 == ref2); + REQUIRE_FALSE(ref1 != ref2); + } + + SECTION("With different object") { + doc1["hello"] = "world"; + doc2["world"] = "hello"; + REQUIRE_FALSE(ref1 == ref2); + REQUIRE(ref1 != ref2); + } +} diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index a71f3e0d..2f636156 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -131,9 +131,9 @@ struct RawComparer : ComparerBase { template struct Comparer::value>::type> : ComparerBase { - T rhs; + const T *rhs; // TODO: should be a VariantConstRef - explicit Comparer(T value) : rhs(value) {} + explicit Comparer(const T &value) : rhs(&value) {} CompareResult visitArray(const CollectionData &lhs) { ArrayComparer comparer(lhs); @@ -183,7 +183,7 @@ struct Comparer::value>::type> private: template CompareResult accept(TComparer &comparer) { - CompareResult reversedResult = rhs.accept(comparer); + CompareResult reversedResult = rhs->accept(comparer); switch (reversedResult) { case COMPARE_RESULT_GREATER: return COMPARE_RESULT_LESS;