DynamicJsonVariant.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. using namespace Catch::Matchers;
  7. TEST_CASE("deserializeJson(DynamicJsonVariant&)") {
  8. DynamicJsonVariant variant;
  9. SECTION("EmptyObject") {
  10. JsonError err = deserializeJson(variant, "{}");
  11. REQUIRE(err == JsonError::Ok);
  12. REQUIRE(variant.is<JsonObject>());
  13. }
  14. SECTION("EmptyArray") {
  15. JsonError err = deserializeJson(variant, "[]");
  16. REQUIRE(err == JsonError::Ok);
  17. REQUIRE(variant.is<JsonArray>());
  18. }
  19. SECTION("Integer") {
  20. JsonError err = deserializeJson(variant, "-42");
  21. REQUIRE(err == JsonError::Ok);
  22. REQUIRE(variant.is<int>());
  23. REQUIRE_FALSE(variant.is<bool>());
  24. REQUIRE(variant == -42);
  25. }
  26. SECTION("Double") {
  27. JsonError err = deserializeJson(variant, "-1.23e+4");
  28. REQUIRE(err == JsonError::Ok);
  29. REQUIRE_FALSE(variant.is<int>());
  30. REQUIRE(variant.is<double>());
  31. REQUIRE(variant.as<double>() == Approx(-1.23e+4));
  32. }
  33. SECTION("Double quoted string") {
  34. JsonError err = deserializeJson(variant, "\"hello world\"");
  35. REQUIRE(err == JsonError::Ok);
  36. REQUIRE(variant.is<char*>());
  37. REQUIRE_THAT(variant.as<char*>(), Equals("hello world"));
  38. }
  39. SECTION("Single quoted string") {
  40. JsonError err = deserializeJson(variant, "\'hello world\'");
  41. REQUIRE(err == JsonError::Ok);
  42. REQUIRE(variant.is<char*>());
  43. REQUIRE_THAT(variant.as<char*>(), Equals("hello world"));
  44. }
  45. SECTION("True") {
  46. JsonError err = deserializeJson(variant, "true");
  47. REQUIRE(err == JsonError::Ok);
  48. REQUIRE(variant.is<bool>());
  49. REQUIRE(variant == true);
  50. }
  51. SECTION("False") {
  52. JsonError err = deserializeJson(variant, "false");
  53. REQUIRE(err == JsonError::Ok);
  54. REQUIRE(variant.is<bool>());
  55. REQUIRE(variant == false);
  56. }
  57. SECTION("OpenBrace") {
  58. JsonError err = deserializeJson(variant, "{");
  59. REQUIRE(err != JsonError::Ok);
  60. }
  61. SECTION("Incomplete string") {
  62. JsonError err = deserializeJson(variant, "\"hello");
  63. REQUIRE(err == JsonError::Ok);
  64. REQUIRE(variant.is<char*>());
  65. REQUIRE_THAT(variant.as<char*>(), Equals("hello"));
  66. }
  67. SECTION("Should clear the JsonVariant") {
  68. deserializeJson(variant, "[1,2,3]");
  69. deserializeJson(variant, "{}");
  70. REQUIRE(variant.is<JsonObject>());
  71. REQUIRE(variant.memoryUsage() == JSON_OBJECT_SIZE(0));
  72. }
  73. }