#include #include "stringTools.h" using namespace testing; using std::string; using std::wstring; // splitIntoLines TEST(splitIntoLines, splitsOnLineBreaks) { EXPECT_THAT(splitIntoLines("this\nis\r\na\r\ntest"), ElementsAre("this", "is", "a", "test")); } TEST(splitIntoLines, handlesEmptyElements) { EXPECT_THAT(splitIntoLines("\n1\n\n\n2\n"), ElementsAre("", "1", "", "", "2", "")); EXPECT_THAT(splitIntoLines("\n"), ElementsAre("", "")); EXPECT_THAT(splitIntoLines(""), ElementsAre("")); } // wrapSingleLineString TEST(wrapSingleLineString, basic) { const char* lipsum = "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua."; EXPECT_THAT(wrapSingleLineString(lipsum, 30), ElementsAre("Lorem ipsum dolor sit amet,", "consectetur adipisici elit,", "sed eiusmod tempor incidunt ut", "labore et dolore magna aliqua.")); } TEST(wrapSingleLineString, preciseWrapPosition) { const char* test = "a b c"; EXPECT_THAT(wrapSingleLineString(test, 5), ElementsAre("a b c")); EXPECT_THAT(wrapSingleLineString(test, 4), ElementsAre("a b", "c")); EXPECT_THAT(wrapSingleLineString(test, 3), ElementsAre("a b", "c")); EXPECT_THAT(wrapSingleLineString(test, 2), ElementsAre("a", "b", "c")); EXPECT_THAT(wrapSingleLineString(test, 1), ElementsAre("a", "b", "c")); } TEST(wrapSingleLineString, overlongLines) { EXPECT_THAT(wrapSingleLineString("aaa bbbb ccc", 3), ElementsAre("aaa", "bbb", "b", "ccc")); EXPECT_THAT(wrapSingleLineString("aaa bbbb c", 3), ElementsAre("aaa", "bbb", "b c")); EXPECT_THAT(wrapSingleLineString("a bbbb c", 5), ElementsAre("a", "bbbb", "c")); EXPECT_THAT(wrapSingleLineString("aa b", 1), ElementsAre("a", "a", "b")); } TEST(wrapSingleLineString, discardingSpacesAtWrapPositionsAndEnd) { const char* test = " a b c "; EXPECT_THAT(wrapSingleLineString(test, 20), ElementsAre(" a b c")); EXPECT_THAT(wrapSingleLineString(test, 6), ElementsAre(" a b", "c")); EXPECT_THAT(wrapSingleLineString(test, 5), ElementsAre(" a", "b c")); EXPECT_THAT(wrapSingleLineString(test, 4), ElementsAre(" a", "b c")); EXPECT_THAT(wrapSingleLineString(test, 3), ElementsAre(" a", "b", "c")); EXPECT_THAT(wrapSingleLineString(test, 2), ElementsAre("", "a", "b", "c")); } TEST(wrapSingleLineString, errorHandling) { EXPECT_NO_THROW(wrapSingleLineString("test", 1)); EXPECT_NO_THROW(wrapSingleLineString("", 1)); // Throw if lineLength < 1 EXPECT_ANY_THROW(wrapSingleLineString("test", 0)); EXPECT_ANY_THROW(wrapSingleLineString("", 0)); EXPECT_ANY_THROW(wrapSingleLineString("test", -1)); EXPECT_ANY_THROW(wrapSingleLineString("", -1)); // Throw if string contains tabs EXPECT_ANY_THROW(wrapSingleLineString("a\tb", 10)); // Throw if string contains line breaks EXPECT_ANY_THROW(wrapSingleLineString("a\nb", 10)); } // wrapString TEST(wrapString, basic) { EXPECT_THAT(wrapString("\n\nLine no 3\n\nLine no 4\n", 8), ElementsAre("", "", "Line no", "3", "", "Line no", "4", "")); } // latin1ToWide TEST(latin1ToWide, basic) { string pangramLatin1 = "D\350s No\353l o\371 un z\351phyr ha\357 me v\352t de gla\347ons w\374rmiens, je d\356ne d'exquis r\364tis de boeuf au kir \340 l'a\377 d'\342ge m\373r & c\346tera!"; wstring pangramWide = L"Dès Noël où un zéphyr haï me vêt de glaçons würmiens, je dîne d'exquis rôtis de boeuf au kir à l'aÿ d'âge mûr & cætera!"; EXPECT_EQ(pangramWide, latin1ToWide(pangramLatin1)); } // toASCII TEST(toASCII, string) { EXPECT_EQ( "A naive man called was having pina colada and creme brulee.", toASCII(U"A naïve man called 晨 was having piña colada and crème brûlée.")); EXPECT_EQ(string(""), toASCII(U"")); }