Index: base/wide_string_piece_unittest.cc |
diff --git a/base/wide_string_piece_unittest.cc b/base/wide_string_piece_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5a52d51d4fe904c54a18108cd074604fdad552f1 |
--- /dev/null |
+++ b/base/wide_string_piece_unittest.cc |
@@ -0,0 +1,243 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/wide_string_piece.h" |
+ |
+#include "base/logging.h" |
+#include "base/string16.h" |
+#include "base/utf_string_conversions.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace base { |
+ |
+TEST(WideStringPieceTest, CheckComparisonOperators) { |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("")) == |
Paweł Hajdan Jr.
2011/08/02 22:03:18
How about ASSERT_EQ? Up to you.
|
+ WideStringPiece(ASCIIToUTF16(""))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) == |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) == |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == |
+ WideStringPiece(ASCIIToUTF16(""))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("")) == |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) == |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) == |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("")) != |
+ WideStringPiece(ASCIIToUTF16(""))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) != |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) != |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != |
+ WideStringPiece(ASCIIToUTF16(""))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("")) != |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) != |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) != |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) < |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) < |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) < |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) < |
+ WideStringPiece(ASCIIToUTF16("bb"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) < |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) < |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) < |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) < |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) < |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("bb"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("bb"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) <= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("b")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("bb")) <= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) >= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) >= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) >= |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) >= |
+ WideStringPiece(ASCIIToUTF16("bb"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("a")) >= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) >= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) >= |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) >= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("bb")) >= |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("a")) > |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) > |
+ WideStringPiece(ASCIIToUTF16("b"))); |
+ ASSERT_FALSE(WideStringPiece(ASCIIToUTF16("aa")) > |
+ WideStringPiece(ASCIIToUTF16("bb"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) > |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("aa")) > |
+ WideStringPiece(ASCIIToUTF16("a"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("b")) > |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("bb")) > |
+ WideStringPiece(ASCIIToUTF16("aa"))); |
+ |
+ string16 x; |
+ for (int i = 0; i < 256; i++) { |
+ x += 'a'; |
+ string16 y = x; |
+ ASSERT_EQ(WideStringPiece(x), WideStringPiece(y)); |
+ for (int j = 0; j < i; j++) { |
+ string16 z = x; |
+ z[j] = 'b'; // Differs in position 'j' |
+ ASSERT_NE(WideStringPiece(x), WideStringPiece(y)); |
+ } |
+ } |
+} |
+ |
+TEST(WideStringPieceTest, CheckSTL) { |
+ string16 first = ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz"); |
+ WideStringPiece a(first); |
+ string16 second = ASCIIToUTF16("abc"); |
+ WideStringPiece b(second.c_str()); |
+ string16 third = ASCIIToUTF16("xyz"); |
+ WideStringPiece c(third.c_str(), third.size()); |
+ string16 fourth = ASCIIToUTF16("foobarrandomstuff"); |
+ WideStringPiece d(fourth.c_str(), 6); |
+ WideStringPiece e; |
+ // Check some non-ascii characters. |
+ string16 fifth(ASCIIToUTF16("123")); |
+ fifth.push_back(0x0000); |
+ fifth.push_back(0xd8c5); |
+ fifth.push_back(0xdffe); |
+ WideStringPiece f(fifth); |
+ |
+ ASSERT_EQ(a[6], 'g'); |
+ ASSERT_EQ(b[0], 'a'); |
+ ASSERT_EQ(c[2], 'z'); |
+ ASSERT_EQ(f[3], '\0'); |
+ ASSERT_EQ(f[5], static_cast<char16>(0xdffe)); |
+ |
+ ASSERT_EQ(*d.data(), 'f'); |
+ ASSERT_EQ(d.data()[5], 'r'); |
+ ASSERT_TRUE(e.data() == NULL); |
+ |
+ ASSERT_EQ(*a.begin(), 'a'); |
+ ASSERT_EQ(*(b.begin() + 2), 'c'); |
+ ASSERT_EQ(*(c.end() - 1), 'z'); |
+ |
+ ASSERT_EQ(*a.rbegin(), 'z'); |
+ ASSERT_EQ(*(b.rbegin() + 2), 'a'); |
+ ASSERT_EQ(*(c.rend() - 1), 'x'); |
+ ASSERT_TRUE(a.rbegin() + 26 == a.rend()); |
+ |
+ ASSERT_EQ(a.size(), 26U); |
+ ASSERT_EQ(b.size(), 3U); |
+ ASSERT_EQ(c.size(), 3U); |
+ ASSERT_EQ(d.size(), 6U); |
+ ASSERT_EQ(e.size(), 0U); |
+ ASSERT_EQ(f.size(), 6U); |
+ |
+ ASSERT_TRUE(!d.empty()); |
+ ASSERT_TRUE(d.begin() != d.end()); |
+ ASSERT_TRUE(d.begin() + 6 == d.end()); |
+ |
+ ASSERT_TRUE(e.empty()); |
+ ASSERT_TRUE(e.begin() == e.end()); |
+ |
+ d.clear(); |
+ ASSERT_EQ(d.size(), 0U); |
+ ASSERT_TRUE(d.empty()); |
+ ASSERT_TRUE(d.data() == NULL); |
+ ASSERT_TRUE(d.begin() == d.end()); |
+ |
+ ASSERT_GE(a.max_size(), a.capacity()); |
+ ASSERT_GE(a.capacity(), a.size()); |
+} |
+ |
+TEST(WideStringPieceTest, CheckNULL) { |
+ WideStringPiece s(NULL); |
+ ASSERT_EQ(s.data(), (const char16*)NULL); |
+ ASSERT_EQ(s.size(), 0U); |
+ |
+ s.set(NULL); |
+ ASSERT_EQ(s.data(), (const char16*)NULL); |
+ ASSERT_EQ(s.size(), 0U); |
+ |
+ string16 str = s.as_string16(); |
+ ASSERT_EQ(s.data(), (const char16*)NULL); |
+ ASSERT_EQ(s.size(), 0U); |
+} |
+ |
+TEST(WideStringPieceTest, HeterogenousStringPieceEquals) { |
+ ASSERT_TRUE(WideStringPiece(ASCIIToUTF16("hello")) == ASCIIToUTF16("hello")); |
+} |
+ |
+TEST(WideStringPieceTest, CheckConversion) { |
+ // Make sure that we can convert from UTF8 to UTF16 and back. We use a two |
+ // byte character (G clef) to test this. |
+ ASSERT_EQ( |
+ UTF16ToUTF8(WideStringPiece(UTF8ToUTF16("\u1d11e")).as_string16()), |
+ "\u1d11e"); |
+} |
+ |
+} // namespace base |