deserializeJsonValue.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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(DynamicJsonDocument&)") {
  8. DynamicJsonDocument doc;
  9. SECTION("null char*") {
  10. JsonError err = deserializeJson(doc, static_cast<char*>(0));
  11. REQUIRE(err != JsonError::Ok);
  12. }
  13. SECTION("null const char*") {
  14. JsonError err = deserializeJson(doc, static_cast<const char*>(0));
  15. REQUIRE(err != JsonError::Ok);
  16. }
  17. SECTION("Integer") {
  18. JsonError err = deserializeJson(doc, "-42");
  19. REQUIRE(err == JsonError::Ok);
  20. REQUIRE(doc.is<int>());
  21. REQUIRE_FALSE(doc.is<bool>());
  22. REQUIRE(doc.as<int>() == -42);
  23. }
  24. SECTION("Double") {
  25. JsonError err = deserializeJson(doc, "-1.23e+4");
  26. REQUIRE(err == JsonError::Ok);
  27. REQUIRE_FALSE(doc.is<int>());
  28. REQUIRE(doc.is<double>());
  29. REQUIRE(doc.as<double>() == Approx(-1.23e+4));
  30. }
  31. SECTION("Double quoted string") {
  32. JsonError err = deserializeJson(doc, "\"hello world\"");
  33. REQUIRE(err == JsonError::Ok);
  34. REQUIRE(doc.is<char*>());
  35. REQUIRE_THAT(doc.as<char*>(), Equals("hello world"));
  36. }
  37. SECTION("Single quoted string") {
  38. JsonError err = deserializeJson(doc, "\'hello world\'");
  39. REQUIRE(err == JsonError::Ok);
  40. REQUIRE(doc.is<char*>());
  41. REQUIRE_THAT(doc.as<char*>(), Equals("hello world"));
  42. }
  43. SECTION("Escape sequences") {
  44. JsonError err =
  45. deserializeJson(doc, "\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"");
  46. REQUIRE(err == JsonError::Ok);
  47. REQUIRE(doc.as<std::string>() == "1\"2\\3/4\b5\f6\n7\r8\t9");
  48. }
  49. SECTION("True") {
  50. JsonError err = deserializeJson(doc, "true");
  51. REQUIRE(err == JsonError::Ok);
  52. REQUIRE(doc.is<bool>());
  53. REQUIRE(doc.as<bool>() == true);
  54. }
  55. SECTION("False") {
  56. JsonError err = deserializeJson(doc, "false");
  57. REQUIRE(err == JsonError::Ok);
  58. REQUIRE(doc.is<bool>());
  59. REQUIRE(doc.as<bool>() == false);
  60. }
  61. SECTION("Should clear the JsonVariant") {
  62. deserializeJson(doc, "[1,2,3]");
  63. deserializeJson(doc, "{}");
  64. REQUIRE(doc.is<JsonObject>());
  65. REQUIRE(doc.memoryUsage() == JSON_OBJECT_SIZE(0));
  66. }
  67. SECTION("Empty input") {
  68. JsonError err = deserializeJson(doc, "");
  69. REQUIRE(err == JsonError::IncompleteInput);
  70. }
  71. SECTION("Just a trailing comment") {
  72. JsonError err = deserializeJson(doc, "// comment");
  73. REQUIRE(err == JsonError::IncompleteInput);
  74. }
  75. SECTION("Just a block comment") {
  76. JsonError err = deserializeJson(doc, "/*comment*/");
  77. REQUIRE(err == JsonError::IncompleteInput);
  78. }
  79. SECTION("Just a slash") {
  80. JsonError err = deserializeJson(doc, "/");
  81. REQUIRE(err == JsonError::InvalidInput);
  82. }
  83. SECTION("Garbage") {
  84. JsonError err = deserializeJson(doc, "%*$£¤");
  85. REQUIRE(err == JsonError::InvalidInput);
  86. }
  87. SECTION("Premature null-terminator") {
  88. SECTION("In escape sequence") {
  89. JsonError err = deserializeJson(doc, "\"\\");
  90. REQUIRE(err == JsonError::IncompleteInput);
  91. }
  92. SECTION("In block comment") {
  93. JsonError err = deserializeJson(doc, "/* comment");
  94. REQUIRE(err == JsonError::IncompleteInput);
  95. }
  96. SECTION("In double quoted string") {
  97. JsonError err = deserializeJson(doc, "\"hello");
  98. REQUIRE(err == JsonError::IncompleteInput);
  99. }
  100. SECTION("In single quoted string") {
  101. JsonError err = deserializeJson(doc, "'hello");
  102. REQUIRE(err == JsonError::IncompleteInput);
  103. }
  104. }
  105. SECTION("Premature end of input") {
  106. SECTION("In escape sequence") {
  107. JsonError err = deserializeJson(doc, "\"\\n\"", 2);
  108. REQUIRE(err == JsonError::IncompleteInput);
  109. }
  110. SECTION("In block comment") {
  111. JsonError err = deserializeJson(doc, "/* comment */", 10);
  112. REQUIRE(err == JsonError::IncompleteInput);
  113. }
  114. SECTION("In double quoted string") {
  115. JsonError err = deserializeJson(doc, "\"hello\"", 6);
  116. REQUIRE(err == JsonError::IncompleteInput);
  117. }
  118. SECTION("In single quoted string") {
  119. JsonError err = deserializeJson(doc, "'hello'", 6);
  120. REQUIRE(err == JsonError::IncompleteInput);
  121. }
  122. }
  123. }