| 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
|
|
|