Benoit Blanchon 5 лет назад
Родитель
Сommit
6841b80466

+ 1 - 0
CHANGELOG.md

@@ -6,6 +6,7 @@ HEAD
 
 * Added comparisons (`>`, `>=`, `==`, `!=`, `<`, and `<=`) between `JsonVariant`s
 * Added string deduplication (issue #1303)
+* Added `JsonString::operator!=`
 * Set `ARDUINOJSON_DECODE_UNICODE` to `1` by default
 * Fixed `copyArray()` not working with `String`, `ElementProxy`, and `MemberProxy`
 * Fixed error `getOrAddElement is not a member of ElementProxy` (issue #1311)

+ 2 - 1
extras/tests/Misc/CMakeLists.txt

@@ -6,13 +6,14 @@ add_executable(MiscTests
 	arithmeticCompare.cpp
 	conflicts.cpp
 	FloatParts.cpp
+	JsonString.cpp
 	Readers.cpp
 	StringAdapters.cpp
 	StringWriter.cpp
 	TypeTraits.cpp
 	unsigned_char.cpp
-	Utf8.cpp
 	Utf16.cpp
+	Utf8.cpp
 	version.cpp
 )
 

+ 60 - 0
extras/tests/Misc/JsonString.cpp

@@ -0,0 +1,60 @@
+// ArduinoJson - arduinojson.org
+// Copyright Benoit Blanchon 2014-2020
+// MIT License
+
+#include <ArduinoJson.h>
+#include <catch.hpp>
+
+TEST_CASE("JsonString") {
+  SECTION("Default constructor creates a null JsonString") {
+    JsonString s;
+
+    CHECK(s.isNull() == true);
+    CHECK(s.c_str() == 0);
+    CHECK(s.isStatic() == true);
+  }
+
+  SECTION("Compare null with null") {
+    JsonString a, b;
+
+    CHECK(a == b);
+    CHECK_FALSE(a != b);
+  }
+
+  SECTION("Compare null with non-null") {
+    JsonString a(0), b("hello");
+
+    CHECK_FALSE(a == b);
+    CHECK(a != b);
+  }
+
+  SECTION("Compare non-null with null") {
+    JsonString a("hello"), b(0);
+
+    CHECK_FALSE(a == b);
+    CHECK(a != b);
+  }
+
+  SECTION("Compare different strings") {
+    JsonString a("hello"), b("world");
+
+    CHECK_FALSE(a == b);
+    CHECK(a != b);
+  }
+
+  SECTION("Compare identical by pointer") {
+    JsonString a("hello"), b("hello");
+
+    CHECK(a == b);
+    CHECK_FALSE(a != b);
+  }
+
+  SECTION("Compare identical by value") {
+    char s1[] = "hello";
+    char s2[] = "hello";
+    JsonString a(s1), b(s2);
+
+    CHECK(a == b);
+    CHECK_FALSE(a != b);
+  }
+}

+ 10 - 0
src/ArduinoJson/Strings/String.hpp

@@ -38,6 +38,16 @@ class String {
     return strcmp(lhs._data, rhs._data) == 0;
   }
 
+  friend bool operator!=(String lhs, String rhs) {
+    if (lhs._data == rhs._data)
+      return false;
+    if (!lhs._data)
+      return true;
+    if (!rhs._data)
+      return true;
+    return strcmp(lhs._data, rhs._data) != 0;
+  }
+
  private:
   const char* _data;
   bool _isStatic;