is.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. void checkIsArray(JsonArray value) {
  7. DynamicJsonDocument doc;
  8. JsonVariant var = doc.to<JsonVariant>();
  9. var.set(value);
  10. REQUIRE(var.is<JsonArray>());
  11. REQUIRE(var.is<JsonArray>());
  12. REQUIRE(var.is<const JsonArray>());
  13. REQUIRE(var.is<const JsonArray>());
  14. REQUIRE_FALSE(var.is<bool>());
  15. REQUIRE_FALSE(var.is<double>());
  16. REQUIRE_FALSE(var.is<float>());
  17. REQUIRE_FALSE(var.is<int>());
  18. REQUIRE_FALSE(var.is<long>());
  19. REQUIRE_FALSE(var.is<const char *>());
  20. REQUIRE_FALSE(var.is<JsonObject>());
  21. }
  22. void checkIsBool(bool value) {
  23. DynamicJsonDocument doc;
  24. JsonVariant var = doc.to<JsonVariant>();
  25. var.set(value);
  26. REQUIRE(var.is<bool>());
  27. REQUIRE_FALSE(var.is<double>());
  28. REQUIRE_FALSE(var.is<float>());
  29. REQUIRE_FALSE(var.is<int>());
  30. REQUIRE_FALSE(var.is<long>());
  31. REQUIRE_FALSE(var.is<const char *>());
  32. REQUIRE_FALSE(var.is<JsonArray>());
  33. REQUIRE_FALSE(var.is<JsonObject>());
  34. }
  35. void checkIsFloat(double value) {
  36. DynamicJsonDocument doc;
  37. JsonVariant var = doc.to<JsonVariant>();
  38. var.set(value);
  39. REQUIRE(var.is<double>());
  40. REQUIRE(var.is<float>());
  41. REQUIRE_FALSE(var.is<bool>());
  42. REQUIRE_FALSE(var.is<int>());
  43. REQUIRE_FALSE(var.is<long>());
  44. REQUIRE_FALSE(var.is<const char *>());
  45. REQUIRE_FALSE(var.is<JsonArray>());
  46. REQUIRE_FALSE(var.is<JsonObject>());
  47. }
  48. template <typename T>
  49. void checkIsInteger(T value) {
  50. DynamicJsonDocument doc;
  51. JsonVariant var = doc.to<JsonVariant>();
  52. var.set(value);
  53. REQUIRE(var.is<long>());
  54. REQUIRE(var.is<int>());
  55. REQUIRE(var.is<float>());
  56. REQUIRE(var.is<double>());
  57. REQUIRE_FALSE(var.is<bool>());
  58. REQUIRE_FALSE(var.is<const char *>());
  59. REQUIRE_FALSE(var.is<JsonArray>());
  60. REQUIRE_FALSE(var.is<JsonObject>());
  61. }
  62. void checkIsString(const char *value) {
  63. DynamicJsonDocument doc;
  64. JsonVariant var = doc.to<JsonVariant>();
  65. var.set(value);
  66. REQUIRE(var.is<const char *>());
  67. REQUIRE(var.is<std::string>());
  68. REQUIRE_FALSE(var.is<bool>());
  69. REQUIRE_FALSE(var.is<int>());
  70. REQUIRE_FALSE(var.is<double>());
  71. REQUIRE_FALSE(var.is<float>());
  72. REQUIRE_FALSE(var.is<long>());
  73. REQUIRE_FALSE(var.is<JsonArray>());
  74. REQUIRE_FALSE(var.is<JsonObject>());
  75. }
  76. TEST_CASE("JsonVariant::is()") {
  77. SECTION("JsonArray") {
  78. DynamicJsonDocument doc;
  79. JsonArray array = doc.to<JsonArray>();
  80. checkIsArray(array);
  81. }
  82. SECTION("bool") {
  83. checkIsBool(true);
  84. checkIsBool(false);
  85. }
  86. SECTION("double") {
  87. checkIsFloat(4.2);
  88. }
  89. SECTION("int") {
  90. checkIsInteger(42);
  91. }
  92. SECTION("long") {
  93. checkIsInteger(42L);
  94. }
  95. SECTION("string") {
  96. checkIsString("42");
  97. }
  98. }