JsonParser_NestingLimit_Tests.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright Benoit Blanchon 2014-2015
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. #include <gtest/gtest.h>
  7. #include <ArduinoJson.h>
  8. class JsonParser_NestingLimit_Tests : public testing::Test {
  9. protected:
  10. void whenNestingLimitIs(uint8_t nestingLimit) {
  11. _nestingLimit = nestingLimit;
  12. }
  13. void parseArrayMustFail(const char *json) {
  14. ASSERT_FALSE(tryParseArray(json));
  15. }
  16. void parseArrayMustSucceed(const char *json) {
  17. ASSERT_TRUE(tryParseArray(json));
  18. }
  19. void parseObjectMustFail(const char *json) {
  20. ASSERT_FALSE(tryParseObject(json));
  21. }
  22. void parseObjectMustSucceed(const char *json) {
  23. ASSERT_TRUE(tryParseObject(json));
  24. }
  25. private:
  26. bool tryParseArray(const char *json) {
  27. DynamicJsonBuffer buffer;
  28. char s[256];
  29. strcpy(s, json);
  30. return buffer.parseArray(s, _nestingLimit).success();
  31. }
  32. bool tryParseObject(const char *json) {
  33. DynamicJsonBuffer buffer;
  34. char s[256];
  35. strcpy(s, json);
  36. return buffer.parseObject(s, _nestingLimit).success();
  37. }
  38. uint8_t _nestingLimit;
  39. };
  40. TEST_F(JsonParser_NestingLimit_Tests, ParseArrayWithNestingLimit0) {
  41. whenNestingLimitIs(0);
  42. parseArrayMustSucceed("[]");
  43. parseArrayMustFail("[[]]");
  44. }
  45. TEST_F(JsonParser_NestingLimit_Tests, ParseArrayWithNestingLimit1) {
  46. whenNestingLimitIs(1);
  47. parseArrayMustSucceed("[[]]");
  48. parseArrayMustFail("[[[]]]");
  49. }
  50. TEST_F(JsonParser_NestingLimit_Tests, ParseArrayWithNestingLimit2) {
  51. whenNestingLimitIs(2);
  52. parseArrayMustSucceed("[[[]]]");
  53. parseArrayMustFail("[[[[]]]]");
  54. }
  55. TEST_F(JsonParser_NestingLimit_Tests, ParseObjectWithNestingLimit0) {
  56. whenNestingLimitIs(0);
  57. parseObjectMustSucceed("{}");
  58. parseObjectMustFail("{\"key\":{}}");
  59. }
  60. TEST_F(JsonParser_NestingLimit_Tests, ParseObjectWithNestingLimit1) {
  61. whenNestingLimitIs(1);
  62. parseObjectMustSucceed("{\"key\":{}}");
  63. parseObjectMustFail("{\"key\":{\"key\":{}}}");
  64. }
  65. TEST_F(JsonParser_NestingLimit_Tests, ParseObjectWithNestingLimit2) {
  66. whenNestingLimitIs(2);
  67. parseObjectMustSucceed("{\"key\":{\"key\":{}}}");
  68. parseObjectMustFail("{\"key\":{\"key\":{\"key\":{}}}}");
  69. }