StringBuffer.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // ArduinoJson - https://arduinojson.org
  2. // Copyright © 2014-2025, Benoit BLANCHON
  3. // MIT License
  4. #include <ArduinoJson/Memory/StringBuffer.hpp>
  5. #include <catch.hpp>
  6. #include "Allocators.hpp"
  7. #include "Literals.hpp"
  8. using namespace ArduinoJson::detail;
  9. TEST_CASE("StringBuffer") {
  10. SpyingAllocator spy;
  11. ResourceManager resources(&spy);
  12. StringBuffer sb(&resources);
  13. VariantData variant;
  14. SECTION("Tiny string") {
  15. auto ptr = sb.reserve(3);
  16. strcpy(ptr, "hi!");
  17. sb.save(&variant);
  18. REQUIRE(variant.type() == VariantType::TinyString);
  19. REQUIRE(variant.asString() == "hi!");
  20. }
  21. SECTION("Tiny string can't contain NUL") {
  22. auto ptr = sb.reserve(3);
  23. memcpy(ptr, "a\0b", 3);
  24. sb.save(&variant);
  25. REQUIRE(variant.type() == VariantType::OwnedString);
  26. auto str = variant.asString();
  27. REQUIRE(str.size() == 3);
  28. REQUIRE(str.c_str()[0] == 'a');
  29. REQUIRE(str.c_str()[1] == 0);
  30. REQUIRE(str.c_str()[2] == 'b');
  31. }
  32. SECTION("Tiny string can't have 4 characters") {
  33. auto ptr = sb.reserve(4);
  34. strcpy(ptr, "alfa");
  35. sb.save(&variant);
  36. REQUIRE(variant.type() == VariantType::OwnedString);
  37. REQUIRE(variant.asString() == "alfa");
  38. }
  39. }