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("")) == |
| 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(z)); |
| 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( |
| 240 WideStringPiece(UTF8ToUTF16("\xf0\x9d\x84\x9e")).as_string16()), |
| 241 "\xf0\x9d\x84\x9e"); |
| 242 } |
| 243 |
| 244 } // namespace base |
OLD | NEW |