OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/wide_string_piece.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/string16.h" | |
9 #include "base/utf_string_conversions.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace base { | |
13 | |
14 TEST(WideStringPieceTest, CheckComparisonOperators) { | |
15 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("")) == | |
Paweł Hajdan Jr.
2011/08/02 22:03:18
How about ASSERT_EQ? Up to you.
| |
16 WideStringPiece(ASCIIToUTF16(""))); | |
17 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) == | |
18 WideStringPiece(ASCIIToUTF16("a"))); | |
19 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) == | |
20 WideStringPiece(ASCIIToUTF16("aa"))); | |
21 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == | |
22 WideStringPiece(ASCIIToUTF16(""))); | |
23 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("")) == | |
24 WideStringPiece(ASCIIToUTF16("a"))); | |
25 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == | |
26 WideStringPiece(ASCIIToUTF16("b"))); | |
27 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == | |
28 WideStringPiece(ASCIIToUTF16("aa"))); | |
29 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) == | |
30 WideStringPiece(ASCIIToUTF16("a"))); | |
31 | |
32 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("")) != | |
33 WideStringPiece(ASCIIToUTF16(""))); | |
34 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) != | |
35 WideStringPiece(ASCIIToUTF16("a"))); | |
36 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) != | |
37 WideStringPiece(ASCIIToUTF16("aa"))); | |
38 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != | |
39 WideStringPiece(ASCIIToUTF16(""))); | |
40 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("")) != | |
41 WideStringPiece(ASCIIToUTF16("a"))); | |
42 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != | |
43 WideStringPiece(ASCIIToUTF16("b"))); | |
44 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != | |
45 WideStringPiece(ASCIIToUTF16("aa"))); | |
46 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) != | |
47 WideStringPiece(ASCIIToUTF16("a"))); | |
48 | |
49 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) < | |
50 WideStringPiece(ASCIIToUTF16("b"))); | |
51 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) < | |
52 WideStringPiece(ASCIIToUTF16("aa"))); | |
53 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) < | |
54 WideStringPiece(ASCIIToUTF16("b"))); | |
55 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) < | |
56 WideStringPiece(ASCIIToUTF16("bb"))); | |
57 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) < | |
58 WideStringPiece(ASCIIToUTF16("a"))); | |
59 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) < | |
60 WideStringPiece(ASCIIToUTF16("a"))); | |
61 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) < | |
62 WideStringPiece(ASCIIToUTF16("a"))); | |
63 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) < | |
64 WideStringPiece(ASCIIToUTF16("aa"))); | |
65 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) < | |
66 WideStringPiece(ASCIIToUTF16("aa"))); | |
67 | |
68 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
69 WideStringPiece(ASCIIToUTF16("a"))); | |
70 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
71 WideStringPiece(ASCIIToUTF16("b"))); | |
72 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
73 WideStringPiece(ASCIIToUTF16("aa"))); | |
74 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
75 WideStringPiece(ASCIIToUTF16("b"))); | |
76 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
77 WideStringPiece(ASCIIToUTF16("bb"))); | |
78 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= | |
79 WideStringPiece(ASCIIToUTF16("a"))); | |
80 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
81 WideStringPiece(ASCIIToUTF16("a"))); | |
82 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= | |
83 WideStringPiece(ASCIIToUTF16("aa"))); | |
84 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) <= | |
85 WideStringPiece(ASCIIToUTF16("aa"))); | |
86 | |
87 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
88 WideStringPiece(ASCIIToUTF16("a"))); | |
89 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
90 WideStringPiece(ASCIIToUTF16("b"))); | |
91 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= | |
92 WideStringPiece(ASCIIToUTF16("aa"))); | |
93 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
94 WideStringPiece(ASCIIToUTF16("b"))); | |
95 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
96 WideStringPiece(ASCIIToUTF16("bb"))); | |
97 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= | |
98 WideStringPiece(ASCIIToUTF16("a"))); | |
99 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) <= | |
100 WideStringPiece(ASCIIToUTF16("a"))); | |
101 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= | |
102 WideStringPiece(ASCIIToUTF16("aa"))); | |
103 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) <= | |
104 WideStringPiece(ASCIIToUTF16("aa"))); | |
105 | |
106 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) >= | |
107 WideStringPiece(ASCIIToUTF16("b"))); | |
108 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) >= | |
109 WideStringPiece(ASCIIToUTF16("aa"))); | |
110 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) >= | |
111 WideStringPiece(ASCIIToUTF16("b"))); | |
112 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) >= | |
113 WideStringPiece(ASCIIToUTF16("bb"))); | |
114 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) >= | |
115 WideStringPiece(ASCIIToUTF16("a"))); | |
116 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) >= | |
117 WideStringPiece(ASCIIToUTF16("a"))); | |
118 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) >= | |
119 WideStringPiece(ASCIIToUTF16("a"))); | |
120 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) >= | |
121 WideStringPiece(ASCIIToUTF16("aa"))); | |
122 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("bb")) >= | |
123 WideStringPiece(ASCIIToUTF16("aa"))); | |
124 | |
125 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > | |
126 WideStringPiece(ASCIIToUTF16("a"))); | |
127 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > | |
128 WideStringPiece(ASCIIToUTF16("b"))); | |
129 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > | |
130 WideStringPiece(ASCIIToUTF16("aa"))); | |
131 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) > | |
132 WideStringPiece(ASCIIToUTF16("b"))); | |
133 ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) > | |
134 WideStringPiece(ASCIIToUTF16("bb"))); | |
135 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) > | |
136 WideStringPiece(ASCIIToUTF16("a"))); | |
137 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) > | |
138 WideStringPiece(ASCIIToUTF16("a"))); | |
139 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) > | |
140 WideStringPiece(ASCIIToUTF16("aa"))); | |
141 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("bb")) > | |
142 WideStringPiece(ASCIIToUTF16("aa"))); | |
143 | |
144 string16 x; | |
145 for (int i = 0; i < 256; i++) { | |
146 x += 'a'; | |
147 string16 y = x; | |
148 ASSERT_EQ(WideStringPiece(x), WideStringPiece(y)); | |
149 for (int j = 0; j < i; j++) { | |
150 string16 z = x; | |
151 z[j] = 'b'; // Differs in position 'j' | |
152 ASSERT_NE(WideStringPiece(x), WideStringPiece(y)); | |
153 } | |
154 } | |
155 } | |
156 | |
157 TEST(WideStringPieceTest, CheckSTL) { | |
158 string16 first = ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz"); | |
159 WideStringPiece a(first); | |
160 string16 second = ASCIIToUTF16("abc"); | |
161 WideStringPiece b(second.c_str()); | |
162 string16 third = ASCIIToUTF16("xyz"); | |
163 WideStringPiece c(third.c_str(), third.size()); | |
164 string16 fourth = ASCIIToUTF16("foobarrandomstuff"); | |
165 WideStringPiece d(fourth.c_str(), 6); | |
166 WideStringPiece e; | |
167 // Check some non-ascii characters. | |
168 string16 fifth(ASCIIToUTF16("123")); | |
169 fifth.push_back(0x0000); | |
170 fifth.push_back(0xd8c5); | |
171 fifth.push_back(0xdffe); | |
172 WideStringPiece f(fifth); | |
173 | |
174 ASSERT_EQ(a[6], 'g'); | |
175 ASSERT_EQ(b[0], 'a'); | |
176 ASSERT_EQ(c[2], 'z'); | |
177 ASSERT_EQ(f[3], '\0'); | |
178 ASSERT_EQ(f[5], static_cast<char16>(0xdffe)); | |
179 | |
180 ASSERT_EQ(*d.data(), 'f'); | |
181 ASSERT_EQ(d.data()[5], 'r'); | |
182 ASSERT_TRUE(e.data() == NULL); | |
183 | |
184 ASSERT_EQ(*a.begin(), 'a'); | |
185 ASSERT_EQ(*(b.begin() + 2), 'c'); | |
186 ASSERT_EQ(*(c.end() - 1), 'z'); | |
187 | |
188 ASSERT_EQ(*a.rbegin(), 'z'); | |
189 ASSERT_EQ(*(b.rbegin() + 2), 'a'); | |
190 ASSERT_EQ(*(c.rend() - 1), 'x'); | |
191 ASSERT_TRUE(a.rbegin() + 26 == a.rend()); | |
192 | |
193 ASSERT_EQ(a.size(), 26U); | |
194 ASSERT_EQ(b.size(), 3U); | |
195 ASSERT_EQ(c.size(), 3U); | |
196 ASSERT_EQ(d.size(), 6U); | |
197 ASSERT_EQ(e.size(), 0U); | |
198 ASSERT_EQ(f.size(), 6U); | |
199 | |
200 ASSERT_TRUE(!d.empty()); | |
201 ASSERT_TRUE(d.begin() != d.end()); | |
202 ASSERT_TRUE(d.begin() + 6 == d.end()); | |
203 | |
204 ASSERT_TRUE(e.empty()); | |
205 ASSERT_TRUE(e.begin() == e.end()); | |
206 | |
207 d.clear(); | |
208 ASSERT_EQ(d.size(), 0U); | |
209 ASSERT_TRUE(d.empty()); | |
210 ASSERT_TRUE(d.data() == NULL); | |
211 ASSERT_TRUE(d.begin() == d.end()); | |
212 | |
213 ASSERT_GE(a.max_size(), a.capacity()); | |
214 ASSERT_GE(a.capacity(), a.size()); | |
215 } | |
216 | |
217 TEST(WideStringPieceTest, CheckNULL) { | |
218 WideStringPiece s(NULL); | |
219 ASSERT_EQ(s.data(), (const char16*)NULL); | |
220 ASSERT_EQ(s.size(), 0U); | |
221 | |
222 s.set(NULL); | |
223 ASSERT_EQ(s.data(), (const char16*)NULL); | |
224 ASSERT_EQ(s.size(), 0U); | |
225 | |
226 string16 str = s.as_string16(); | |
227 ASSERT_EQ(s.data(), (const char16*)NULL); | |
228 ASSERT_EQ(s.size(), 0U); | |
229 } | |
230 | |
231 TEST(WideStringPieceTest, HeterogenousStringPieceEquals) { | |
232 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("hello")) == ASCIIToUTF16("hello")); | |
233 } | |
234 | |
235 TEST(WideStringPieceTest, CheckConversion) { | |
236 // Make sure that we can convert from UTF8 to UTF16 and back. We use a two | |
237 // byte character (G clef) to test this. | |
238 ASSERT_EQ( | |
239 UTF16ToUTF8(WideStringPiece(UTF8ToUTF16("\u1d11e")).as_string16()), | |
240 "\u1d11e"); | |
241 } | |
242 | |
243 } // namespace base | |
OLD | NEW |