OLD | NEW |
| (Empty) |
1 // Copyright 2016 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 "wtf/text/StringView.h" | |
6 | |
7 #include "testing/gtest/include/gtest/gtest.h" | |
8 #include "wtf/text/AtomicString.h" | |
9 #include "wtf/text/StringImpl.h" | |
10 #include "wtf/text/WTFString.h" | |
11 | |
12 namespace WTF { | |
13 | |
14 const char* kChars = "12345"; | |
15 const LChar* kChars8 = reinterpret_cast<const LChar*>(kChars); | |
16 const UChar* kChars16 = reinterpret_cast<const UChar*>(u"12345"); | |
17 | |
18 TEST(StringViewTest, ConstructionStringImpl8) | |
19 { | |
20 RefPtr<StringImpl> impl8Bit = StringImpl::create(kChars8, 5); | |
21 | |
22 // StringView(StringImpl*); | |
23 ASSERT_TRUE(StringView(impl8Bit.get()).is8Bit()); | |
24 EXPECT_FALSE(StringView(impl8Bit.get()).isNull()); | |
25 EXPECT_EQ(impl8Bit->characters8(), StringView(impl8Bit.get()).characters8())
; | |
26 EXPECT_EQ(impl8Bit->length(), StringView(impl8Bit.get()).length()); | |
27 EXPECT_STREQ(kChars, StringView(impl8Bit.get()).toString().utf8().data()); | |
28 | |
29 // StringView(StringImpl*, unsigned offset); | |
30 ASSERT_TRUE(StringView(impl8Bit.get(), 2).is8Bit()); | |
31 EXPECT_FALSE(StringView(impl8Bit.get(), 2).isNull()); | |
32 EXPECT_EQ(impl8Bit->characters8() + 2, StringView(impl8Bit.get(), 2).charact
ers8()); | |
33 EXPECT_EQ(3u, StringView(impl8Bit.get(), 2).length()); | |
34 EXPECT_EQ(StringView("345"), StringView(impl8Bit.get(), 2)); | |
35 EXPECT_STREQ("345", StringView(impl8Bit.get(), 2).toString().utf8().data()); | |
36 | |
37 // StringView(StringImpl*, unsigned offset, unsigned length); | |
38 ASSERT_TRUE(StringView(impl8Bit.get(), 2, 1).is8Bit()); | |
39 EXPECT_FALSE(StringView(impl8Bit.get(), 2, 1).isNull()); | |
40 EXPECT_EQ(impl8Bit->characters8() + 2, StringView(impl8Bit.get(), 2, 1).char
acters8()); | |
41 EXPECT_EQ(1u, StringView(impl8Bit.get(), 2, 1).length()); | |
42 EXPECT_EQ(StringView("3"), StringView(impl8Bit.get(), 2, 1)); | |
43 EXPECT_STREQ("3", StringView(impl8Bit.get(), 2, 1).toString().utf8().data())
; | |
44 } | |
45 | |
46 TEST(StringViewTest, ConstructionStringImpl16) | |
47 { | |
48 RefPtr<StringImpl> impl16Bit = StringImpl::create(kChars16, 5); | |
49 | |
50 // StringView(StringImpl*); | |
51 ASSERT_FALSE(StringView(impl16Bit.get()).is8Bit()); | |
52 EXPECT_FALSE(StringView(impl16Bit.get()).isNull()); | |
53 EXPECT_EQ(impl16Bit->characters16(), StringView(impl16Bit.get()).characters1
6()); | |
54 EXPECT_EQ(impl16Bit->length(), StringView(impl16Bit.get()).length()); | |
55 EXPECT_STREQ(kChars, StringView(impl16Bit.get()).toString().utf8().data()); | |
56 | |
57 // StringView(StringImpl*, unsigned offset); | |
58 ASSERT_FALSE(StringView(impl16Bit.get(), 2).is8Bit()); | |
59 EXPECT_FALSE(StringView(impl16Bit.get(), 2).isNull()); | |
60 EXPECT_EQ(impl16Bit->characters16() + 2, StringView(impl16Bit.get(), 2).char
acters16()); | |
61 EXPECT_EQ(3u, StringView(impl16Bit.get(), 2).length()); | |
62 EXPECT_EQ(StringView("345"), StringView(impl16Bit.get(), 2)); | |
63 EXPECT_STREQ("345", StringView(impl16Bit.get(), 2).toString().utf8().data())
; | |
64 | |
65 // StringView(StringImpl*, unsigned offset, unsigned length); | |
66 ASSERT_FALSE(StringView(impl16Bit.get(), 2, 1).is8Bit()); | |
67 EXPECT_FALSE(StringView(impl16Bit.get(), 2, 1).isNull()); | |
68 EXPECT_EQ(impl16Bit->characters16() + 2, StringView(impl16Bit.get(), 2, 1).c
haracters16()); | |
69 EXPECT_EQ(1u, StringView(impl16Bit.get(), 2, 1).length()); | |
70 EXPECT_EQ(StringView("3"), StringView(impl16Bit.get(), 2, 1)); | |
71 EXPECT_STREQ("3", StringView(impl16Bit.get(), 2, 1).toString().utf8().data()
); | |
72 } | |
73 | |
74 TEST(StringViewTest, ConstructionString8) | |
75 { | |
76 String string8Bit = String(StringImpl::create(kChars8, 5)); | |
77 | |
78 // StringView(const String&); | |
79 ASSERT_TRUE(StringView(string8Bit).is8Bit()); | |
80 EXPECT_FALSE(StringView(string8Bit).isNull()); | |
81 EXPECT_EQ(string8Bit.characters8(), StringView(string8Bit).characters8()); | |
82 EXPECT_EQ(string8Bit.length(), StringView(string8Bit).length()); | |
83 EXPECT_STREQ(kChars, StringView(string8Bit).toString().utf8().data()); | |
84 | |
85 // StringView(const String&, unsigned offset); | |
86 ASSERT_TRUE(StringView(string8Bit, 2).is8Bit()); | |
87 EXPECT_FALSE(StringView(string8Bit, 2).isNull()); | |
88 EXPECT_EQ(string8Bit.characters8() + 2, StringView(string8Bit, 2).characters
8()); | |
89 EXPECT_EQ(3u, StringView(string8Bit, 2).length()); | |
90 EXPECT_EQ(StringView("345"), StringView(string8Bit, 2)); | |
91 EXPECT_STREQ("345", StringView(string8Bit, 2).toString().utf8().data()); | |
92 | |
93 // StringView(const String&, unsigned offset, unsigned length); | |
94 ASSERT_TRUE(StringView(string8Bit, 2, 1).is8Bit()); | |
95 EXPECT_FALSE(StringView(string8Bit, 2, 1).isNull()); | |
96 EXPECT_EQ(string8Bit.characters8() + 2, StringView(string8Bit, 2, 1).charact
ers8()); | |
97 EXPECT_EQ(1u, StringView(string8Bit, 2, 1).length()); | |
98 EXPECT_EQ(StringView("3"), StringView(string8Bit, 2, 1)); | |
99 EXPECT_STREQ("3", StringView(string8Bit, 2, 1).toString().utf8().data()); | |
100 } | |
101 | |
102 TEST(StringViewTest, ConstructionString16) | |
103 { | |
104 String string16Bit = String(StringImpl::create(kChars16, 5)); | |
105 | |
106 // StringView(const String&); | |
107 ASSERT_FALSE(StringView(string16Bit).is8Bit()); | |
108 EXPECT_FALSE(StringView(string16Bit).isNull()); | |
109 EXPECT_EQ(string16Bit.characters16(), StringView(string16Bit).characters16()
); | |
110 EXPECT_EQ(string16Bit.length(), StringView(string16Bit).length()); | |
111 EXPECT_STREQ(kChars, StringView(string16Bit).toString().utf8().data()); | |
112 | |
113 // StringView(const String&, unsigned offset); | |
114 ASSERT_FALSE(StringView(string16Bit, 2).is8Bit()); | |
115 EXPECT_FALSE(StringView(string16Bit, 2).isNull()); | |
116 EXPECT_EQ(string16Bit.characters16() + 2, StringView(string16Bit, 2).charact
ers16()); | |
117 EXPECT_EQ(3u, StringView(string16Bit, 2).length()); | |
118 EXPECT_EQ(StringView("345"), StringView(string16Bit, 2)); | |
119 EXPECT_STREQ("345", StringView(string16Bit, 2).toString().utf8().data()); | |
120 | |
121 // StringView(const String&, unsigned offset, unsigned length); | |
122 ASSERT_FALSE(StringView(string16Bit, 2, 1).is8Bit()); | |
123 EXPECT_FALSE(StringView(string16Bit, 2, 1).isNull()); | |
124 EXPECT_EQ(string16Bit.characters16() + 2, StringView(string16Bit, 2, 1).char
acters16()); | |
125 EXPECT_EQ(1u, StringView(string16Bit, 2, 1).length()); | |
126 EXPECT_EQ(StringView("3"), StringView(string16Bit, 2, 1)); | |
127 EXPECT_STREQ("3", StringView(string16Bit, 2, 1).toString().utf8().data()); | |
128 } | |
129 | |
130 TEST(StringViewTest, ConstructionAtomicString8) | |
131 { | |
132 AtomicString atom8Bit = AtomicString(StringImpl::create(kChars8, 5)); | |
133 | |
134 // StringView(const AtomicString&); | |
135 ASSERT_TRUE(StringView(atom8Bit).is8Bit()); | |
136 EXPECT_FALSE(StringView(atom8Bit).isNull()); | |
137 EXPECT_EQ(atom8Bit.characters8(), StringView(atom8Bit).characters8()); | |
138 EXPECT_EQ(atom8Bit.length(), StringView(atom8Bit).length()); | |
139 EXPECT_STREQ(kChars, StringView(atom8Bit).toString().utf8().data()); | |
140 | |
141 // StringView(const AtomicString&, unsigned offset); | |
142 ASSERT_TRUE(StringView(atom8Bit, 2).is8Bit()); | |
143 EXPECT_FALSE(StringView(atom8Bit, 2).isNull()); | |
144 EXPECT_EQ(atom8Bit.characters8() + 2, StringView(atom8Bit, 2).characters8())
; | |
145 EXPECT_EQ(3u, StringView(atom8Bit, 2).length()); | |
146 EXPECT_EQ(StringView("345"), StringView(atom8Bit, 2)); | |
147 EXPECT_STREQ("345", StringView(atom8Bit, 2).toString().utf8().data()); | |
148 | |
149 // StringView(const AtomicString&, unsigned offset, unsigned length); | |
150 ASSERT_TRUE(StringView(atom8Bit, 2, 1).is8Bit()); | |
151 EXPECT_FALSE(StringView(atom8Bit, 2, 1).isNull()); | |
152 EXPECT_EQ(atom8Bit.characters8() + 2, StringView(atom8Bit, 2, 1).characters8
()); | |
153 EXPECT_EQ(1u, StringView(atom8Bit, 2, 1).length()); | |
154 EXPECT_EQ(StringView("3"), StringView(atom8Bit, 2, 1)); | |
155 EXPECT_STREQ("3", StringView(atom8Bit, 2, 1).toString().utf8().data()); | |
156 } | |
157 | |
158 TEST(StringViewTest, ConstructionAtomicString16) | |
159 { | |
160 AtomicString atom16Bit = AtomicString(StringImpl::create(kChars16, 5)); | |
161 | |
162 // StringView(const AtomicString&); | |
163 ASSERT_FALSE(StringView(atom16Bit).is8Bit()); | |
164 EXPECT_FALSE(StringView(atom16Bit).isNull()); | |
165 EXPECT_EQ(atom16Bit.characters16(), StringView(atom16Bit).characters16()); | |
166 EXPECT_EQ(atom16Bit.length(), StringView(atom16Bit).length()); | |
167 EXPECT_STREQ(kChars, StringView(atom16Bit).toString().utf8().data()); | |
168 | |
169 // StringView(const AtomicString&, unsigned offset); | |
170 ASSERT_FALSE(StringView(atom16Bit, 2).is8Bit()); | |
171 EXPECT_FALSE(StringView(atom16Bit, 2).isNull()); | |
172 EXPECT_EQ(atom16Bit.characters16() + 2, StringView(atom16Bit, 2).characters1
6()); | |
173 EXPECT_EQ(3u, StringView(atom16Bit, 2).length()); | |
174 EXPECT_EQ(StringView("345"), StringView(atom16Bit, 2)); | |
175 EXPECT_STREQ("345", StringView(atom16Bit, 2).toString().utf8().data()); | |
176 | |
177 // StringView(const AtomicString&, unsigned offset, unsigned length); | |
178 ASSERT_FALSE(StringView(atom16Bit, 2, 1).is8Bit()); | |
179 EXPECT_FALSE(StringView(atom16Bit, 2, 1).isNull()); | |
180 EXPECT_EQ(atom16Bit.characters16() + 2, StringView(atom16Bit, 2, 1).characte
rs16()); | |
181 EXPECT_EQ(1u, StringView(atom16Bit, 2, 1).length()); | |
182 EXPECT_EQ(StringView("3"), StringView(atom16Bit, 2, 1)); | |
183 EXPECT_STREQ("3", StringView(atom16Bit, 2, 1).toString().utf8().data()); | |
184 } | |
185 | |
186 TEST(StringViewTest, ConstructionStringView8) | |
187 { | |
188 StringView view8Bit = StringView(kChars8, 5); | |
189 | |
190 // StringView(StringView&); | |
191 ASSERT_TRUE(StringView(view8Bit).is8Bit()); | |
192 EXPECT_FALSE(StringView(view8Bit).isNull()); | |
193 EXPECT_EQ(view8Bit.characters8(), StringView(view8Bit).characters8()); | |
194 EXPECT_EQ(view8Bit.length(), StringView(view8Bit).length()); | |
195 EXPECT_STREQ(kChars, StringView(view8Bit).toString().utf8().data()); | |
196 | |
197 // StringView(const StringView&, unsigned offset); | |
198 ASSERT_TRUE(StringView(view8Bit, 2).is8Bit()); | |
199 EXPECT_FALSE(StringView(view8Bit, 2).isNull()); | |
200 EXPECT_EQ(view8Bit.characters8() + 2, StringView(view8Bit, 2).characters8())
; | |
201 EXPECT_EQ(3u, StringView(view8Bit, 2).length()); | |
202 EXPECT_EQ(StringView("345"), StringView(view8Bit, 2)); | |
203 EXPECT_STREQ("345", StringView(view8Bit, 2).toString().utf8().data()); | |
204 | |
205 // StringView(const StringView&, unsigned offset, unsigned length); | |
206 ASSERT_TRUE(StringView(view8Bit, 2, 1).is8Bit()); | |
207 EXPECT_FALSE(StringView(view8Bit, 2, 1).isNull()); | |
208 EXPECT_EQ(view8Bit.characters8() + 2, StringView(view8Bit, 2, 1).characters8
()); | |
209 EXPECT_EQ(1u, StringView(view8Bit, 2, 1).length()); | |
210 EXPECT_EQ(StringView("3"), StringView(view8Bit, 2, 1)); | |
211 EXPECT_STREQ("3", StringView(view8Bit, 2, 1).toString().utf8().data()); | |
212 } | |
213 | |
214 TEST(StringViewTest, ConstructionStringView16) | |
215 { | |
216 StringView view16Bit = StringView(kChars16, 5); | |
217 | |
218 // StringView(StringView&); | |
219 ASSERT_FALSE(StringView(view16Bit).is8Bit()); | |
220 EXPECT_FALSE(StringView(view16Bit).isNull()); | |
221 EXPECT_EQ(view16Bit.characters16(), StringView(view16Bit).characters16()); | |
222 EXPECT_EQ(view16Bit.length(), StringView(view16Bit).length()); | |
223 EXPECT_EQ(kChars, StringView(view16Bit).toString()); | |
224 | |
225 // StringView(const StringView&, unsigned offset); | |
226 ASSERT_FALSE(StringView(view16Bit, 2).is8Bit()); | |
227 EXPECT_FALSE(StringView(view16Bit, 2).isNull()); | |
228 EXPECT_EQ(view16Bit.characters16() + 2, StringView(view16Bit, 2).characters1
6()); | |
229 EXPECT_EQ(3u, StringView(view16Bit, 2).length()); | |
230 EXPECT_EQ(StringView("345"), StringView(view16Bit, 2)); | |
231 EXPECT_STREQ("345", StringView(view16Bit, 2).toString().utf8().data()); | |
232 | |
233 // StringView(const StringView&, unsigned offset, unsigned length); | |
234 ASSERT_FALSE(StringView(view16Bit, 2, 1).is8Bit()); | |
235 EXPECT_FALSE(StringView(view16Bit, 2, 1).isNull()); | |
236 EXPECT_EQ(view16Bit.characters16() + 2, StringView(view16Bit, 2, 1).characte
rs16()); | |
237 EXPECT_EQ(1u, StringView(view16Bit, 2, 1).length()); | |
238 EXPECT_EQ(StringView("3"), StringView(view16Bit, 2, 1)); | |
239 EXPECT_STREQ("3", StringView(view16Bit, 2, 1).toString().utf8().data()); | |
240 } | |
241 | |
242 TEST(StringViewTest, ConstructionLiteral8) | |
243 { | |
244 // StringView(const LChar* chars); | |
245 ASSERT_TRUE(StringView(kChars8).is8Bit()); | |
246 EXPECT_FALSE(StringView(kChars8).isNull()); | |
247 EXPECT_EQ(kChars8, StringView(kChars8).characters8()); | |
248 EXPECT_EQ(5u, StringView(kChars8).length()); | |
249 EXPECT_STREQ(kChars, StringView(kChars8).toString().utf8().data()); | |
250 | |
251 // StringView(const char* chars); | |
252 ASSERT_TRUE(StringView(kChars).is8Bit()); | |
253 EXPECT_FALSE(StringView(kChars).isNull()); | |
254 EXPECT_EQ(kChars8, StringView(kChars).characters8()); | |
255 EXPECT_EQ(5u, StringView(kChars).length()); | |
256 EXPECT_STREQ(kChars, StringView(kChars).toString().utf8().data()); | |
257 | |
258 // StringView(const LChar* chars, unsigned length); | |
259 ASSERT_TRUE(StringView(kChars8, 2).is8Bit()); | |
260 EXPECT_FALSE(StringView(kChars8, 2).isNull()); | |
261 EXPECT_EQ(2u, StringView(kChars8, 2).length()); | |
262 EXPECT_EQ(StringView("12"), StringView(kChars8, 2)); | |
263 EXPECT_STREQ("12", StringView(kChars8, 2).toString().utf8().data()); | |
264 | |
265 // StringView(const char* chars, unsigned length); | |
266 ASSERT_TRUE(StringView(kChars, 2).is8Bit()); | |
267 EXPECT_FALSE(StringView(kChars, 2).isNull()); | |
268 EXPECT_EQ(2u, StringView(kChars, 2).length()); | |
269 EXPECT_EQ(StringView("12"), StringView(kChars, 2)); | |
270 EXPECT_STREQ("12", StringView(kChars, 2).toString().utf8().data()); | |
271 } | |
272 | |
273 TEST(StringViewTest, ConstructionLiteral16) | |
274 { | |
275 // StringView(const UChar* chars); | |
276 ASSERT_FALSE(StringView(kChars16).is8Bit()); | |
277 EXPECT_FALSE(StringView(kChars16).isNull()); | |
278 EXPECT_EQ(kChars16, StringView(kChars16).characters16()); | |
279 EXPECT_EQ(5u, StringView(kChars16).length()); | |
280 EXPECT_EQ(String(kChars16), StringView(kChars16).toString().utf8().data()); | |
281 | |
282 // StringView(const UChar* chars, unsigned length); | |
283 ASSERT_FALSE(StringView(kChars16, 2).is8Bit()); | |
284 EXPECT_FALSE(StringView(kChars16, 2).isNull()); | |
285 EXPECT_EQ(kChars16, StringView(kChars16, 2).characters16()); | |
286 EXPECT_EQ(StringView("12"), StringView(kChars16, 2)); | |
287 EXPECT_EQ(StringView(reinterpret_cast<const UChar*>(u"12")), StringView(kCha
rs16, 2)); | |
288 EXPECT_EQ(2u, StringView(kChars16, 2).length()); | |
289 EXPECT_EQ(String("12"), StringView(kChars16, 2).toString()); | |
290 } | |
291 | |
292 TEST(StringViewTest, IsEmpty) | |
293 { | |
294 EXPECT_FALSE(StringView(kChars).isEmpty()); | |
295 EXPECT_TRUE(StringView(kChars, 0).isEmpty()); | |
296 EXPECT_FALSE(StringView(String(kChars)).isEmpty()); | |
297 EXPECT_TRUE(StringView(String(kChars), 5).isEmpty()); | |
298 EXPECT_TRUE(StringView(String(kChars), 4, 0).isEmpty()); | |
299 EXPECT_TRUE(StringView().isEmpty()); | |
300 EXPECT_TRUE(StringView("").isEmpty()); | |
301 EXPECT_TRUE(StringView(reinterpret_cast<const UChar*>(u"")).isEmpty()); | |
302 EXPECT_FALSE(StringView(kChars16).isEmpty()); | |
303 } | |
304 | |
305 TEST(StringViewTest, ToString) | |
306 { | |
307 // Empty string optimization. | |
308 EXPECT_EQ(emptyString().impl(), StringView("").toString().impl()); | |
309 // NOTE: All the construction tests also check toString(). | |
310 } | |
311 | |
312 TEST(StringViewTest, NullString) | |
313 { | |
314 EXPECT_TRUE(StringView().isNull()); | |
315 EXPECT_TRUE(StringView(String()).isNull()); | |
316 EXPECT_TRUE(StringView(AtomicString()).isNull()); | |
317 EXPECT_TRUE(StringView(static_cast<const char*>(nullptr)).isNull()); | |
318 StringView view(kChars); | |
319 EXPECT_FALSE(view.isNull()); | |
320 view.clear(); | |
321 EXPECT_TRUE(view.isNull()); | |
322 EXPECT_EQ(String(), StringView()); | |
323 EXPECT_TRUE(StringView().toString().isNull()); | |
324 } | |
325 | |
326 } // namespace WTF | |
OLD | NEW |