JsonParser_NestingLimit_Tests.cpp 2.1 KB

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