as.cpp 5.4 KB

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