xref: /aosp_15_r20/frameworks/minikin/tests/unittest/StringPieceTest.cpp (revision 834a2baab5fdfc28e9a428ee87c7ea8f6a06a53d)
1*834a2baaSAndroid Build Coastguard Worker /*
2*834a2baaSAndroid Build Coastguard Worker  * Copyright (C) 2017 The Android Open Source Project
3*834a2baaSAndroid Build Coastguard Worker  *
4*834a2baaSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*834a2baaSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*834a2baaSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*834a2baaSAndroid Build Coastguard Worker  *
8*834a2baaSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*834a2baaSAndroid Build Coastguard Worker  *
10*834a2baaSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*834a2baaSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*834a2baaSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*834a2baaSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*834a2baaSAndroid Build Coastguard Worker  * limitations under the License.
15*834a2baaSAndroid Build Coastguard Worker  */
16*834a2baaSAndroid Build Coastguard Worker 
17*834a2baaSAndroid Build Coastguard Worker #include "StringPiece.h"
18*834a2baaSAndroid Build Coastguard Worker 
19*834a2baaSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*834a2baaSAndroid Build Coastguard Worker 
21*834a2baaSAndroid Build Coastguard Worker namespace minikin {
22*834a2baaSAndroid Build Coastguard Worker 
TEST(StringPieceTest,basics)23*834a2baaSAndroid Build Coastguard Worker TEST(StringPieceTest, basics) {
24*834a2baaSAndroid Build Coastguard Worker     {
25*834a2baaSAndroid Build Coastguard Worker         StringPiece s(nullptr);
26*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(nullptr, s.data());
27*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(0u, s.size());
28*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(s.empty());
29*834a2baaSAndroid Build Coastguard Worker     }
30*834a2baaSAndroid Build Coastguard Worker     {
31*834a2baaSAndroid Build Coastguard Worker         StringPiece s("");
32*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
33*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(0u, s.size());
34*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(s.empty());
35*834a2baaSAndroid Build Coastguard Worker     }
36*834a2baaSAndroid Build Coastguard Worker     {
37*834a2baaSAndroid Build Coastguard Worker         StringPiece s("", 0);
38*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
39*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(0u, s.size());
40*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(s.empty());
41*834a2baaSAndroid Build Coastguard Worker     }
42*834a2baaSAndroid Build Coastguard Worker     {
43*834a2baaSAndroid Build Coastguard Worker         StringPiece s("abcde");
44*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
45*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(5u, s.size());
46*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(s.empty());
47*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("abcde", s);
48*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE("abc", s);
49*834a2baaSAndroid Build Coastguard Worker     }
50*834a2baaSAndroid Build Coastguard Worker     {
51*834a2baaSAndroid Build Coastguard Worker         StringPiece s("abcde", 5);
52*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
53*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(5u, s.size());
54*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(s.empty());
55*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("abcde", s);
56*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE("abc", s);
57*834a2baaSAndroid Build Coastguard Worker     }
58*834a2baaSAndroid Build Coastguard Worker     {
59*834a2baaSAndroid Build Coastguard Worker         StringPiece s("abcde", 3);
60*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
61*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(3u, s.size());
62*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(s.empty());
63*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("abc", s);
64*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE("abcde", s);
65*834a2baaSAndroid Build Coastguard Worker     }
66*834a2baaSAndroid Build Coastguard Worker     {
67*834a2baaSAndroid Build Coastguard Worker         const char* kText = "abcde";
68*834a2baaSAndroid Build Coastguard Worker         StringPiece s(kText + 2, 3);
69*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
70*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(3u, s.size());
71*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(s.empty());
72*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("cde", s);
73*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE("abcde", s);
74*834a2baaSAndroid Build Coastguard Worker     }
75*834a2baaSAndroid Build Coastguard Worker     {
76*834a2baaSAndroid Build Coastguard Worker         const char* kText = "abcde";
77*834a2baaSAndroid Build Coastguard Worker         StringPiece s(kText + 2);
78*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE(nullptr, s.data());
79*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ(3u, s.size());
80*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(s.empty());
81*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("cde", s);
82*834a2baaSAndroid Build Coastguard Worker         EXPECT_NE("abcde", s);
83*834a2baaSAndroid Build Coastguard Worker     }
84*834a2baaSAndroid Build Coastguard Worker }
85*834a2baaSAndroid Build Coastguard Worker 
TEST(StringPieceTest,substr)86*834a2baaSAndroid Build Coastguard Worker TEST(StringPieceTest, substr) {
87*834a2baaSAndroid Build Coastguard Worker     StringPiece s("abcde");
88*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("", s.substr(0, 0));
89*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("a", s.substr(0, 1));
90*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("abc", s.substr(0, 3));
91*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("cde", s.substr(2, 3));
92*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("", s.substr(2, 0));
93*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ("", s.substr(5, 0));
94*834a2baaSAndroid Build Coastguard Worker }
95*834a2baaSAndroid Build Coastguard Worker 
TEST(StringPieceTest,find)96*834a2baaSAndroid Build Coastguard Worker TEST(StringPieceTest, find) {
97*834a2baaSAndroid Build Coastguard Worker     StringPiece s("mississippi");
98*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(1u, s.find(0, 'i'));
99*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(1u, s.find(1, 'i'));
100*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(4u, s.find(2, 'i'));
101*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(4u, s.find(3, 'i'));
102*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(4u, s.find(4, 'i'));
103*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(7u, s.find(5, 'i'));
104*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(7u, s.find(6, 'i'));
105*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(7u, s.find(7, 'i'));
106*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(10u, s.find(8, 'i'));
107*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(10u, s.find(9, 'i'));
108*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(10u, s.find(10, 'i'));
109*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(11u, s.find(11, 'i'));
110*834a2baaSAndroid Build Coastguard Worker 
111*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(11u, s.find(12, 'i'));  // search index is out of bounds.
112*834a2baaSAndroid Build Coastguard Worker }
113*834a2baaSAndroid Build Coastguard Worker 
TEST(StringPieceTest,find_empty)114*834a2baaSAndroid Build Coastguard Worker TEST(StringPieceTest, find_empty) {
115*834a2baaSAndroid Build Coastguard Worker     StringPiece s("");
116*834a2baaSAndroid Build Coastguard Worker     EXPECT_EQ(0u, s.find(0, 'a'));
117*834a2baaSAndroid Build Coastguard Worker }
118*834a2baaSAndroid Build Coastguard Worker 
TEST(SplitIteratorTest,split)119*834a2baaSAndroid Build Coastguard Worker TEST(SplitIteratorTest, split) {
120*834a2baaSAndroid Build Coastguard Worker     {
121*834a2baaSAndroid Build Coastguard Worker         StringPiece s("");
122*834a2baaSAndroid Build Coastguard Worker         SplitIterator it(s, ',');
123*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(it.hasNext());
124*834a2baaSAndroid Build Coastguard Worker     }
125*834a2baaSAndroid Build Coastguard Worker     {
126*834a2baaSAndroid Build Coastguard Worker         StringPiece s("abcde");
127*834a2baaSAndroid Build Coastguard Worker         SplitIterator it(s, ',');
128*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
129*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("abcde", it.next());
130*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(it.hasNext());
131*834a2baaSAndroid Build Coastguard Worker     }
132*834a2baaSAndroid Build Coastguard Worker     {
133*834a2baaSAndroid Build Coastguard Worker         StringPiece s("a,bb,ccc,dddd,eeeee");
134*834a2baaSAndroid Build Coastguard Worker         SplitIterator it(s, ',');
135*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
136*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("a", it.next());
137*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
138*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("bb", it.next());
139*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
140*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("ccc", it.next());
141*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
142*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("dddd", it.next());
143*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
144*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("eeeee", it.next());
145*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(it.hasNext());
146*834a2baaSAndroid Build Coastguard Worker     }
147*834a2baaSAndroid Build Coastguard Worker     {
148*834a2baaSAndroid Build Coastguard Worker         StringPiece s(",,,,");
149*834a2baaSAndroid Build Coastguard Worker         SplitIterator it(s, ',');
150*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
151*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
152*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
153*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
154*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
155*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
156*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
157*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
158*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
159*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
160*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(it.hasNext());
161*834a2baaSAndroid Build Coastguard Worker     }
162*834a2baaSAndroid Build Coastguard Worker     {
163*834a2baaSAndroid Build Coastguard Worker         StringPiece s(",a,,b,");
164*834a2baaSAndroid Build Coastguard Worker         SplitIterator it(s, ',');
165*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
166*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
167*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
168*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("a", it.next());
169*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
170*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
171*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
172*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("b", it.next());
173*834a2baaSAndroid Build Coastguard Worker         EXPECT_TRUE(it.hasNext());
174*834a2baaSAndroid Build Coastguard Worker         EXPECT_EQ("", it.next());
175*834a2baaSAndroid Build Coastguard Worker         EXPECT_FALSE(it.hasNext());
176*834a2baaSAndroid Build Coastguard Worker     }
177*834a2baaSAndroid Build Coastguard Worker }
178*834a2baaSAndroid Build Coastguard Worker 
179*834a2baaSAndroid Build Coastguard Worker }  // namespace minikin
180