From b7e5dd28b895409783f7734521bc90d37c8f1119 Mon Sep 17 00:00:00 2001 From: ado Date: Tue, 8 Aug 2023 12:10:20 +0200 Subject: [PATCH] Update splitter tests --- include/ss/converter.hpp | 1 - test/test_splitter.cpp | 47 +++++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/include/ss/converter.hpp b/include/ss/converter.hpp index 8fce18d..c91fee7 100644 --- a/include/ss/converter.hpp +++ b/include/ss/converter.hpp @@ -379,7 +379,6 @@ private: return extract_tuple(elems); } - // do not know how to specialize by return type :( template no_void_validator_tup_t> convert_impl( const split_data& elems, const std::tuple*) { diff --git a/test/test_splitter.cpp b/test/test_splitter.cpp index bf3ba16..201de9d 100644 --- a/test/test_splitter.cpp +++ b/test/test_splitter.cpp @@ -775,6 +775,23 @@ TEST_CASE("splitter test resplit unterminated quote") { CHECK_EQ(words(vec), expected); } } + + { + ss::converter, ss::escape<'\\'>, ss::multiline> c; + auto& s = c.splitter; + auto vec = expect_unterminated_quote(s, R"("just\"some","ra)"); + std::vector expected{"just\"some"}; + auto w = words(vec); + w.pop_back(); + CHECK_EQ(w, expected); + REQUIRE(s.unterminated_quote()); + { + auto new_line = buff.append(R"(n,dom",str\"ings)"); + // invalid resplit size + vec = c.resplit(new_line, 4); + CHECK(!s.valid()); + } + } } TEST_CASE("splitter test resplit unterminated quote with exceptions") { @@ -1040,47 +1057,57 @@ TEST_CASE("splitter test resplit unterminated quote with exceptions") { } } -TEST_CASE("splitter test invalid splits") { - ss::converter, ss::trim<' '>, - ss::escape<'\\'>> - c; +template +void test_invalid_splits() { + ss::converter, ss::trim<' '>, ss::escape<'\\'>, Ts...> c; auto& s = c.splitter; + auto check_error_msg = [&] { + if constexpr (ss::setup::string_error) { + CHECK_FALSE(s.error_msg().empty()); + } + }; + // empty delimiter s.split(buff("some,random,strings"), ""); CHECK_FALSE(s.valid()); CHECK_FALSE(s.unterminated_quote()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); // mismatched delimiter s.split(buff(R"(some,"random,"strings")")); CHECK_FALSE(s.valid()); CHECK_FALSE(s.unterminated_quote()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); // unterminated escape s.split(buff(R"(some,random,strings\)")); CHECK_FALSE(s.valid()); CHECK_FALSE(s.unterminated_quote()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); // unterminated escape s.split(buff(R"(some,random,"strings\)")); CHECK_FALSE(s.valid()); CHECK_FALSE(s.unterminated_quote()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); // unterminated quote s.split(buff("some,random,\"strings")); CHECK_FALSE(s.valid()); CHECK(s.unterminated_quote()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); // invalid resplit char new_line[] = "some"; c.resplit(new_line, strlen(new_line)); CHECK_FALSE(s.valid()); - CHECK_FALSE(s.error_msg().empty()); + check_error_msg(); +} + +TEST_CASE("splitter test invalid splits") { + test_invalid_splits(); + test_invalid_splits(); } TEST_CASE("splitter test invalid splits with exceptions") {