From 100b9cbba216f8b2711903982b4c8752c5d45a9f Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 15 Apr 2018 14:40:22 +0100 Subject: [PATCH] Add tests for String::Convert --- test/tests/StringTest.cpp | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/test/tests/StringTest.cpp b/test/tests/StringTest.cpp index d0d6c0951a..045278470f 100644 --- a/test/tests/StringTest.cpp +++ b/test/tests/StringTest.cpp @@ -11,6 +11,20 @@ class StringTest : public testing::TestWithParam { }; +/////////////////////////////////////////////////////////////////////////////// +// Test Helpers +/////////////////////////////////////////////////////////////////////////////// + +static std::string StringFromBytes(std::initializer_list list) +{ + std::vector data(list); + return std::string(data.begin(), data.end()); +} + +/////////////////////////////////////////////////////////////////////////////// +// Tests for String::Trim +/////////////////////////////////////////////////////////////////////////////// + INSTANTIATE_TEST_CASE_P(TrimData, StringTest, testing::Values( // input after Trim after TrimStart TCase("string", "string", "string"), @@ -45,6 +59,10 @@ TEST_P(StringTest, TrimStart) ASSERT_EQ(expected, actual); } +/////////////////////////////////////////////////////////////////////////////// +// Tests for String::Split +/////////////////////////////////////////////////////////////////////////////// + TEST_F(StringTest, Split_ByComma) { auto actual = String::Split("a,bb,ccc,dd", ","); @@ -64,3 +82,44 @@ TEST_F(StringTest, Split_ByEmpty) { EXPECT_THROW(String::Split("string", ""), std::invalid_argument); } + +/////////////////////////////////////////////////////////////////////////////// +// Tests for String::Convert +/////////////////////////////////////////////////////////////////////////////// + +// TODO Remove when String::Convert is implemented for non-Windows platforms +#ifdef _WIN32 + +TEST_F(StringTest, Convert_950_to_UTF8) +{ + auto input = StringFromBytes({ 0xA7, 0xD6, 0xB3, 0x74, 0xAA, 0xBA, 0xB4, 0xC4, 0xA6, 0xE2, 0xAA, 0xB0, 0xAF, 0x57 }); + auto expected = u8"快速的棕色狐狸"; + auto actual = String::Convert(input, CODE_PAGE::CP_950, CODE_PAGE::CP_UTF8); + ASSERT_EQ(expected, actual); +} + +TEST_F(StringTest, Convert_UTF8_to_932) +{ + auto input = u8"ファストブラウンフォックス"; + auto expected = StringFromBytes({ 0x83, 0x74, 0x83, 0x40, 0x83, 0x58, 0x83, 0x67, 0x83, 0x75, 0x83, 0x89, 0x83, 0x45, 0x83, 0x93, 0x83, 0x74, 0x83, 0x48, 0x83, 0x62, 0x83, 0x4E, 0x83, 0x58 }); + auto actual = String::Convert(input, CODE_PAGE::CP_UTF8, CODE_PAGE::CP_932); + ASSERT_EQ(expected, actual); +} + +TEST_F(StringTest, Convert_UTF8_to_UTF8) +{ + auto input = u8"سريع|brown|ثعلب"; + auto expected = input; + auto actual = String::Convert(input, CODE_PAGE::CP_UTF8, CODE_PAGE::CP_UTF8); + ASSERT_EQ(expected, actual); +} + +TEST_F(StringTest, Convert_Empty) +{ + auto input = ""; + auto expected = input; + auto actual = String::Convert(input, CODE_PAGE::CP_1252, CODE_PAGE::CP_UTF8); + ASSERT_EQ(expected, actual); +} + +#endif