StringAdapters.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2021
  3. // MIT License
  4. #define ARDUINOJSON_ENABLE_PROGMEM 1
  5. #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
  6. #include "custom_string.hpp"
  7. #include "progmem_emulation.hpp"
  8. #include "weird_strcmp.hpp"
  9. #include <ArduinoJson/Strings/StringAdapters.hpp>
  10. #include <catch.hpp>
  11. using namespace ARDUINOJSON_NAMESPACE;
  12. TEST_CASE("const char*") {
  13. SECTION("null") {
  14. StringAdapter<const char*> adapter(NULL);
  15. CHECK(adapter.compare("bravo") < 0);
  16. CHECK(adapter.compare(NULL) == 0);
  17. CHECK(adapter.equals(NULL));
  18. CHECK_FALSE(adapter.equals("charlie"));
  19. CHECK(adapter.size() == 0);
  20. }
  21. SECTION("non-null") {
  22. StringAdapter<const char*> adapter("bravo");
  23. CHECK(adapter.compare(NULL) > 0);
  24. CHECK(adapter.compare("alpha") > 0);
  25. CHECK(adapter.compare("bravo") == 0);
  26. CHECK(adapter.compare("charlie") < 0);
  27. CHECK(adapter.equals("bravo"));
  28. CHECK_FALSE(adapter.equals("charlie"));
  29. CHECK(adapter.size() == 5);
  30. }
  31. }
  32. TEST_CASE("const char* + size") {
  33. SECTION("null") {
  34. StringAdapter<const char*, true> adapter(NULL, 10);
  35. CHECK(adapter.compare("bravo") < 0);
  36. CHECK(adapter.compare(NULL) == 0);
  37. CHECK(adapter.equals(NULL));
  38. CHECK_FALSE(adapter.equals("charlie"));
  39. CHECK(adapter.size() == 10);
  40. }
  41. SECTION("non-null") {
  42. StringAdapter<const char*, true> adapter("bravo", 5);
  43. CHECK(adapter.compare(NULL) > 0);
  44. CHECK(adapter.compare("alpha") > 0);
  45. CHECK(adapter.compare("bravo") == 0);
  46. CHECK(adapter.compare("charlie") < 0);
  47. CHECK(adapter.equals("bravo"));
  48. CHECK_FALSE(adapter.equals("charlie"));
  49. CHECK(adapter.size() == 5);
  50. }
  51. }
  52. TEST_CASE("const __FlashStringHelper*") {
  53. SECTION("null") {
  54. StringAdapter<const __FlashStringHelper*> adapter(NULL);
  55. CHECK(adapter.compare("bravo") < 0);
  56. CHECK(adapter.compare(NULL) == 0);
  57. CHECK(adapter.equals(NULL));
  58. CHECK_FALSE(adapter.equals("charlie"));
  59. CHECK(adapter.size() == 0);
  60. }
  61. SECTION("non-null") {
  62. StringAdapter<const __FlashStringHelper*> adapter = adaptString(F("bravo"));
  63. CHECK(adapter.compare(NULL) > 0);
  64. CHECK(adapter.compare("alpha") > 0);
  65. CHECK(adapter.compare("bravo") == 0);
  66. CHECK(adapter.compare("charlie") < 0);
  67. CHECK(adapter.equals("bravo"));
  68. CHECK_FALSE(adapter.equals("charlie"));
  69. CHECK(adapter.size() == 5);
  70. }
  71. }
  72. TEST_CASE("std::string") {
  73. std::string str("bravo");
  74. StringAdapter<std::string> adapter(str);
  75. CHECK(adapter.compare(NULL) > 0);
  76. CHECK(adapter.compare("alpha") > 0);
  77. CHECK(adapter.compare("bravo") == 0);
  78. CHECK(adapter.compare("charlie") < 0);
  79. CHECK(adapter.equals("bravo"));
  80. CHECK_FALSE(adapter.equals("charlie"));
  81. CHECK(adapter.size() == 5);
  82. }
  83. TEST_CASE("Arduino String") {
  84. ::String str("bravo");
  85. StringAdapter< ::String> adapter(str);
  86. CHECK(adapter.compare(NULL) > 0);
  87. CHECK(adapter.compare("alpha") > 0);
  88. CHECK(adapter.compare("bravo") == 0);
  89. CHECK(adapter.compare("charlie") < 0);
  90. CHECK(adapter.equals("bravo"));
  91. CHECK_FALSE(adapter.equals("charlie"));
  92. CHECK(adapter.size() == 5);
  93. }
  94. TEST_CASE("custom_string") {
  95. custom_string str("bravo");
  96. StringAdapter<custom_string> adapter(str);
  97. CHECK(adapter.compare(NULL) > 0);
  98. CHECK(adapter.compare("alpha") > 0);
  99. CHECK(adapter.compare("bravo") == 0);
  100. CHECK(adapter.compare("charlie") < 0);
  101. CHECK(adapter.equals("bravo"));
  102. CHECK_FALSE(adapter.equals("charlie"));
  103. CHECK(adapter.size() == 5);
  104. }
  105. TEST_CASE("IsString<T>") {
  106. SECTION("std::string") {
  107. CHECK(IsString<std::string>::value == true);
  108. }
  109. SECTION("basic_string<wchar_t>") {
  110. CHECK(IsString<std::basic_string<wchar_t> >::value == false);
  111. }
  112. SECTION("custom_string") {
  113. CHECK(IsString<custom_string>::value == true);
  114. }
  115. SECTION("const __FlashStringHelper*") {
  116. CHECK(IsString<const __FlashStringHelper*>::value == true);
  117. }
  118. SECTION("const char*") {
  119. CHECK(IsString<const char*>::value == true);
  120. }
  121. SECTION("const char[]") {
  122. CHECK(IsString<const char[8]>::value == true);
  123. }
  124. }