| 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..0af6ef427bd2af34e17adbdab15406cfd2f31e54
|
| --- /dev/null
|
| +++ b/base/wide_string_piece_unittest.cc
|
| @@ -0,0 +1,244 @@
|
| +// 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("")) ==
|
| + 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(z));
|
| + }
|
| + }
|
| +}
|
| +
|
| +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("\xf0\x9d\x84\x9e")).as_string16()),
|
| + "\xf0\x9d\x84\x9e");
|
| +}
|
| +
|
| +} // namespace base
|
|
|