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 #define CMP_Y(op, x, y) \ | |
Paweł Hajdan Jr.
2011/08/02 17:10:33
Why do we need those? Gtest makes it possible to d
Garrett Casto
2011/08/02 21:52:28
This was because I copied the meat of this test fr
| |
16 ASSERT_TRUE( (WideStringPiece((x)) op WideStringPiece((y)))); \ | |
17 | |
18 #define CMP_N(op, x, y) \ | |
19 ASSERT_FALSE(WideStringPiece((x)) op WideStringPiece((y))); \ | |
20 | |
21 CMP_Y(==, ASCIIToUTF16(""), ASCIIToUTF16("")); | |
22 CMP_Y(==, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
23 CMP_Y(==, ASCIIToUTF16("aa"), ASCIIToUTF16("aa")); | |
24 CMP_N(==, ASCIIToUTF16("a"), ASCIIToUTF16("")); | |
25 CMP_N(==, ASCIIToUTF16(""), ASCIIToUTF16("a")); | |
26 CMP_N(==, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
27 CMP_N(==, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
28 CMP_N(==, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
29 | |
30 CMP_N(!=, ASCIIToUTF16(""), ASCIIToUTF16("")); | |
31 CMP_N(!=, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
32 CMP_N(!=, ASCIIToUTF16("aa"), ASCIIToUTF16("aa")); | |
33 CMP_Y(!=, ASCIIToUTF16("a"), ASCIIToUTF16("")); | |
34 CMP_Y(!=, ASCIIToUTF16(""), ASCIIToUTF16("a")); | |
35 CMP_Y(!=, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
36 CMP_Y(!=, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
37 CMP_Y(!=, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
38 | |
39 CMP_Y(<, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
40 CMP_Y(<, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
41 CMP_Y(<, ASCIIToUTF16("aa"), ASCIIToUTF16("b")); | |
42 CMP_Y(<, ASCIIToUTF16("aa"), ASCIIToUTF16("bb")); | |
43 CMP_N(<, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
44 CMP_N(<, ASCIIToUTF16("b"), ASCIIToUTF16("a")); | |
45 CMP_N(<, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
46 CMP_N(<, ASCIIToUTF16("b"), ASCIIToUTF16("aa")); | |
47 CMP_N(<, ASCIIToUTF16("bb"), ASCIIToUTF16("aa")); | |
48 | |
49 CMP_Y(<=, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
50 CMP_Y(<=, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
51 CMP_Y(<=, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
52 CMP_Y(<=, ASCIIToUTF16("aa"), ASCIIToUTF16("b")); | |
53 CMP_Y(<=, ASCIIToUTF16("aa"), ASCIIToUTF16("bb")); | |
54 CMP_N(<=, ASCIIToUTF16("b"), ASCIIToUTF16("a")); | |
55 CMP_N(<=, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
56 CMP_N(<=, ASCIIToUTF16("b"), ASCIIToUTF16("aa")); | |
57 CMP_N(<=, ASCIIToUTF16("bb"), ASCIIToUTF16("aa")); | |
58 | |
59 CMP_N(>=, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
60 CMP_N(>=, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
61 CMP_N(>=, ASCIIToUTF16("aa"), ASCIIToUTF16("b")); | |
62 CMP_N(>=, ASCIIToUTF16("aa"), ASCIIToUTF16("bb")); | |
63 CMP_Y(>=, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
64 CMP_Y(>=, ASCIIToUTF16("b"), ASCIIToUTF16("a")); | |
65 CMP_Y(>=, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
66 CMP_Y(>=, ASCIIToUTF16("b"), ASCIIToUTF16("aa")); | |
67 CMP_Y(>=, ASCIIToUTF16("bb"), ASCIIToUTF16("aa")); | |
68 | |
69 CMP_N(>, ASCIIToUTF16("a"), ASCIIToUTF16("a")); | |
70 CMP_N(>, ASCIIToUTF16("a"), ASCIIToUTF16("b")); | |
71 CMP_N(>, ASCIIToUTF16("a"), ASCIIToUTF16("aa")); | |
72 CMP_N(>, ASCIIToUTF16("aa"), ASCIIToUTF16("b")); | |
73 CMP_N(>, ASCIIToUTF16("aa"), ASCIIToUTF16("bb")); | |
74 CMP_Y(>, ASCIIToUTF16("b"), ASCIIToUTF16("a")); | |
75 CMP_Y(>, ASCIIToUTF16("aa"), ASCIIToUTF16("a")); | |
76 CMP_Y(>, ASCIIToUTF16("b"), ASCIIToUTF16("aa")); | |
77 CMP_Y(>, ASCIIToUTF16("bb"), ASCIIToUTF16("aa")); | |
78 | |
79 string16 x; | |
80 for (int i = 0; i < 256; i++) { | |
81 x += 'a'; | |
82 string16 y = x; | |
83 CMP_Y(==, x, y); | |
84 for (int j = 0; j < i; j++) { | |
85 string16 z = x; | |
86 z[j] = 'b'; // Differs in position 'j' | |
87 CMP_N(==, x, z); | |
88 } | |
89 } | |
90 | |
91 #undef CMP_Y | |
92 #undef CMP_N | |
93 } | |
94 | |
95 TEST(WideStringPieceTest, CheckSTL) { | |
96 string16 first = ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz"); | |
97 WideStringPiece a(first); | |
98 string16 second = ASCIIToUTF16("abc"); | |
99 WideStringPiece b(second.c_str()); | |
100 string16 third = ASCIIToUTF16("xyz"); | |
101 WideStringPiece c(third.c_str(), third.size()); | |
102 string16 fourth = ASCIIToUTF16("foobarrandomstuff"); | |
103 WideStringPiece d(fourth.c_str(), 6); | |
104 WideStringPiece e; | |
105 // Check some non-ascii characters. | |
106 string16 fifth(ASCIIToUTF16("123")); | |
107 fifth.push_back(0x0000); | |
108 fifth.push_back(0xd8c5); | |
109 fifth.push_back(0xdffe); | |
110 WideStringPiece f(fifth); | |
111 | |
112 ASSERT_EQ(a[6], 'g'); | |
113 ASSERT_EQ(b[0], 'a'); | |
114 ASSERT_EQ(c[2], 'z'); | |
115 ASSERT_EQ(f[3], '\0'); | |
116 ASSERT_EQ(f[5], static_cast<char16>(0xdffe)); | |
117 | |
118 ASSERT_EQ(*d.data(), 'f'); | |
119 ASSERT_EQ(d.data()[5], 'r'); | |
120 ASSERT_TRUE(e.data() == NULL); | |
121 | |
122 ASSERT_EQ(*a.begin(), 'a'); | |
123 ASSERT_EQ(*(b.begin() + 2), 'c'); | |
124 ASSERT_EQ(*(c.end() - 1), 'z'); | |
125 | |
126 ASSERT_EQ(*a.rbegin(), 'z'); | |
127 ASSERT_EQ(*(b.rbegin() + 2), 'a'); | |
128 ASSERT_EQ(*(c.rend() - 1), 'x'); | |
129 ASSERT_TRUE(a.rbegin() + 26 == a.rend()); | |
130 | |
131 ASSERT_EQ(a.size(), 26U); | |
132 ASSERT_EQ(b.size(), 3U); | |
133 ASSERT_EQ(c.size(), 3U); | |
134 ASSERT_EQ(d.size(), 6U); | |
135 ASSERT_EQ(e.size(), 0U); | |
136 ASSERT_EQ(f.size(), 6U); | |
137 | |
138 ASSERT_TRUE(!d.empty()); | |
139 ASSERT_TRUE(d.begin() != d.end()); | |
140 ASSERT_TRUE(d.begin() + 6 == d.end()); | |
141 | |
142 ASSERT_TRUE(e.empty()); | |
143 ASSERT_TRUE(e.begin() == e.end()); | |
144 | |
145 d.clear(); | |
146 ASSERT_EQ(d.size(), 0U); | |
147 ASSERT_TRUE(d.empty()); | |
148 ASSERT_TRUE(d.data() == NULL); | |
149 ASSERT_TRUE(d.begin() == d.end()); | |
150 | |
151 ASSERT_GE(a.max_size(), a.capacity()); | |
152 ASSERT_GE(a.capacity(), a.size()); | |
153 } | |
154 | |
155 TEST(WideStringPieceTest, CheckNULL) { | |
156 WideStringPiece s(NULL); | |
157 ASSERT_EQ(s.data(), (const char16*)NULL); | |
158 ASSERT_EQ(s.size(), 0U); | |
159 | |
160 s.set(NULL); | |
161 ASSERT_EQ(s.data(), (const char16*)NULL); | |
162 ASSERT_EQ(s.size(), 0U); | |
163 | |
164 string16 str = s.as_string16(); | |
165 ASSERT_EQ(s.data(), (const char16*)NULL); | |
166 ASSERT_EQ(s.size(), 0U); | |
167 } | |
168 | |
169 TEST(WideStringPieceTest, HeterogenousStringPieceEquals) { | |
170 ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("hello")) == ASCIIToUTF16("hello")); | |
171 } | |
172 | |
173 TEST(WideStringPieceTest, CheckConversion) { | |
174 // Make sure that we can convert from UTF8 to UTF16 and back. We use a two | |
175 // byte character (G clef) to test this. | |
176 ASSERT_EQ( | |
177 UTF16ToUTF8(WideStringPiece(UTF8ToUTF16("\u1d11e")).as_string16()), | |
178 "\u1d11e"); | |
179 } | |
180 | |
181 } // namespace base | |
OLD | NEW |