Fix comparisons operators with const JsonDocument&

This commit is contained in:
Benoit Blanchon
2022-04-05 10:12:17 +02:00
parent bf5d0c790c
commit 8d9504239b
3 changed files with 30 additions and 3 deletions

View File

@ -7,6 +7,7 @@ HEAD
* Add `ElementProxy::memoryUsage()` * Add `ElementProxy::memoryUsage()`
* Add `MemberProxy::memoryUsage()` (issue #1730) * Add `MemberProxy::memoryUsage()` (issue #1730)
* Add implicit conversion from `JsonDocument` to `JsonVariant` * Add implicit conversion from `JsonDocument` to `JsonVariant`
* Fix comparisons operators with `const JsonDocument&`
v6.19.3 (2022-03-08) v6.19.3 (2022-03-08)
------- -------

View File

@ -75,3 +75,29 @@ TEST_CASE("StaticJsonDocument::operator==(const DynamicJsonDocument&)") {
REQUIRE(doc1 != doc2); 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);
}
}

View File

@ -131,9 +131,9 @@ struct RawComparer : ComparerBase {
template <typename T> template <typename T>
struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type> struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type>
: ComparerBase { : 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) { CompareResult visitArray(const CollectionData &lhs) {
ArrayComparer comparer(lhs); ArrayComparer comparer(lhs);
@ -183,7 +183,7 @@ struct Comparer<T, typename enable_if<IsVisitable<T>::value>::type>
private: private:
template <typename TComparer> template <typename TComparer>
CompareResult accept(TComparer &comparer) { CompareResult accept(TComparer &comparer) {
CompareResult reversedResult = rhs.accept(comparer); CompareResult reversedResult = rhs->accept(comparer);
switch (reversedResult) { switch (reversedResult) {
case COMPARE_RESULT_GREATER: case COMPARE_RESULT_GREATER:
return COMPARE_RESULT_LESS; return COMPARE_RESULT_LESS;