forked from bblanchon/ArduinoJson
Fixed comparison of JsonVariant
with mixed strings (closes #1051)
This commit is contained in:
@ -5,6 +5,7 @@ HEAD
|
|||||||
----
|
----
|
||||||
|
|
||||||
* Added operators `==` and `!=` for `JsonDocument`, `ElementProxy`, and `MemberProxy`
|
* Added operators `==` and `!=` for `JsonDocument`, `ElementProxy`, and `MemberProxy`
|
||||||
|
* Fixed comparison of `JsonVariant` when one contains a linked string and the other contains an owned string (issue #1051)
|
||||||
|
|
||||||
v6.11.2 (2019-07-08)
|
v6.11.2 (2019-07-08)
|
||||||
-------
|
-------
|
||||||
|
@ -16,15 +16,18 @@ namespace ARDUINOJSON_NAMESPACE {
|
|||||||
enum {
|
enum {
|
||||||
VALUE_MASK = 0x7F,
|
VALUE_MASK = 0x7F,
|
||||||
|
|
||||||
|
OWNERSHIP_BIT = 0x01,
|
||||||
VALUE_IS_NULL = 0,
|
VALUE_IS_NULL = 0,
|
||||||
VALUE_IS_LINKED_RAW = 0x01,
|
VALUE_IS_LINKED_RAW = 0x02,
|
||||||
VALUE_IS_OWNED_RAW = 0x02,
|
VALUE_IS_OWNED_RAW = 0x03,
|
||||||
VALUE_IS_LINKED_STRING = 0x03,
|
VALUE_IS_LINKED_STRING = 0x04,
|
||||||
VALUE_IS_OWNED_STRING = 0x04,
|
VALUE_IS_OWNED_STRING = 0x05,
|
||||||
VALUE_IS_BOOLEAN = 0x05,
|
|
||||||
VALUE_IS_POSITIVE_INTEGER = 0x06,
|
// CAUTION: no OWNERSHIP_BIT below
|
||||||
VALUE_IS_NEGATIVE_INTEGER = 0x07,
|
VALUE_IS_BOOLEAN = 0x06,
|
||||||
VALUE_IS_FLOAT = 0x08,
|
VALUE_IS_POSITIVE_INTEGER = 0x08,
|
||||||
|
VALUE_IS_NEGATIVE_INTEGER = 0x0A,
|
||||||
|
VALUE_IS_FLOAT = 0x0C,
|
||||||
|
|
||||||
COLLECTION_MASK = 0x60,
|
COLLECTION_MASK = 0x60,
|
||||||
VALUE_IS_OBJECT = 0x20,
|
VALUE_IS_OBJECT = 0x20,
|
||||||
|
@ -101,7 +101,9 @@ class VariantData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool equals(const VariantData &other) const {
|
bool equals(const VariantData &other) const {
|
||||||
if (type() != other.type()) return false;
|
// Check that variant have the same type, but ignore string ownership
|
||||||
|
if ((type() | OWNERSHIP_BIT) != (other.type() | OWNERSHIP_BIT))
|
||||||
|
return false;
|
||||||
|
|
||||||
switch (type()) {
|
switch (type()) {
|
||||||
case VALUE_IS_LINKED_STRING:
|
case VALUE_IS_LINKED_STRING:
|
||||||
|
@ -286,6 +286,17 @@ TEST_CASE("JsonVariant comparisons") {
|
|||||||
REQUIRE_FALSE(variant1 == variant3);
|
REQUIRE_FALSE(variant1 == variant3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("Variants containing mixed strings (issue #1051)") {
|
||||||
|
variant1.set("hello");
|
||||||
|
variant2.set(std::string("hello"));
|
||||||
|
|
||||||
|
REQUIRE(variant1 == variant2);
|
||||||
|
REQUIRE_FALSE(variant1 != variant2);
|
||||||
|
|
||||||
|
REQUIRE(variant2 == variant1);
|
||||||
|
REQUIRE_FALSE(variant2 != variant1);
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("Variants containing double") {
|
SECTION("Variants containing double") {
|
||||||
variant1.set(42.0);
|
variant1.set(42.0);
|
||||||
variant2.set(42.0);
|
variant2.set(42.0);
|
||||||
|
Reference in New Issue
Block a user