// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2019 // MIT License #include #include #include "custom_string.hpp" using namespace ARDUINOJSON_NAMESPACE; template static size_t print(StringWriter& sb, const char* s) { return sb.write(reinterpret_cast(s), strlen(s)); } template void common_tests(StringWriter& sb, const String& output) { SECTION("InitialState") { REQUIRE(std::string("") == output); } SECTION("EmptyString") { REQUIRE(0 == print(sb, "")); REQUIRE(std::string("") == output); } SECTION("OneString") { REQUIRE(4 == print(sb, "ABCD")); REQUIRE(std::string("ABCD") == output); } SECTION("TwoStrings") { REQUIRE(4 == print(sb, "ABCD")); REQUIRE(4 == print(sb, "EFGH")); REQUIRE(std::string("ABCDEFGH") == output); } } TEST_CASE("StaticStringWriter") { char output[20]; StaticStringWriter sb(output, sizeof(output)); common_tests(sb, static_cast(output)); SECTION("OverCapacity") { REQUIRE(19 == print(sb, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")); REQUIRE(0 == print(sb, "ABC")); REQUIRE(std::string("ABCDEFGHIJKLMNOPQRS") == output); } } TEST_CASE("Writer") { std::string output; Writer sb(output); common_tests(sb, output); } TEST_CASE("Writer") { custom_string output; Writer sb(output); REQUIRE(4 == print(sb, "ABCD")); REQUIRE("ABCD" == output); } TEST_CASE("IsWriteableString") { SECTION("std::string") { REQUIRE(IsWriteableString::value == true); } SECTION("custom_string") { REQUIRE(IsWriteableString::value == true); } SECTION("basic_string") { REQUIRE(IsWriteableString >::value == false); } }