Index: third_party/WebKit/Source/wtf/text/StringViewTest.cpp |
diff --git a/third_party/WebKit/Source/wtf/text/StringViewTest.cpp b/third_party/WebKit/Source/wtf/text/StringViewTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..522b42a3298a262a73b2e5dedfd5b38dd6497807 |
--- /dev/null |
+++ b/third_party/WebKit/Source/wtf/text/StringViewTest.cpp |
@@ -0,0 +1,326 @@ |
+// Copyright 2016 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 "wtf/text/StringView.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "wtf/text/AtomicString.h" |
+#include "wtf/text/StringImpl.h" |
+#include "wtf/text/WTFString.h" |
+ |
+namespace WTF { |
+ |
+const char* kChars = "12345"; |
+const LChar* kChars8 = reinterpret_cast<const LChar*>(kChars); |
+const UChar* kChars16 = reinterpret_cast<const UChar*>(u"12345"); |
+ |
+TEST(StringViewTest, ConstructionStringImpl8) |
+{ |
+ RefPtr<StringImpl> impl8Bit = StringImpl::create(kChars8, 5); |
+ |
+ // StringView(StringImpl*); |
+ ASSERT_TRUE(StringView(impl8Bit.get()).is8Bit()); |
+ EXPECT_FALSE(StringView(impl8Bit.get()).isNull()); |
+ EXPECT_EQ(impl8Bit->characters8(), StringView(impl8Bit.get()).characters8()); |
+ EXPECT_EQ(impl8Bit->length(), StringView(impl8Bit.get()).length()); |
+ EXPECT_STREQ(kChars, StringView(impl8Bit.get()).toString().utf8().data()); |
+ |
+ // StringView(StringImpl*, unsigned offset); |
+ ASSERT_TRUE(StringView(impl8Bit.get(), 2).is8Bit()); |
+ EXPECT_FALSE(StringView(impl8Bit.get(), 2).isNull()); |
+ EXPECT_EQ(impl8Bit->characters8() + 2, StringView(impl8Bit.get(), 2).characters8()); |
+ EXPECT_EQ(3u, StringView(impl8Bit.get(), 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(impl8Bit.get(), 2)); |
+ EXPECT_STREQ("345", StringView(impl8Bit.get(), 2).toString().utf8().data()); |
+ |
+ // StringView(StringImpl*, unsigned offset, unsigned length); |
+ ASSERT_TRUE(StringView(impl8Bit.get(), 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(impl8Bit.get(), 2, 1).isNull()); |
+ EXPECT_EQ(impl8Bit->characters8() + 2, StringView(impl8Bit.get(), 2, 1).characters8()); |
+ EXPECT_EQ(1u, StringView(impl8Bit.get(), 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(impl8Bit.get(), 2, 1)); |
+ EXPECT_STREQ("3", StringView(impl8Bit.get(), 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionStringImpl16) |
+{ |
+ RefPtr<StringImpl> impl16Bit = StringImpl::create(kChars16, 5); |
+ |
+ // StringView(StringImpl*); |
+ ASSERT_FALSE(StringView(impl16Bit.get()).is8Bit()); |
+ EXPECT_FALSE(StringView(impl16Bit.get()).isNull()); |
+ EXPECT_EQ(impl16Bit->characters16(), StringView(impl16Bit.get()).characters16()); |
+ EXPECT_EQ(impl16Bit->length(), StringView(impl16Bit.get()).length()); |
+ EXPECT_STREQ(kChars, StringView(impl16Bit.get()).toString().utf8().data()); |
+ |
+ // StringView(StringImpl*, unsigned offset); |
+ ASSERT_FALSE(StringView(impl16Bit.get(), 2).is8Bit()); |
+ EXPECT_FALSE(StringView(impl16Bit.get(), 2).isNull()); |
+ EXPECT_EQ(impl16Bit->characters16() + 2, StringView(impl16Bit.get(), 2).characters16()); |
+ EXPECT_EQ(3u, StringView(impl16Bit.get(), 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(impl16Bit.get(), 2)); |
+ EXPECT_STREQ("345", StringView(impl16Bit.get(), 2).toString().utf8().data()); |
+ |
+ // StringView(StringImpl*, unsigned offset, unsigned length); |
+ ASSERT_FALSE(StringView(impl16Bit.get(), 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(impl16Bit.get(), 2, 1).isNull()); |
+ EXPECT_EQ(impl16Bit->characters16() + 2, StringView(impl16Bit.get(), 2, 1).characters16()); |
+ EXPECT_EQ(1u, StringView(impl16Bit.get(), 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(impl16Bit.get(), 2, 1)); |
+ EXPECT_STREQ("3", StringView(impl16Bit.get(), 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionString8) |
+{ |
+ String string8Bit = String(StringImpl::create(kChars8, 5)); |
+ |
+ // StringView(const String&); |
+ ASSERT_TRUE(StringView(string8Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(string8Bit).isNull()); |
+ EXPECT_EQ(string8Bit.characters8(), StringView(string8Bit).characters8()); |
+ EXPECT_EQ(string8Bit.length(), StringView(string8Bit).length()); |
+ EXPECT_STREQ(kChars, StringView(string8Bit).toString().utf8().data()); |
+ |
+ // StringView(const String&, unsigned offset); |
+ ASSERT_TRUE(StringView(string8Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(string8Bit, 2).isNull()); |
+ EXPECT_EQ(string8Bit.characters8() + 2, StringView(string8Bit, 2).characters8()); |
+ EXPECT_EQ(3u, StringView(string8Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(string8Bit, 2)); |
+ EXPECT_STREQ("345", StringView(string8Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const String&, unsigned offset, unsigned length); |
+ ASSERT_TRUE(StringView(string8Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(string8Bit, 2, 1).isNull()); |
+ EXPECT_EQ(string8Bit.characters8() + 2, StringView(string8Bit, 2, 1).characters8()); |
+ EXPECT_EQ(1u, StringView(string8Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(string8Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(string8Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionString16) |
+{ |
+ String string16Bit = String(StringImpl::create(kChars16, 5)); |
+ |
+ // StringView(const String&); |
+ ASSERT_FALSE(StringView(string16Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(string16Bit).isNull()); |
+ EXPECT_EQ(string16Bit.characters16(), StringView(string16Bit).characters16()); |
+ EXPECT_EQ(string16Bit.length(), StringView(string16Bit).length()); |
+ EXPECT_STREQ(kChars, StringView(string16Bit).toString().utf8().data()); |
+ |
+ // StringView(const String&, unsigned offset); |
+ ASSERT_FALSE(StringView(string16Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(string16Bit, 2).isNull()); |
+ EXPECT_EQ(string16Bit.characters16() + 2, StringView(string16Bit, 2).characters16()); |
+ EXPECT_EQ(3u, StringView(string16Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(string16Bit, 2)); |
+ EXPECT_STREQ("345", StringView(string16Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const String&, unsigned offset, unsigned length); |
+ ASSERT_FALSE(StringView(string16Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(string16Bit, 2, 1).isNull()); |
+ EXPECT_EQ(string16Bit.characters16() + 2, StringView(string16Bit, 2, 1).characters16()); |
+ EXPECT_EQ(1u, StringView(string16Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(string16Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(string16Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionAtomicString8) |
+{ |
+ AtomicString atom8Bit = AtomicString(StringImpl::create(kChars8, 5)); |
+ |
+ // StringView(const AtomicString&); |
+ ASSERT_TRUE(StringView(atom8Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(atom8Bit).isNull()); |
+ EXPECT_EQ(atom8Bit.characters8(), StringView(atom8Bit).characters8()); |
+ EXPECT_EQ(atom8Bit.length(), StringView(atom8Bit).length()); |
+ EXPECT_STREQ(kChars, StringView(atom8Bit).toString().utf8().data()); |
+ |
+ // StringView(const AtomicString&, unsigned offset); |
+ ASSERT_TRUE(StringView(atom8Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(atom8Bit, 2).isNull()); |
+ EXPECT_EQ(atom8Bit.characters8() + 2, StringView(atom8Bit, 2).characters8()); |
+ EXPECT_EQ(3u, StringView(atom8Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(atom8Bit, 2)); |
+ EXPECT_STREQ("345", StringView(atom8Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const AtomicString&, unsigned offset, unsigned length); |
+ ASSERT_TRUE(StringView(atom8Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(atom8Bit, 2, 1).isNull()); |
+ EXPECT_EQ(atom8Bit.characters8() + 2, StringView(atom8Bit, 2, 1).characters8()); |
+ EXPECT_EQ(1u, StringView(atom8Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(atom8Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(atom8Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionAtomicString16) |
+{ |
+ AtomicString atom16Bit = AtomicString(StringImpl::create(kChars16, 5)); |
+ |
+ // StringView(const AtomicString&); |
+ ASSERT_FALSE(StringView(atom16Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(atom16Bit).isNull()); |
+ EXPECT_EQ(atom16Bit.characters16(), StringView(atom16Bit).characters16()); |
+ EXPECT_EQ(atom16Bit.length(), StringView(atom16Bit).length()); |
+ EXPECT_STREQ(kChars, StringView(atom16Bit).toString().utf8().data()); |
+ |
+ // StringView(const AtomicString&, unsigned offset); |
+ ASSERT_FALSE(StringView(atom16Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(atom16Bit, 2).isNull()); |
+ EXPECT_EQ(atom16Bit.characters16() + 2, StringView(atom16Bit, 2).characters16()); |
+ EXPECT_EQ(3u, StringView(atom16Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(atom16Bit, 2)); |
+ EXPECT_STREQ("345", StringView(atom16Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const AtomicString&, unsigned offset, unsigned length); |
+ ASSERT_FALSE(StringView(atom16Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(atom16Bit, 2, 1).isNull()); |
+ EXPECT_EQ(atom16Bit.characters16() + 2, StringView(atom16Bit, 2, 1).characters16()); |
+ EXPECT_EQ(1u, StringView(atom16Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(atom16Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(atom16Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionStringView8) |
+{ |
+ StringView view8Bit = StringView(kChars8, 5); |
+ |
+ // StringView(StringView&); |
+ ASSERT_TRUE(StringView(view8Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(view8Bit).isNull()); |
+ EXPECT_EQ(view8Bit.characters8(), StringView(view8Bit).characters8()); |
+ EXPECT_EQ(view8Bit.length(), StringView(view8Bit).length()); |
+ EXPECT_STREQ(kChars, StringView(view8Bit).toString().utf8().data()); |
+ |
+ // StringView(const StringView&, unsigned offset); |
+ ASSERT_TRUE(StringView(view8Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(view8Bit, 2).isNull()); |
+ EXPECT_EQ(view8Bit.characters8() + 2, StringView(view8Bit, 2).characters8()); |
+ EXPECT_EQ(3u, StringView(view8Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(view8Bit, 2)); |
+ EXPECT_STREQ("345", StringView(view8Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const StringView&, unsigned offset, unsigned length); |
+ ASSERT_TRUE(StringView(view8Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(view8Bit, 2, 1).isNull()); |
+ EXPECT_EQ(view8Bit.characters8() + 2, StringView(view8Bit, 2, 1).characters8()); |
+ EXPECT_EQ(1u, StringView(view8Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(view8Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(view8Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionStringView16) |
+{ |
+ StringView view16Bit = StringView(kChars16, 5); |
+ |
+ // StringView(StringView&); |
+ ASSERT_FALSE(StringView(view16Bit).is8Bit()); |
+ EXPECT_FALSE(StringView(view16Bit).isNull()); |
+ EXPECT_EQ(view16Bit.characters16(), StringView(view16Bit).characters16()); |
+ EXPECT_EQ(view16Bit.length(), StringView(view16Bit).length()); |
+ EXPECT_EQ(kChars, StringView(view16Bit).toString()); |
+ |
+ // StringView(const StringView&, unsigned offset); |
+ ASSERT_FALSE(StringView(view16Bit, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(view16Bit, 2).isNull()); |
+ EXPECT_EQ(view16Bit.characters16() + 2, StringView(view16Bit, 2).characters16()); |
+ EXPECT_EQ(3u, StringView(view16Bit, 2).length()); |
+ EXPECT_EQ(StringView("345"), StringView(view16Bit, 2)); |
+ EXPECT_STREQ("345", StringView(view16Bit, 2).toString().utf8().data()); |
+ |
+ // StringView(const StringView&, unsigned offset, unsigned length); |
+ ASSERT_FALSE(StringView(view16Bit, 2, 1).is8Bit()); |
+ EXPECT_FALSE(StringView(view16Bit, 2, 1).isNull()); |
+ EXPECT_EQ(view16Bit.characters16() + 2, StringView(view16Bit, 2, 1).characters16()); |
+ EXPECT_EQ(1u, StringView(view16Bit, 2, 1).length()); |
+ EXPECT_EQ(StringView("3"), StringView(view16Bit, 2, 1)); |
+ EXPECT_STREQ("3", StringView(view16Bit, 2, 1).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionLiteral8) |
+{ |
+ // StringView(const LChar* chars); |
+ ASSERT_TRUE(StringView(kChars8).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars8).isNull()); |
+ EXPECT_EQ(kChars8, StringView(kChars8).characters8()); |
+ EXPECT_EQ(5u, StringView(kChars8).length()); |
+ EXPECT_STREQ(kChars, StringView(kChars8).toString().utf8().data()); |
+ |
+ // StringView(const char* chars); |
+ ASSERT_TRUE(StringView(kChars).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars).isNull()); |
+ EXPECT_EQ(kChars8, StringView(kChars).characters8()); |
+ EXPECT_EQ(5u, StringView(kChars).length()); |
+ EXPECT_STREQ(kChars, StringView(kChars).toString().utf8().data()); |
+ |
+ // StringView(const LChar* chars, unsigned length); |
+ ASSERT_TRUE(StringView(kChars8, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars8, 2).isNull()); |
+ EXPECT_EQ(2u, StringView(kChars8, 2).length()); |
+ EXPECT_EQ(StringView("12"), StringView(kChars8, 2)); |
+ EXPECT_STREQ("12", StringView(kChars8, 2).toString().utf8().data()); |
+ |
+ // StringView(const char* chars, unsigned length); |
+ ASSERT_TRUE(StringView(kChars, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars, 2).isNull()); |
+ EXPECT_EQ(2u, StringView(kChars, 2).length()); |
+ EXPECT_EQ(StringView("12"), StringView(kChars, 2)); |
+ EXPECT_STREQ("12", StringView(kChars, 2).toString().utf8().data()); |
+} |
+ |
+TEST(StringViewTest, ConstructionLiteral16) |
+{ |
+ // StringView(const UChar* chars); |
+ ASSERT_FALSE(StringView(kChars16).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars16).isNull()); |
+ EXPECT_EQ(kChars16, StringView(kChars16).characters16()); |
+ EXPECT_EQ(5u, StringView(kChars16).length()); |
+ EXPECT_EQ(String(kChars16), StringView(kChars16).toString().utf8().data()); |
+ |
+ // StringView(const UChar* chars, unsigned length); |
+ ASSERT_FALSE(StringView(kChars16, 2).is8Bit()); |
+ EXPECT_FALSE(StringView(kChars16, 2).isNull()); |
+ EXPECT_EQ(kChars16, StringView(kChars16, 2).characters16()); |
+ EXPECT_EQ(StringView("12"), StringView(kChars16, 2)); |
+ EXPECT_EQ(StringView(reinterpret_cast<const UChar*>(u"12")), StringView(kChars16, 2)); |
+ EXPECT_EQ(2u, StringView(kChars16, 2).length()); |
+ EXPECT_EQ(String("12"), StringView(kChars16, 2).toString()); |
+} |
+ |
+TEST(StringViewTest, IsEmpty) |
+{ |
+ EXPECT_FALSE(StringView(kChars).isEmpty()); |
+ EXPECT_TRUE(StringView(kChars, 0).isEmpty()); |
+ EXPECT_FALSE(StringView(String(kChars)).isEmpty()); |
+ EXPECT_TRUE(StringView(String(kChars), 5).isEmpty()); |
+ EXPECT_TRUE(StringView(String(kChars), 4, 0).isEmpty()); |
+ EXPECT_TRUE(StringView().isEmpty()); |
+ EXPECT_TRUE(StringView("").isEmpty()); |
+ EXPECT_TRUE(StringView(reinterpret_cast<const UChar*>(u"")).isEmpty()); |
+ EXPECT_FALSE(StringView(kChars16).isEmpty()); |
+} |
+ |
+TEST(StringViewTest, ToString) |
+{ |
+ // Empty string optimization. |
+ EXPECT_EQ(emptyString().impl(), StringView("").toString().impl()); |
+ // NOTE: All the construction tests also check toString(). |
+} |
+ |
+TEST(StringViewTest, NullString) |
+{ |
+ EXPECT_TRUE(StringView().isNull()); |
+ EXPECT_TRUE(StringView(String()).isNull()); |
+ EXPECT_TRUE(StringView(AtomicString()).isNull()); |
+ EXPECT_TRUE(StringView(static_cast<const char*>(nullptr)).isNull()); |
+ StringView view(kChars); |
+ EXPECT_FALSE(view.isNull()); |
+ view.clear(); |
+ EXPECT_TRUE(view.isNull()); |
+ EXPECT_EQ(String(), StringView()); |
+ EXPECT_TRUE(StringView().toString().isNull()); |
+} |
+ |
+} // namespace WTF |