1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // string_utils_unittests:
7*8975f5c5SAndroid Build Coastguard Worker // Unit tests for the string utils.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "string_utils.h"
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker #include <gmock/gmock.h>
13*8975f5c5SAndroid Build Coastguard Worker #include <gtest/gtest.h>
14*8975f5c5SAndroid Build Coastguard Worker
15*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Worker namespace
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker
20*8975f5c5SAndroid Build Coastguard Worker // Basic SplitString tests
TEST(StringUtilsTest,SplitStringBasics)21*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, SplitStringBasics)
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
24*8975f5c5SAndroid Build Coastguard Worker
25*8975f5c5SAndroid Build Coastguard Worker r = SplitString(std::string(), ",:;", KEEP_WHITESPACE, SPLIT_WANT_ALL);
26*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(r.empty());
27*8975f5c5SAndroid Build Coastguard Worker
28*8975f5c5SAndroid Build Coastguard Worker // Empty separator list
29*8975f5c5SAndroid Build Coastguard Worker r = SplitString("hello, world", "", KEEP_WHITESPACE, SPLIT_WANT_ALL);
30*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(1u, r.size());
31*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("hello, world", r[0]);
32*8975f5c5SAndroid Build Coastguard Worker
33*8975f5c5SAndroid Build Coastguard Worker // Should split on any of the separators.
34*8975f5c5SAndroid Build Coastguard Worker r = SplitString("::,,;;", ",:;", KEEP_WHITESPACE, SPLIT_WANT_ALL);
35*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(7u, r.size());
36*8975f5c5SAndroid Build Coastguard Worker for (auto str : r)
37*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(str.empty());
38*8975f5c5SAndroid Build Coastguard Worker
39*8975f5c5SAndroid Build Coastguard Worker r = SplitString("red, green; blue:", ",:;", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
40*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(3u, r.size());
41*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("red", r[0]);
42*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("green", r[1]);
43*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("blue", r[2]);
44*8975f5c5SAndroid Build Coastguard Worker
45*8975f5c5SAndroid Build Coastguard Worker // Want to split a string along whitespace sequences.
46*8975f5c5SAndroid Build Coastguard Worker r = SplitString(" red green \tblue\n", " \t\n", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
47*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(3u, r.size());
48*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("red", r[0]);
49*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("green", r[1]);
50*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("blue", r[2]);
51*8975f5c5SAndroid Build Coastguard Worker
52*8975f5c5SAndroid Build Coastguard Worker // Weird case of splitting on spaces but not trimming.
53*8975f5c5SAndroid Build Coastguard Worker r = SplitString(" red ", " ", TRIM_WHITESPACE, SPLIT_WANT_ALL);
54*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(3u, r.size());
55*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[0]); // Before the first space.
56*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("red", r[1]);
57*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[2]); // After the last space.
58*8975f5c5SAndroid Build Coastguard Worker }
59*8975f5c5SAndroid Build Coastguard Worker
60*8975f5c5SAndroid Build Coastguard Worker // Check different whitespace and result types for SplitString
TEST(StringUtilsTest,SplitStringWhitespaceAndResultType)61*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, SplitStringWhitespaceAndResultType)
62*8975f5c5SAndroid Build Coastguard Worker {
63*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Worker // Empty input handling.
66*8975f5c5SAndroid Build Coastguard Worker r = SplitString(std::string(), ",", KEEP_WHITESPACE, SPLIT_WANT_ALL);
67*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(r.empty());
68*8975f5c5SAndroid Build Coastguard Worker r = SplitString(std::string(), ",", KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
69*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(r.empty());
70*8975f5c5SAndroid Build Coastguard Worker
71*8975f5c5SAndroid Build Coastguard Worker // Input string is space and we're trimming.
72*8975f5c5SAndroid Build Coastguard Worker r = SplitString(" ", ",", TRIM_WHITESPACE, SPLIT_WANT_ALL);
73*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(1u, r.size());
74*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[0]);
75*8975f5c5SAndroid Build Coastguard Worker r = SplitString(" ", ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
76*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(r.empty());
77*8975f5c5SAndroid Build Coastguard Worker
78*8975f5c5SAndroid Build Coastguard Worker // Test all 4 combinations of flags on ", ,".
79*8975f5c5SAndroid Build Coastguard Worker r = SplitString(", ,", ",", KEEP_WHITESPACE, SPLIT_WANT_ALL);
80*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(3u, r.size());
81*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[0]);
82*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(" ", r[1]);
83*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[2]);
84*8975f5c5SAndroid Build Coastguard Worker r = SplitString(", ,", ",", KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
85*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(1u, r.size());
86*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(" ", r[0]);
87*8975f5c5SAndroid Build Coastguard Worker r = SplitString(", ,", ",", TRIM_WHITESPACE, SPLIT_WANT_ALL);
88*8975f5c5SAndroid Build Coastguard Worker ASSERT_EQ(3u, r.size());
89*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[0]);
90*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[1]);
91*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", r[2]);
92*8975f5c5SAndroid Build Coastguard Worker r = SplitString(", ,", ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
93*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(r.empty());
94*8975f5c5SAndroid Build Coastguard Worker }
95*8975f5c5SAndroid Build Coastguard Worker
96*8975f5c5SAndroid Build Coastguard Worker // Tests for SplitStringAlongWhitespace
TEST(StringUtilsTest,SplitStringAlongWhitespace)97*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, SplitStringAlongWhitespace)
98*8975f5c5SAndroid Build Coastguard Worker {
99*8975f5c5SAndroid Build Coastguard Worker {
100*8975f5c5SAndroid Build Coastguard Worker // No whitespace.
101*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
102*8975f5c5SAndroid Build Coastguard Worker SplitStringAlongWhitespace("abcd", &r);
103*8975f5c5SAndroid Build Coastguard Worker ASSERT_THAT(r, testing::ElementsAre("abcd"));
104*8975f5c5SAndroid Build Coastguard Worker }
105*8975f5c5SAndroid Build Coastguard Worker
106*8975f5c5SAndroid Build Coastguard Worker {
107*8975f5c5SAndroid Build Coastguard Worker // Just whitespace.
108*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
109*8975f5c5SAndroid Build Coastguard Worker SplitStringAlongWhitespace(" \t", &r);
110*8975f5c5SAndroid Build Coastguard Worker ASSERT_THAT(r, testing::ElementsAre());
111*8975f5c5SAndroid Build Coastguard Worker }
112*8975f5c5SAndroid Build Coastguard Worker
113*8975f5c5SAndroid Build Coastguard Worker {
114*8975f5c5SAndroid Build Coastguard Worker // Consecutive whitespace of same type.
115*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
116*8975f5c5SAndroid Build Coastguard Worker SplitStringAlongWhitespace("a b", &r);
117*8975f5c5SAndroid Build Coastguard Worker ASSERT_THAT(r, testing::ElementsAre("a", "b"));
118*8975f5c5SAndroid Build Coastguard Worker }
119*8975f5c5SAndroid Build Coastguard Worker
120*8975f5c5SAndroid Build Coastguard Worker {
121*8975f5c5SAndroid Build Coastguard Worker // Consecutive whitespace of different types.
122*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
123*8975f5c5SAndroid Build Coastguard Worker SplitStringAlongWhitespace("ab \tcd", &r);
124*8975f5c5SAndroid Build Coastguard Worker ASSERT_THAT(r, testing::ElementsAre("ab", "cd"));
125*8975f5c5SAndroid Build Coastguard Worker }
126*8975f5c5SAndroid Build Coastguard Worker
127*8975f5c5SAndroid Build Coastguard Worker {
128*8975f5c5SAndroid Build Coastguard Worker // Non-empty output std::vector.
129*8975f5c5SAndroid Build Coastguard Worker std::vector<std::string> r;
130*8975f5c5SAndroid Build Coastguard Worker r.push_back("z");
131*8975f5c5SAndroid Build Coastguard Worker SplitStringAlongWhitespace("abc", &r);
132*8975f5c5SAndroid Build Coastguard Worker ASSERT_THAT(r, testing::ElementsAre("z", "abc"));
133*8975f5c5SAndroid Build Coastguard Worker }
134*8975f5c5SAndroid Build Coastguard Worker }
135*8975f5c5SAndroid Build Coastguard Worker
136*8975f5c5SAndroid Build Coastguard Worker // Tests for TrimString
TEST(StringUtilsTest,TrimString)137*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, TrimString)
138*8975f5c5SAndroid Build Coastguard Worker {
139*8975f5c5SAndroid Build Coastguard Worker // Basic tests
140*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("a", TrimString("a", kWhitespaceASCII));
141*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("a", TrimString(" a", kWhitespaceASCII));
142*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("a", TrimString("a ", kWhitespaceASCII));
143*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("a", TrimString(" a ", kWhitespaceASCII));
144*8975f5c5SAndroid Build Coastguard Worker
145*8975f5c5SAndroid Build Coastguard Worker // Tests with empty strings
146*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", TrimString("", kWhitespaceASCII));
147*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", TrimString(" \n\r\t", kWhitespaceASCII));
148*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(" foo ", TrimString(" foo ", ""));
149*8975f5c5SAndroid Build Coastguard Worker
150*8975f5c5SAndroid Build Coastguard Worker // Tests it doesn't removes characters in the middle
151*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("foo bar", TrimString(" foo bar ", kWhitespaceASCII));
152*8975f5c5SAndroid Build Coastguard Worker
153*8975f5c5SAndroid Build Coastguard Worker // Test with non-whitespace trimChars
154*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(" ", TrimString("foo bar", "abcdefghijklmnopqrstuvwxyz"));
155*8975f5c5SAndroid Build Coastguard Worker }
156*8975f5c5SAndroid Build Coastguard Worker
157*8975f5c5SAndroid Build Coastguard Worker // Basic functionality tests for HexStringToUInt
TEST(StringUtilsTest,HexStringToUIntBasic)158*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, HexStringToUIntBasic)
159*8975f5c5SAndroid Build Coastguard Worker {
160*8975f5c5SAndroid Build Coastguard Worker unsigned int uintValue;
161*8975f5c5SAndroid Build Coastguard Worker
162*8975f5c5SAndroid Build Coastguard Worker std::string emptyString;
163*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(HexStringToUInt(emptyString, &uintValue));
164*8975f5c5SAndroid Build Coastguard Worker
165*8975f5c5SAndroid Build Coastguard Worker std::string testStringA("0xBADF00D");
166*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(HexStringToUInt(testStringA, &uintValue));
167*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(0xBADF00Du, uintValue);
168*8975f5c5SAndroid Build Coastguard Worker
169*8975f5c5SAndroid Build Coastguard Worker std::string testStringB("0xBADFOOD");
170*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(HexStringToUInt(testStringB, &uintValue));
171*8975f5c5SAndroid Build Coastguard Worker
172*8975f5c5SAndroid Build Coastguard Worker std::string testStringC("BADF00D");
173*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(HexStringToUInt(testStringC, &uintValue));
174*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ(0xBADF00Du, uintValue);
175*8975f5c5SAndroid Build Coastguard Worker
176*8975f5c5SAndroid Build Coastguard Worker std::string testStringD("0x BADF00D");
177*8975f5c5SAndroid Build Coastguard Worker EXPECT_FALSE(HexStringToUInt(testStringD, &uintValue));
178*8975f5c5SAndroid Build Coastguard Worker }
179*8975f5c5SAndroid Build Coastguard Worker
180*8975f5c5SAndroid Build Coastguard Worker // Tests for ToCamelCase
TEST(StringUtilsTest,ToCamelCase)181*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, ToCamelCase)
182*8975f5c5SAndroid Build Coastguard Worker {
183*8975f5c5SAndroid Build Coastguard Worker // No underscore in input; expect identical output
184*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", ToCamelCase(""));
185*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("a", ToCamelCase("a"));
186*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("AbCdEfG", ToCamelCase("AbCdEfG"));
187*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("aBcDeFg", ToCamelCase("aBcDeFg"));
188*8975f5c5SAndroid Build Coastguard Worker
189*8975f5c5SAndroid Build Coastguard Worker // Underscore should be removed and the next character turned upper case
190*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("", ToCamelCase("_"));
191*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("aB", ToCamelCase("a_b"));
192*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("aB", ToCamelCase("a_b"));
193*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("camelCase", ToCamelCase("camel_case"));
194*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("abCDeBEfG", ToCamelCase("abCDe_bEfG"));
195*8975f5c5SAndroid Build Coastguard Worker
196*8975f5c5SAndroid Build Coastguard Worker // Multiple underscores
197*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("aBCDEFG", ToCamelCase("a_b_c_d_e_f_g"));
198*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("abCdEfGh", ToCamelCase("ab_cd_ef_gh"));
199*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("aShortName", ToCamelCase("a_short_name"));
200*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("someShortWords", ToCamelCase("some_short_words"));
201*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("bunchOLetters", ToCamelCase("bunch_o_letters"));
202*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("whatEndsInE", ToCamelCase("what_ends_in_e"));
203*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("adjustSrcDstRegionForBlitFramebuffer",
204*8975f5c5SAndroid Build Coastguard Worker ToCamelCase("adjust_src_dst_region_for_BlitFramebuffer"));
205*8975f5c5SAndroid Build Coastguard Worker
206*8975f5c5SAndroid Build Coastguard Worker // Uppercase after underscore
207*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("abCDEFGh", ToCamelCase("ab_CD_eF_Gh"));
208*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("IWasThere", ToCamelCase("I_was_there"));
209*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("whereDidTHATComeFrom", ToCamelCase("where_did_THAT_come_from"));
210*8975f5c5SAndroid Build Coastguard Worker
211*8975f5c5SAndroid Build Coastguard Worker // Digits
212*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("ab123c4deF5gHi6J", ToCamelCase("ab1_2_3c_4de_f5g_hi6_j"));
213*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("maxSize16KB", ToCamelCase("max_size_16KB"));
214*8975f5c5SAndroid Build Coastguard Worker EXPECT_EQ("supportRGBA8", ToCamelCase("support_RGBA8"));
215*8975f5c5SAndroid Build Coastguard Worker }
216*8975f5c5SAndroid Build Coastguard Worker
217*8975f5c5SAndroid Build Coastguard Worker // Basic functionality for NamesMatchWithWildcard.
TEST(StringUtilsTest,NamesMatchWithWildcard)218*8975f5c5SAndroid Build Coastguard Worker TEST(StringUtilsTest, NamesMatchWithWildcard)
219*8975f5c5SAndroid Build Coastguard Worker {
220*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("ASDF", "ASDF"));
221*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("A*", "ASDF"));
222*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("AS*", "ASDF"));
223*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("ASD*", "ASDF"));
224*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("ASDF*", "ASDF"));
225*8975f5c5SAndroid Build Coastguard Worker
226*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*F", "ASDF"));
227*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*DF", "ASDF"));
228*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*SDF", "ASDF"));
229*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*ASDF", "ASDF"));
230*8975f5c5SAndroid Build Coastguard Worker
231*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("AS**", "ASDF"));
232*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("AS***", "ASDF"));
233*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("**DF", "ASDF"));
234*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("***DF", "ASDF"));
235*8975f5c5SAndroid Build Coastguard Worker
236*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("A*F", "ASDF"));
237*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("A**F", "ASDF"));
238*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*SD*", "ASDF"));
239*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("*S*D*", "ASDF"));
240*8975f5c5SAndroid Build Coastguard Worker
241*8975f5c5SAndroid Build Coastguard Worker EXPECT_TRUE(NamesMatchWithWildcard("ASD*", "ASDF*"));
242*8975f5c5SAndroid Build Coastguard Worker }
243*8975f5c5SAndroid Build Coastguard Worker
244*8975f5c5SAndroid Build Coastguard Worker // Note: ReadFileToString is harder to test
245*8975f5c5SAndroid Build Coastguard Worker
246*8975f5c5SAndroid Build Coastguard Worker class BeginsWithTest : public testing::Test
247*8975f5c5SAndroid Build Coastguard Worker {
248*8975f5c5SAndroid Build Coastguard Worker public:
BeginsWithTest()249*8975f5c5SAndroid Build Coastguard Worker BeginsWithTest() : mMode(TestMode::CHAR_ARRAY) {}
250*8975f5c5SAndroid Build Coastguard Worker
251*8975f5c5SAndroid Build Coastguard Worker enum class TestMode
252*8975f5c5SAndroid Build Coastguard Worker {
253*8975f5c5SAndroid Build Coastguard Worker CHAR_ARRAY,
254*8975f5c5SAndroid Build Coastguard Worker STRING_AND_CHAR_ARRAY,
255*8975f5c5SAndroid Build Coastguard Worker STRING
256*8975f5c5SAndroid Build Coastguard Worker };
257*8975f5c5SAndroid Build Coastguard Worker
setMode(TestMode mode)258*8975f5c5SAndroid Build Coastguard Worker void setMode(TestMode mode) { mMode = mode; }
259*8975f5c5SAndroid Build Coastguard Worker
runBeginsWith(const char * str,const char * prefix)260*8975f5c5SAndroid Build Coastguard Worker bool runBeginsWith(const char *str, const char *prefix)
261*8975f5c5SAndroid Build Coastguard Worker {
262*8975f5c5SAndroid Build Coastguard Worker if (mMode == TestMode::CHAR_ARRAY)
263*8975f5c5SAndroid Build Coastguard Worker {
264*8975f5c5SAndroid Build Coastguard Worker return BeginsWith(str, prefix);
265*8975f5c5SAndroid Build Coastguard Worker }
266*8975f5c5SAndroid Build Coastguard Worker if (mMode == TestMode::STRING_AND_CHAR_ARRAY)
267*8975f5c5SAndroid Build Coastguard Worker {
268*8975f5c5SAndroid Build Coastguard Worker return BeginsWith(std::string(str), prefix);
269*8975f5c5SAndroid Build Coastguard Worker }
270*8975f5c5SAndroid Build Coastguard Worker return BeginsWith(std::string(str), std::string(prefix));
271*8975f5c5SAndroid Build Coastguard Worker }
272*8975f5c5SAndroid Build Coastguard Worker
runTest()273*8975f5c5SAndroid Build Coastguard Worker void runTest()
274*8975f5c5SAndroid Build Coastguard Worker {
275*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(runBeginsWith("foo", "bar"));
276*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(runBeginsWith("", "foo"));
277*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(runBeginsWith("foo", "foobar"));
278*8975f5c5SAndroid Build Coastguard Worker
279*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(runBeginsWith("foobar", "foo"));
280*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(runBeginsWith("foobar", ""));
281*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(runBeginsWith("foo", "foo"));
282*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(runBeginsWith("", ""));
283*8975f5c5SAndroid Build Coastguard Worker }
284*8975f5c5SAndroid Build Coastguard Worker
285*8975f5c5SAndroid Build Coastguard Worker private:
286*8975f5c5SAndroid Build Coastguard Worker TestMode mMode;
287*8975f5c5SAndroid Build Coastguard Worker };
288*8975f5c5SAndroid Build Coastguard Worker
289*8975f5c5SAndroid Build Coastguard Worker // Test that BeginsWith works correctly for const char * arguments.
TEST_F(BeginsWithTest,CharArrays)290*8975f5c5SAndroid Build Coastguard Worker TEST_F(BeginsWithTest, CharArrays)
291*8975f5c5SAndroid Build Coastguard Worker {
292*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::CHAR_ARRAY);
293*8975f5c5SAndroid Build Coastguard Worker runTest();
294*8975f5c5SAndroid Build Coastguard Worker }
295*8975f5c5SAndroid Build Coastguard Worker
296*8975f5c5SAndroid Build Coastguard Worker // Test that BeginsWith works correctly for std::string and const char * arguments.
TEST_F(BeginsWithTest,StringAndCharArray)297*8975f5c5SAndroid Build Coastguard Worker TEST_F(BeginsWithTest, StringAndCharArray)
298*8975f5c5SAndroid Build Coastguard Worker {
299*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::STRING_AND_CHAR_ARRAY);
300*8975f5c5SAndroid Build Coastguard Worker runTest();
301*8975f5c5SAndroid Build Coastguard Worker }
302*8975f5c5SAndroid Build Coastguard Worker
303*8975f5c5SAndroid Build Coastguard Worker // Test that BeginsWith works correctly for std::string arguments.
TEST_F(BeginsWithTest,Strings)304*8975f5c5SAndroid Build Coastguard Worker TEST_F(BeginsWithTest, Strings)
305*8975f5c5SAndroid Build Coastguard Worker {
306*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::STRING);
307*8975f5c5SAndroid Build Coastguard Worker runTest();
308*8975f5c5SAndroid Build Coastguard Worker }
309*8975f5c5SAndroid Build Coastguard Worker
310*8975f5c5SAndroid Build Coastguard Worker class EndsWithTest : public testing::Test
311*8975f5c5SAndroid Build Coastguard Worker {
312*8975f5c5SAndroid Build Coastguard Worker public:
EndsWithTest()313*8975f5c5SAndroid Build Coastguard Worker EndsWithTest() : mMode(TestMode::CHAR_ARRAY) {}
314*8975f5c5SAndroid Build Coastguard Worker
315*8975f5c5SAndroid Build Coastguard Worker enum class TestMode
316*8975f5c5SAndroid Build Coastguard Worker {
317*8975f5c5SAndroid Build Coastguard Worker CHAR_ARRAY,
318*8975f5c5SAndroid Build Coastguard Worker STRING_AND_CHAR_ARRAY,
319*8975f5c5SAndroid Build Coastguard Worker STRING
320*8975f5c5SAndroid Build Coastguard Worker };
321*8975f5c5SAndroid Build Coastguard Worker
setMode(TestMode mode)322*8975f5c5SAndroid Build Coastguard Worker void setMode(TestMode mode) { mMode = mode; }
323*8975f5c5SAndroid Build Coastguard Worker
runEndsWith(const char * str,const char * suffix)324*8975f5c5SAndroid Build Coastguard Worker bool runEndsWith(const char *str, const char *suffix)
325*8975f5c5SAndroid Build Coastguard Worker {
326*8975f5c5SAndroid Build Coastguard Worker if (mMode == TestMode::CHAR_ARRAY)
327*8975f5c5SAndroid Build Coastguard Worker {
328*8975f5c5SAndroid Build Coastguard Worker return EndsWith(str, suffix);
329*8975f5c5SAndroid Build Coastguard Worker }
330*8975f5c5SAndroid Build Coastguard Worker if (mMode == TestMode::STRING_AND_CHAR_ARRAY)
331*8975f5c5SAndroid Build Coastguard Worker {
332*8975f5c5SAndroid Build Coastguard Worker return EndsWith(std::string(str), suffix);
333*8975f5c5SAndroid Build Coastguard Worker }
334*8975f5c5SAndroid Build Coastguard Worker return EndsWith(std::string(str), std::string(suffix));
335*8975f5c5SAndroid Build Coastguard Worker }
336*8975f5c5SAndroid Build Coastguard Worker
runTest()337*8975f5c5SAndroid Build Coastguard Worker void runTest()
338*8975f5c5SAndroid Build Coastguard Worker {
339*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(EndsWith("foo", "bar"));
340*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(EndsWith("", "bar"));
341*8975f5c5SAndroid Build Coastguard Worker ASSERT_FALSE(EndsWith("foo", "foobar"));
342*8975f5c5SAndroid Build Coastguard Worker
343*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(EndsWith("foobar", "bar"));
344*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(EndsWith("foobar", ""));
345*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(EndsWith("bar", "bar"));
346*8975f5c5SAndroid Build Coastguard Worker ASSERT_TRUE(EndsWith("", ""));
347*8975f5c5SAndroid Build Coastguard Worker }
348*8975f5c5SAndroid Build Coastguard Worker
349*8975f5c5SAndroid Build Coastguard Worker private:
350*8975f5c5SAndroid Build Coastguard Worker TestMode mMode;
351*8975f5c5SAndroid Build Coastguard Worker };
352*8975f5c5SAndroid Build Coastguard Worker
353*8975f5c5SAndroid Build Coastguard Worker // Test that EndsWith works correctly for const char * arguments.
TEST_F(EndsWithTest,CharArrays)354*8975f5c5SAndroid Build Coastguard Worker TEST_F(EndsWithTest, CharArrays)
355*8975f5c5SAndroid Build Coastguard Worker {
356*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::CHAR_ARRAY);
357*8975f5c5SAndroid Build Coastguard Worker runTest();
358*8975f5c5SAndroid Build Coastguard Worker }
359*8975f5c5SAndroid Build Coastguard Worker
360*8975f5c5SAndroid Build Coastguard Worker // Test that EndsWith works correctly for std::string and const char * arguments.
TEST_F(EndsWithTest,StringAndCharArray)361*8975f5c5SAndroid Build Coastguard Worker TEST_F(EndsWithTest, StringAndCharArray)
362*8975f5c5SAndroid Build Coastguard Worker {
363*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::STRING_AND_CHAR_ARRAY);
364*8975f5c5SAndroid Build Coastguard Worker runTest();
365*8975f5c5SAndroid Build Coastguard Worker }
366*8975f5c5SAndroid Build Coastguard Worker
367*8975f5c5SAndroid Build Coastguard Worker // Test that EndsWith works correctly for std::string arguments.
TEST_F(EndsWithTest,Strings)368*8975f5c5SAndroid Build Coastguard Worker TEST_F(EndsWithTest, Strings)
369*8975f5c5SAndroid Build Coastguard Worker {
370*8975f5c5SAndroid Build Coastguard Worker setMode(TestMode::STRING);
371*8975f5c5SAndroid Build Coastguard Worker runTest();
372*8975f5c5SAndroid Build Coastguard Worker }
373*8975f5c5SAndroid Build Coastguard Worker
374*8975f5c5SAndroid Build Coastguard Worker } // anonymous namespace
375