overflowed.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2024, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. #include "Allocators.hpp"
  7. TEST_CASE("JsonDocument::overflowed()") {
  8. TimebombAllocator timebomb(10);
  9. JsonDocument doc(&timebomb);
  10. SECTION("returns false on a fresh object") {
  11. timebomb.setCountdown(0);
  12. CHECK(doc.overflowed() == false);
  13. }
  14. SECTION("returns true after a failed insertion") {
  15. timebomb.setCountdown(0);
  16. doc.add(0);
  17. CHECK(doc.overflowed() == true);
  18. }
  19. SECTION("returns false after successful insertion") {
  20. timebomb.setCountdown(2);
  21. doc.add(0);
  22. CHECK(doc.overflowed() == false);
  23. }
  24. SECTION("returns true after a failed string copy") {
  25. timebomb.setCountdown(0);
  26. doc.add(std::string("example"));
  27. CHECK(doc.overflowed() == true);
  28. }
  29. SECTION("returns false after a successful string copy") {
  30. timebomb.setCountdown(3);
  31. doc.add(std::string("example"));
  32. CHECK(doc.overflowed() == false);
  33. }
  34. SECTION("returns true after a failed member add") {
  35. timebomb.setCountdown(0);
  36. doc["example"] = true;
  37. CHECK(doc.overflowed() == true);
  38. }
  39. SECTION("returns true after a failed deserialization") {
  40. timebomb.setCountdown(0);
  41. deserializeJson(doc, "[1, 2]");
  42. CHECK(doc.overflowed() == true);
  43. }
  44. SECTION("returns false after a successful deserialization") {
  45. timebomb.setCountdown(3);
  46. deserializeJson(doc, "[\"example\"]");
  47. CHECK(doc.overflowed() == false);
  48. }
  49. SECTION("returns false after clear()") {
  50. timebomb.setCountdown(0);
  51. doc.add(0);
  52. doc.clear();
  53. CHECK(doc.overflowed() == false);
  54. }
  55. SECTION("remains false after shrinkToFit()") {
  56. timebomb.setCountdown(2);
  57. doc.add(0);
  58. timebomb.setCountdown(2);
  59. doc.shrinkToFit();
  60. CHECK(doc.overflowed() == false);
  61. }
  62. SECTION("remains true after shrinkToFit()") {
  63. timebomb.setCountdown(0);
  64. doc.add(0);
  65. timebomb.setCountdown(2);
  66. doc.shrinkToFit();
  67. CHECK(doc.overflowed() == true);
  68. }
  69. SECTION("returns false when string length doesn't overflow") {
  70. auto maxLength = ArduinoJson::detail::StringNode::maxLength;
  71. CHECK(doc.set(std::string(maxLength, 'a')) == true);
  72. CHECK(doc.overflowed() == false);
  73. }
  74. SECTION("returns true when string length overflows") {
  75. auto maxLength = ArduinoJson::detail::StringNode::maxLength;
  76. CHECK(doc.set(std::string(maxLength + 1, 'a')) == false);
  77. CHECK(doc.overflowed() == true);
  78. }
  79. }