as.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2023
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <stdint.h>
  6. #include <catch.hpp>
  7. static const char* null = 0;
  8. TEST_CASE("JsonVariant::as()") {
  9. SECTION("DoubleAsBool") {
  10. JsonVariant variant = 4.2;
  11. REQUIRE(variant.as<bool>());
  12. }
  13. SECTION("DoubleAsCstr") {
  14. JsonVariant variant = 4.2;
  15. REQUIRE_FALSE(variant.as<const char*>());
  16. }
  17. SECTION("DoubleAsString") {
  18. JsonVariant variant = 4.2;
  19. REQUIRE(std::string("4.2") == variant.as<std::string>());
  20. }
  21. SECTION("DoubleAsLong") {
  22. JsonVariant variant = 4.2;
  23. REQUIRE(4L == variant.as<long>());
  24. }
  25. SECTION("DoubleAsUnsigned") {
  26. JsonVariant variant = 4.2;
  27. REQUIRE(4U == variant.as<unsigned>());
  28. }
  29. SECTION("DoubleZeroAsBool") {
  30. JsonVariant variant = 0.0;
  31. REQUIRE_FALSE(variant.as<bool>());
  32. }
  33. SECTION("DoubleZeroAsLong") {
  34. JsonVariant variant = 0.0;
  35. REQUIRE(0L == variant.as<long>());
  36. }
  37. SECTION("FalseAsBool") {
  38. JsonVariant variant = false;
  39. REQUIRE_FALSE(variant.as<bool>());
  40. }
  41. SECTION("FalseAsDouble") {
  42. JsonVariant variant = false;
  43. REQUIRE(0.0 == variant.as<double>());
  44. }
  45. SECTION("FalseAsLong") {
  46. JsonVariant variant = false;
  47. REQUIRE(0L == variant.as<long>());
  48. }
  49. SECTION("FalseAsString") {
  50. JsonVariant variant = false;
  51. REQUIRE(std::string("false") == variant.as<std::string>());
  52. }
  53. SECTION("TrueAsBool") {
  54. JsonVariant variant = true;
  55. REQUIRE(variant.as<bool>());
  56. }
  57. SECTION("TrueAsDouble") {
  58. JsonVariant variant = true;
  59. REQUIRE(1.0 == variant.as<double>());
  60. }
  61. SECTION("TrueAsLong") {
  62. JsonVariant variant = true;
  63. REQUIRE(1L == variant.as<long>());
  64. }
  65. SECTION("TrueAsString") {
  66. JsonVariant variant = true;
  67. REQUIRE(std::string("true") == variant.as<std::string>());
  68. }
  69. SECTION("LongAsBool") {
  70. JsonVariant variant = 42L;
  71. REQUIRE(variant.as<bool>());
  72. }
  73. SECTION("LongZeroAsBool") {
  74. JsonVariant variant = 0L;
  75. REQUIRE_FALSE(variant.as<bool>());
  76. }
  77. SECTION("PositiveLongAsDouble") {
  78. JsonVariant variant = 42L;
  79. REQUIRE(42.0 == variant.as<double>());
  80. }
  81. SECTION("NegativeLongAsDouble") {
  82. JsonVariant variant = -42L;
  83. REQUIRE(-42.0 == variant.as<double>());
  84. }
  85. SECTION("LongAsString") {
  86. JsonVariant variant = 42L;
  87. REQUIRE(std::string("42") == variant.as<std::string>());
  88. }
  89. SECTION("LongZeroAsDouble") {
  90. JsonVariant variant = 0L;
  91. REQUIRE(0.0 == variant.as<double>());
  92. }
  93. SECTION("NullAsBool") {
  94. JsonVariant variant = null;
  95. REQUIRE_FALSE(variant.as<bool>());
  96. }
  97. SECTION("NullAsDouble") {
  98. JsonVariant variant = null;
  99. REQUIRE(0.0 == variant.as<double>());
  100. }
  101. SECTION("NullAsLong") {
  102. JsonVariant variant = null;
  103. REQUIRE(0L == variant.as<long>());
  104. }
  105. SECTION("NullAsString") {
  106. JsonVariant variant = null;
  107. REQUIRE(std::string("null") == variant.as<std::string>());
  108. }
  109. SECTION("NumberStringAsBool") {
  110. JsonVariant variant = "42";
  111. REQUIRE(variant.as<bool>());
  112. }
  113. SECTION("NumberStringAsLong") {
  114. JsonVariant variant = "42";
  115. REQUIRE(42L == variant.as<long>());
  116. }
  117. #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64
  118. SECTION("NumberStringAsInt64Negative") {
  119. JsonVariant variant = "-9223372036854775808";
  120. REQUIRE(-9223372036854775807 - 1 == variant.as<long long>());
  121. }
  122. SECTION("NumberStringAsInt64Positive") {
  123. JsonVariant variant = "9223372036854775807";
  124. REQUIRE(9223372036854775807 == variant.as<long long>());
  125. }
  126. #endif
  127. SECTION("RandomStringAsBool") {
  128. JsonVariant variant = "hello";
  129. REQUIRE_FALSE(variant.as<bool>());
  130. }
  131. SECTION("RandomStringAsLong") {
  132. JsonVariant variant = "hello";
  133. REQUIRE(0L == variant.as<long>());
  134. }
  135. SECTION("RandomStringAsConstCharPtr") {
  136. JsonVariant variant = "hello";
  137. REQUIRE(std::string("hello") == variant.as<const char*>());
  138. }
  139. SECTION("RandomStringAsCharPtr") {
  140. JsonVariant variant = "hello";
  141. REQUIRE(std::string("hello") == variant.as<char*>());
  142. }
  143. SECTION("RandomStringAsString") {
  144. JsonVariant variant = "hello";
  145. REQUIRE(std::string("hello") == variant.as<std::string>());
  146. }
  147. SECTION("TrueStringAsBool") {
  148. JsonVariant variant = "true";
  149. REQUIRE(variant.as<bool>());
  150. }
  151. SECTION("TrueStringAsLong") {
  152. JsonVariant variant = "true";
  153. REQUIRE(1L == variant.as<long>());
  154. }
  155. SECTION("ObjectAsString") {
  156. DynamicJsonBuffer buffer;
  157. JsonObject& obj = buffer.createObject();
  158. obj["key"] = "value";
  159. JsonVariant variant = obj;
  160. REQUIRE(std::string("{\"key\":\"value\"}") == variant.as<std::string>());
  161. }
  162. SECTION("ArrayAsString") {
  163. DynamicJsonBuffer buffer;
  164. JsonArray& arr = buffer.createArray();
  165. arr.add(4);
  166. arr.add(2);
  167. JsonVariant variant = arr;
  168. REQUIRE(std::string("[4,2]") == variant.as<std::string>());
  169. }
  170. SECTION("ArrayAsJsonArray") {
  171. DynamicJsonBuffer buffer;
  172. JsonArray& arr = buffer.createArray();
  173. JsonVariant variant = arr;
  174. REQUIRE(&arr == &variant.as<JsonArray&>());
  175. REQUIRE(&arr == &variant.as<JsonArray>()); // <- shorthand
  176. }
  177. SECTION("ObjectAsJsonObject") {
  178. DynamicJsonBuffer buffer;
  179. JsonObject& arr = buffer.createObject();
  180. JsonVariant variant = arr;
  181. REQUIRE(&arr == &variant.as<JsonObject&>());
  182. REQUIRE(&arr == &variant.as<JsonObject>()); // <- shorthand
  183. }
  184. }