Chromium Code Reviews| 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 |