StringBuffer.cpp 1.2 KB

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