Index: third_party/WebKit/Source/core/dom/TreeScopeStyleSheetCollectionTest.cpp |
diff --git a/third_party/WebKit/Source/core/dom/TreeScopeStyleSheetCollectionTest.cpp b/third_party/WebKit/Source/core/dom/TreeScopeStyleSheetCollectionTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4d1ba765ced1cd58f6977a4754c86f102e3bdab1 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/dom/TreeScopeStyleSheetCollectionTest.cpp |
@@ -0,0 +1,152 @@ |
+// Copyright 2015 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 "core/dom/TreeScopeStyleSheetCollection.h" |
+ |
+#include "core/css/CSSStyleSheet.h" |
+#include "core/css/StyleSheetContents.h" |
+#include "core/css/parser/CSSParserMode.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace blink { |
+ |
+class TreeScopeStyleSheetCollectionTest : public testing::Test { |
+ protected: |
+ using SheetVector = HeapVector<Member<CSSStyleSheet>>; |
+ using ContentsVector = HeapVector<Member<StyleSheetContents>>; |
+ |
+ enum UpdateType { |
+ Reconstruct = TreeScopeStyleSheetCollection::Reconstruct, |
+ Reset = TreeScopeStyleSheetCollection::Reset, |
+ Additive = TreeScopeStyleSheetCollection::Additive |
+ }; |
+ |
+ static CSSStyleSheet* createSheet() { |
+ return CSSStyleSheet::create(StyleSheetContents::create( |
+ CSSParserContext(HTMLStandardMode, nullptr))); |
+ } |
+ |
+ static void compareStyleSheets(const SheetVector& oldStyleSheets, |
+ const SheetVector& newStyleSheets, |
+ const ContentsVector& expAddedSheets, |
+ UpdateType testUpdateType) { |
+ ContentsVector addedSheets; |
+ UpdateType updateType = static_cast<UpdateType>( |
+ TreeScopeStyleSheetCollection::compareStyleSheets( |
+ oldStyleSheets, newStyleSheets, addedSheets)); |
+ EXPECT_EQ(testUpdateType, updateType); |
+ EXPECT_EQ(expAddedSheets.size(), addedSheets.size()); |
+ if (expAddedSheets.size() == addedSheets.size()) { |
+ for (unsigned i = 0; i < addedSheets.size(); i++) |
+ EXPECT_EQ(expAddedSheets.at(i), addedSheets.at(i)); |
+ } |
+ } |
+}; |
+ |
+TEST_F(TreeScopeStyleSheetCollectionTest, CompareStyleSheetsAppend) { |
+ CSSStyleSheet* sheet1 = createSheet(); |
+ CSSStyleSheet* sheet2 = createSheet(); |
+ |
+ ContentsVector added; |
+ SheetVector previous; |
+ SheetVector current; |
+ |
+ previous.append(sheet1); |
+ |
+ current.append(sheet1); |
+ current.append(sheet2); |
+ |
+ added.append(sheet2->contents()); |
+ |
+ compareStyleSheets(previous, current, added, Additive); |
+} |
+ |
+TEST_F(TreeScopeStyleSheetCollectionTest, CompareStyleSheetsPrepend) { |
+ CSSStyleSheet* sheet1 = createSheet(); |
+ CSSStyleSheet* sheet2 = createSheet(); |
+ |
+ ContentsVector added; |
+ SheetVector previous; |
+ SheetVector current; |
+ |
+ previous.append(sheet2); |
+ |
+ current.append(sheet1); |
+ current.append(sheet2); |
+ |
+ added.append(sheet1->contents()); |
+ |
+ compareStyleSheets(previous, current, added, Reconstruct); |
+} |
+ |
+TEST_F(TreeScopeStyleSheetCollectionTest, CompareStyleSheetsInsert) { |
+ CSSStyleSheet* sheet1 = createSheet(); |
+ CSSStyleSheet* sheet2 = createSheet(); |
+ CSSStyleSheet* sheet3 = createSheet(); |
+ |
+ ContentsVector added; |
+ SheetVector previous; |
+ SheetVector current; |
+ |
+ previous.append(sheet1); |
+ previous.append(sheet3); |
+ |
+ current.append(sheet1); |
+ current.append(sheet2); |
+ current.append(sheet3); |
+ |
+ added.append(sheet2->contents()); |
+ |
+ compareStyleSheets(previous, current, added, Reconstruct); |
+} |
+ |
+TEST_F(TreeScopeStyleSheetCollectionTest, CompareStyleSheetsRemove) { |
+ CSSStyleSheet* sheet1 = createSheet(); |
+ CSSStyleSheet* sheet2 = createSheet(); |
+ CSSStyleSheet* sheet3 = createSheet(); |
+ |
+ ContentsVector added; |
+ SheetVector previous; |
+ SheetVector current; |
+ |
+ previous.append(sheet1); |
+ previous.append(sheet2); |
+ previous.append(sheet3); |
+ |
+ current.append(sheet1); |
+ current.append(sheet3); |
+ |
+ added.append(sheet2->contents()); |
+ |
+ // This is really the same as Insert. |
+ // TreeScopeStyleSheetCollection::compareStyleSheets will assert if you pass |
+ // an array that is longer as the first parameter. |
+ compareStyleSheets(current, previous, added, Reconstruct); |
+} |
+ |
+TEST_F(TreeScopeStyleSheetCollectionTest, CompareStyleSheetsInsertRemove) { |
+ CSSStyleSheet* sheet1 = createSheet(); |
+ CSSStyleSheet* sheet2 = createSheet(); |
+ CSSStyleSheet* sheet3 = createSheet(); |
+ |
+ ContentsVector added; |
+ SheetVector previous; |
+ SheetVector current; |
+ |
+ previous.append(sheet1); |
+ previous.append(sheet2); |
+ |
+ current.append(sheet2); |
+ current.append(sheet3); |
+ |
+ // TODO(rune@opera.com): This is clearly wrong. We add sheet3 and remove |
+ // sheet1 and compareStyleSheets returns sheet2 and sheet3 as added |
+ // (crbug/475858). |
+ added.append(sheet2->contents()); |
+ added.append(sheet3->contents()); |
+ |
+ compareStyleSheets(previous, current, added, Reconstruct); |
+} |
+ |
+} // namespace blink |