mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Fixed incorrect string comparison on some platforms (fixes #1198)
This commit is contained in:
		| @@ -4,9 +4,11 @@ | ||||
|  | ||||
| #include "custom_string.hpp" | ||||
| #include "progmem_emulation.hpp" | ||||
| #include "weird_strcmp.hpp" | ||||
|  | ||||
| #include <ArduinoJson/Strings/ConstRamStringAdapter.hpp> | ||||
| #include <ArduinoJson/Strings/FlashStringAdapter.hpp> | ||||
| #include <ArduinoJson/Strings/SizedRamStringAdapter.hpp> | ||||
| #include <ArduinoJson/Strings/StlStringAdapter.hpp> | ||||
|  | ||||
| #include <catch.hpp> | ||||
| @@ -17,27 +19,55 @@ TEST_CASE("ConstRamStringAdapter") { | ||||
|   SECTION("null") { | ||||
|     ConstRamStringAdapter adapter(NULL); | ||||
|  | ||||
|     REQUIRE(adapter.compare("bravo") < 0); | ||||
|     REQUIRE(adapter.compare(NULL) == 0); | ||||
|     CHECK(adapter.compare("bravo") < 0); | ||||
|     CHECK(adapter.compare(NULL) == 0); | ||||
|  | ||||
|     REQUIRE(adapter.equals(NULL)); | ||||
|     REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|     CHECK(adapter.equals(NULL)); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     REQUIRE(adapter.size() == 0); | ||||
|     CHECK(adapter.size() == 0); | ||||
|   } | ||||
|  | ||||
|   SECTION("non-null") { | ||||
|     ConstRamStringAdapter adapter("bravo"); | ||||
|  | ||||
|     REQUIRE(adapter.compare(NULL) > 0); | ||||
|     REQUIRE(adapter.compare("alpha") > 0); | ||||
|     REQUIRE(adapter.compare("bravo") == 0); | ||||
|     REQUIRE(adapter.compare("charlie") < 0); | ||||
|     CHECK(adapter.compare(NULL) > 0); | ||||
|     CHECK(adapter.compare("alpha") > 0); | ||||
|     CHECK(adapter.compare("bravo") == 0); | ||||
|     CHECK(adapter.compare("charlie") < 0); | ||||
|  | ||||
|     REQUIRE(adapter.equals("bravo")); | ||||
|     REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|     CHECK(adapter.equals("bravo")); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     REQUIRE(adapter.size() == 5); | ||||
|     CHECK(adapter.size() == 5); | ||||
|   } | ||||
| } | ||||
|  | ||||
| TEST_CASE("SizedRamStringAdapter") { | ||||
|   SECTION("null") { | ||||
|     SizedRamStringAdapter adapter(NULL, 10); | ||||
|  | ||||
|     CHECK(adapter.compare("bravo") < 0); | ||||
|     CHECK(adapter.compare(NULL) == 0); | ||||
|  | ||||
|     CHECK(adapter.equals(NULL)); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     CHECK(adapter.size() == 10); | ||||
|   } | ||||
|  | ||||
|   SECTION("non-null") { | ||||
|     SizedRamStringAdapter adapter("bravo", 5); | ||||
|  | ||||
|     CHECK(adapter.compare(NULL) > 0); | ||||
|     CHECK(adapter.compare("alpha") > 0); | ||||
|     CHECK(adapter.compare("bravo") == 0); | ||||
|     CHECK(adapter.compare("charlie") < 0); | ||||
|  | ||||
|     CHECK(adapter.equals("bravo")); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     CHECK(adapter.size() == 5); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -45,27 +75,27 @@ TEST_CASE("FlashStringAdapter") { | ||||
|   SECTION("null") { | ||||
|     FlashStringAdapter adapter(NULL); | ||||
|  | ||||
|     REQUIRE(adapter.compare("bravo") < 0); | ||||
|     REQUIRE(adapter.compare(NULL) == 0); | ||||
|     CHECK(adapter.compare("bravo") < 0); | ||||
|     CHECK(adapter.compare(NULL) == 0); | ||||
|  | ||||
|     REQUIRE(adapter.equals(NULL)); | ||||
|     REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|     CHECK(adapter.equals(NULL)); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     REQUIRE(adapter.size() == 0); | ||||
|     CHECK(adapter.size() == 0); | ||||
|   } | ||||
|  | ||||
|   SECTION("non-null") { | ||||
|     FlashStringAdapter adapter = adaptString(F("bravo")); | ||||
|  | ||||
|     REQUIRE(adapter.compare(NULL) > 0); | ||||
|     REQUIRE(adapter.compare("alpha") > 0); | ||||
|     REQUIRE(adapter.compare("bravo") == 0); | ||||
|     REQUIRE(adapter.compare("charlie") < 0); | ||||
|     CHECK(adapter.compare(NULL) > 0); | ||||
|     CHECK(adapter.compare("alpha") > 0); | ||||
|     CHECK(adapter.compare("bravo") == 0); | ||||
|     CHECK(adapter.compare("charlie") < 0); | ||||
|  | ||||
|     REQUIRE(adapter.equals("bravo")); | ||||
|     REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|     CHECK(adapter.equals("bravo")); | ||||
|     CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|     REQUIRE(adapter.size() == 5); | ||||
|     CHECK(adapter.size() == 5); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @@ -73,46 +103,46 @@ TEST_CASE("std::string") { | ||||
|   std::string str("bravo"); | ||||
|   StlStringAdapter<std::string> adapter = adaptString(str); | ||||
|  | ||||
|   REQUIRE(adapter.compare(NULL) > 0); | ||||
|   REQUIRE(adapter.compare("alpha") > 0); | ||||
|   REQUIRE(adapter.compare("bravo") == 0); | ||||
|   REQUIRE(adapter.compare("charlie") < 0); | ||||
|   CHECK(adapter.compare(NULL) > 0); | ||||
|   CHECK(adapter.compare("alpha") > 0); | ||||
|   CHECK(adapter.compare("bravo") == 0); | ||||
|   CHECK(adapter.compare("charlie") < 0); | ||||
|  | ||||
|   REQUIRE(adapter.equals("bravo")); | ||||
|   REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|   CHECK(adapter.equals("bravo")); | ||||
|   CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|   REQUIRE(adapter.size() == 5); | ||||
|   CHECK(adapter.size() == 5); | ||||
| } | ||||
|  | ||||
| TEST_CASE("custom_string") { | ||||
|   custom_string str("bravo"); | ||||
|   StlStringAdapter<custom_string> adapter = adaptString(str); | ||||
|  | ||||
|   REQUIRE(adapter.compare(NULL) > 0); | ||||
|   REQUIRE(adapter.compare("alpha") > 0); | ||||
|   REQUIRE(adapter.compare("bravo") == 0); | ||||
|   REQUIRE(adapter.compare("charlie") < 0); | ||||
|   CHECK(adapter.compare(NULL) > 0); | ||||
|   CHECK(adapter.compare("alpha") > 0); | ||||
|   CHECK(adapter.compare("bravo") == 0); | ||||
|   CHECK(adapter.compare("charlie") < 0); | ||||
|  | ||||
|   REQUIRE(adapter.equals("bravo")); | ||||
|   REQUIRE_FALSE(adapter.equals("charlie")); | ||||
|   CHECK(adapter.equals("bravo")); | ||||
|   CHECK_FALSE(adapter.equals("charlie")); | ||||
|  | ||||
|   REQUIRE(adapter.size() == 5); | ||||
|   CHECK(adapter.size() == 5); | ||||
| } | ||||
|  | ||||
| TEST_CASE("IsString<T>") { | ||||
|   SECTION("std::string") { | ||||
|     REQUIRE(IsString<std::string>::value == true); | ||||
|     CHECK(IsString<std::string>::value == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("basic_string<wchar_t>") { | ||||
|     REQUIRE(IsString<std::basic_string<wchar_t> >::value == false); | ||||
|     CHECK(IsString<std::basic_string<wchar_t> >::value == false); | ||||
|   } | ||||
|  | ||||
|   SECTION("custom_string") { | ||||
|     REQUIRE(IsString<custom_string>::value == true); | ||||
|     CHECK(IsString<custom_string>::value == true); | ||||
|   } | ||||
|  | ||||
|   SECTION("const __FlashStringHelper*") { | ||||
|     REQUIRE(IsString<const __FlashStringHelper*>::value == true); | ||||
|     CHECK(IsString<const __FlashStringHelper*>::value == true); | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user