nestingLimit.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #define SHOULD_WORK(expression) REQUIRE(JsonError::Ok == expression);
  7. #define SHOULD_FAIL(expression) REQUIRE(JsonError::TooDeep == expression);
  8. TEST_CASE("JsonParser nestingLimit") {
  9. SECTION("deserializeJson(JsonArray&)") {
  10. DynamicJsonArray arr;
  11. SECTION("limit = 0") {
  12. SHOULD_FAIL(deserializeJson(arr, "[]", 0));
  13. }
  14. SECTION("limit = 1") {
  15. SHOULD_WORK(deserializeJson(arr, "[]", 1));
  16. SHOULD_FAIL(deserializeJson(arr, "[[]]", 1));
  17. }
  18. SECTION("limit = 2") {
  19. SHOULD_WORK(deserializeJson(arr, "[[]]", 2));
  20. SHOULD_FAIL(deserializeJson(arr, "[[[]]]", 2));
  21. }
  22. }
  23. SECTION("deserializeJson(JsonObject&)") {
  24. DynamicJsonObject obj;
  25. SECTION("limit = 0") {
  26. SHOULD_FAIL(deserializeJson(obj, "{}", 0));
  27. }
  28. SECTION("limit = 1") {
  29. SHOULD_WORK(deserializeJson(obj, "{\"key\":42}", 1));
  30. SHOULD_FAIL(deserializeJson(obj, "{\"key\":{\"key\":42}}", 1));
  31. }
  32. SECTION("limit = 2") {
  33. SHOULD_WORK(deserializeJson(obj, "{\"key\":{\"key\":42}}", 2));
  34. SHOULD_FAIL(deserializeJson(obj, "{\"key\":{\"key\":{\"key\":42}}}", 2));
  35. }
  36. }
  37. SECTION("deserializeJson(JsonVariant&)") {
  38. DynamicJsonVariant var;
  39. SECTION("limit = 0") {
  40. SHOULD_WORK(deserializeJson(var, "\"toto\"", 0));
  41. SHOULD_WORK(deserializeJson(var, "123", 0));
  42. SHOULD_WORK(deserializeJson(var, "true", 0));
  43. SHOULD_FAIL(deserializeJson(var, "[]", 0));
  44. SHOULD_FAIL(deserializeJson(var, "{}", 0));
  45. SHOULD_FAIL(deserializeJson(var, "[\"toto\"]", 0));
  46. SHOULD_FAIL(deserializeJson(var, "{\"toto\":1}", 0));
  47. }
  48. SECTION("limit = 1") {
  49. SHOULD_WORK(deserializeJson(var, "[\"toto\"]", 1));
  50. SHOULD_WORK(deserializeJson(var, "{\"toto\":1}", 1));
  51. SHOULD_FAIL(deserializeJson(var, "{\"toto\":{}}", 1));
  52. SHOULD_FAIL(deserializeJson(var, "{\"toto\":[]}", 1));
  53. SHOULD_FAIL(deserializeJson(var, "[[\"toto\"]]", 1));
  54. SHOULD_FAIL(deserializeJson(var, "[{\"toto\":1}]", 1));
  55. }
  56. }
  57. }