From de7b3dd8c5abcf7cb75100ef590e252647ba0f12 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 20 Aug 2020 21:21:39 +0200 Subject: [PATCH] string splitting by regex: add test case --- tests/unit/common/strings_editing.cpp | 93 +++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/tests/unit/common/strings_editing.cpp b/tests/unit/common/strings_editing.cpp index 0396db590..3207832d3 100644 --- a/tests/unit/common/strings_editing.cpp +++ b/tests/unit/common/strings_editing.cpp @@ -88,4 +88,97 @@ TEST(StringsEditing, SplittingByStringPatternAtEnd) { EXPECT_EQ(""s, r[3]); } +TEST(StringsEditing, SplittingRegexByStringEmptyPattern) { + auto r = mtx::string::split("This, and that, is stuff."s, std::regex{""s}); + + ASSERT_EQ(27, r.size()); + EXPECT_EQ("", r[0]); + EXPECT_EQ("T", r[1]); + EXPECT_EQ("h", r[2]); + EXPECT_EQ("i", r[3]); + EXPECT_EQ("s", r[4]); + EXPECT_EQ(",", r[5]); + EXPECT_EQ(" ", r[6]); + EXPECT_EQ("a", r[7]); + EXPECT_EQ("n", r[8]); + EXPECT_EQ("d", r[9]); + EXPECT_EQ(" ", r[10]); + EXPECT_EQ("t", r[11]); + EXPECT_EQ("h", r[12]); + EXPECT_EQ("a", r[13]); + EXPECT_EQ("t", r[14]); + EXPECT_EQ(",", r[15]); + EXPECT_EQ(" ", r[16]); + EXPECT_EQ("i", r[17]); + EXPECT_EQ("s", r[18]); + EXPECT_EQ(" ", r[19]); + EXPECT_EQ("s", r[20]); + EXPECT_EQ("t", r[21]); + EXPECT_EQ("u", r[22]); + EXPECT_EQ("f", r[23]); + EXPECT_EQ("f", r[24]); + EXPECT_EQ(".", r[25]); + EXPECT_EQ("", r[26]); +} + +TEST(StringsEditing, SplittingRegexByStringEmptyText) { + auto r = mtx::string::split(""s, std::regex{","s}); + + ASSERT_EQ(1, r.size()); + EXPECT_EQ(""s, r[0]); +} + +TEST(StringsEditing, SplittingRegexByStringOneCharPattern) { + auto r = mtx::string::split("This, and that, is stuff."s, std::regex{","s}); + + ASSERT_EQ(3, r.size()); + EXPECT_EQ("This"s, r[0]); + EXPECT_EQ(" and that"s, r[1]); + EXPECT_EQ(" is stuff."s, r[2]); +} + +TEST(StringsEditing, SplittingRegexByStringTwoCharsPattern) { + auto r = mtx::string::split("This, and that, is stuff."s, std::regex{", *"s}); + + ASSERT_EQ(3, r.size()); + EXPECT_EQ("This"s, r[0]); + EXPECT_EQ("and that"s, r[1]); + EXPECT_EQ("is stuff."s, r[2]); +} + +TEST(StringsEditing, SplittingRegexByStringLimit2) { + auto r = mtx::string::split("This, and that, is stuff."s, std::regex{", *"s}, 2); + + ASSERT_EQ(2, r.size()); + EXPECT_EQ("This"s, r[0]); + EXPECT_EQ("and that, is stuff."s, r[1]); +} + +TEST(StringsEditing, SplittingRegexByStringLimit1) { + auto r = mtx::string::split("This, and that, is stuff."s, std::regex{", *"s}, 1); + + ASSERT_EQ(1, r.size()); + EXPECT_EQ("This, and that, is stuff."s, r[0]); +} + +TEST(StringsEditing, SplittingRegexByStringPatternAtStart) { + auto r = mtx::string::split(",This, and that, is stuff."s, std::regex{", *"s}); + + ASSERT_EQ(4, r.size()); + EXPECT_EQ(""s, r[0]); + EXPECT_EQ("This"s, r[1]); + EXPECT_EQ("and that"s, r[2]); + EXPECT_EQ("is stuff."s, r[3]); +} + +TEST(StringsEditing, SplittingRegexByStringPatternAtEnd) { + auto r = mtx::string::split("This, and that, is stuff.,"s, std::regex{", *"s}); + + ASSERT_EQ(4, r.size()); + EXPECT_EQ("This"s, r[0]); + EXPECT_EQ("and that"s, r[1]); + EXPECT_EQ("is stuff."s, r[2]); + EXPECT_EQ(""s, r[3]); +} + }