1 #include <c10/util/StringUtil.h>
2
3 #include <gtest/gtest.h>
4
5 namespace {
6
7 namespace test_str_narrow_single {
TEST(StringUtilTest,testStrNarrowSingle)8 TEST(StringUtilTest, testStrNarrowSingle) {
9 std::string s = "narrow test string";
10 EXPECT_EQ(s, c10::str(s));
11
12 const char* c_str = s.c_str();
13 EXPECT_EQ(s, c10::str(c_str));
14
15 char c = 'a';
16 EXPECT_EQ(std::string(1, c), c10::str(c));
17 }
18 } // namespace test_str_narrow_single
19
20 namespace test_str_wide_single {
TEST(StringUtilTest,testStrWideSingle)21 TEST(StringUtilTest, testStrWideSingle) {
22 std::wstring s = L"wide test string";
23 std::string narrow = "wide test string";
24 EXPECT_EQ(narrow, c10::str(s));
25
26 const wchar_t* c_str = s.c_str();
27 EXPECT_EQ(narrow, c10::str(c_str));
28
29 wchar_t c = L'a';
30 std::string narrowC = "a";
31 EXPECT_EQ(narrowC, c10::str(c));
32 }
33 } // namespace test_str_wide_single
34
35 namespace test_str_wide_single_multibyte {
TEST(StringUtilTest,testStrWideSingleMultibyte)36 TEST(StringUtilTest, testStrWideSingleMultibyte) {
37 std::wstring s = L"\u00EC blah";
38 std::string narrow = "\xC3\xAC blah";
39 EXPECT_EQ(narrow, c10::str(s));
40
41 const wchar_t* c_str = s.c_str();
42 EXPECT_EQ(narrow, c10::str(c_str));
43
44 wchar_t c = L'\u00EC';
45 std::string narrowC = "\xC3\xAC";
46 EXPECT_EQ(narrowC, c10::str(c));
47 }
48 } // namespace test_str_wide_single_multibyte
49
50 namespace test_str_wide_empty {
TEST(StringUtilTest,testStrWideEmpty)51 TEST(StringUtilTest, testStrWideEmpty) {
52 std::wstring s = L"";
53 std::string narrow = "";
54 EXPECT_EQ(narrow, c10::str(s));
55
56 const wchar_t* c_str = s.c_str();
57 EXPECT_EQ(narrow, c10::str(c_str));
58
59 wchar_t c = L'\0';
60 std::string narrowC(1, '\0');
61 EXPECT_EQ(narrowC, c10::str(c));
62 }
63 } // namespace test_str_wide_empty
64
65 namespace test_str_multi {
TEST(StringUtilTest,testStrMulti)66 TEST(StringUtilTest, testStrMulti) {
67 std::string result = c10::str(
68 "c_str ",
69 'c',
70 std::string(" std::string "),
71 42,
72 L" wide c_str ",
73 L'w',
74 std::wstring(L" std::wstring "));
75 std::string expected = "c_str c std::string 42 wide c_str w std::wstring ";
76 EXPECT_EQ(expected, result);
77 }
78 } // namespace test_str_multi
79
80 } // namespace
81