is.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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_FALSE(var.is<bool>());
  68. REQUIRE_FALSE(var.is<int>());
  69. REQUIRE_FALSE(var.is<double>());
  70. REQUIRE_FALSE(var.is<float>());
  71. REQUIRE_FALSE(var.is<long>());
  72. REQUIRE_FALSE(var.is<JsonArray>());
  73. REQUIRE_FALSE(var.is<JsonObject>());
  74. }
  75. TEST_CASE("JsonVariant::is()") {
  76. SECTION("JsonArray") {
  77. DynamicJsonDocument doc;
  78. JsonArray array = doc.to<JsonArray>();
  79. checkIsArray(array);
  80. }
  81. SECTION("bool") {
  82. checkIsBool(true);
  83. checkIsBool(false);
  84. }
  85. SECTION("double") {
  86. checkIsFloat(4.2);
  87. }
  88. SECTION("int") {
  89. checkIsInteger(42);
  90. }
  91. SECTION("long") {
  92. checkIsInteger(42L);
  93. }
  94. SECTION("string") {
  95. checkIsString("42");
  96. }
  97. }