Chromium Code Reviews| Index: third_party/WebKit/Source/web/tests/ShadowDOMV0Test.cpp |
| diff --git a/third_party/WebKit/Source/web/tests/ShadowDOMV0Test.cpp b/third_party/WebKit/Source/web/tests/ShadowDOMV0Test.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5471fb8935d55a14cbbef52d5aeea423137f134d |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/web/tests/ShadowDOMV0Test.cpp |
| @@ -0,0 +1,143 @@ |
| +// Copyright 2017 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/shadow/ElementShadow.h" |
| +#include "core/dom/shadow/ElementShadowV0.h" |
| +#include "core/html/HTMLBodyElement.h" |
| +#include "web/tests/sim/SimDisplayItemList.h" |
| +#include "web/tests/sim/SimRequest.h" |
|
rune
2017/01/20 11:41:16
Are all of these includes needed? SimDisplayItemLi
esprehn
2017/02/03 22:31:10
BeginFrame() returns an instance of it and it's fo
|
| +#include "web/tests/sim/SimTest.h" |
| + |
| +namespace blink { |
| + |
| +namespace { |
| + |
| +bool hasSelectorForIdInShadow(Element* host, const AtomicString& id) { |
| + DCHECK(host); |
|
rune
2017/01/20 11:41:16
Don't we typically use ASSERT_TRUE instead of DCHE
esprehn
2017/02/03 22:31:10
This was a support method so an assert looked funn
rune
2017/02/06 11:53:45
Acknowledged.
|
| + return host->shadow()->v0().ensureSelectFeatureSet().hasSelectorForId(id); |
| +} |
| + |
| +bool hasSelectorForClassInShadow(Element* host, const AtomicString& className) { |
| + DCHECK(host); |
| + return host->shadow()->v0().ensureSelectFeatureSet().hasSelectorForClass( |
| + className); |
| +} |
| + |
| +bool hasSelectorForAttributeInShadow(Element* host, |
| + const AtomicString& attributeName) { |
| + DCHECK(host); |
| + return host->shadow()->v0().ensureSelectFeatureSet().hasSelectorForAttribute( |
| + attributeName); |
| +} |
| + |
| +class ShadowDOMVTest : public SimTest {}; |
|
rune
2017/01/20 11:41:16
ShadowDOMVTest -> ShadowDOMV0Test ?
esprehn
2017/02/03 22:31:10
Woops yeah
|
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetId) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + auto* content = document().createElement("content"); |
| + content->setAttribute("select", "#foo"); |
| + host->createShadowRoot()->appendChild(content); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "host")); |
| + content->setAttribute("select", "#bar"); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "foo")); |
| + content->setAttribute("select", ""); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "foo")); |
| +} |
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetClassName) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + auto* content = document().createElement("content"); |
| + content->setAttribute("select", ".foo"); |
| + host->createShadowRoot()->appendChild(content); |
| + EXPECT_TRUE(hasSelectorForClassInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "host")); |
| + content->setAttribute("select", ".bar"); |
| + EXPECT_TRUE(hasSelectorForClassInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "foo")); |
| + content->setAttribute("select", ""); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "foo")); |
| +} |
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetAttributeName) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + auto* content = document().createElement("content"); |
| + content->setAttribute("select", "div[foo]"); |
| + host->createShadowRoot()->appendChild(content); |
| + EXPECT_TRUE(hasSelectorForAttributeInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "host")); |
| + content->setAttribute("select", "div[bar]"); |
| + EXPECT_TRUE(hasSelectorForAttributeInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "foo")); |
| + content->setAttribute("select", ""); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "foo")); |
| +} |
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetMultipleSelectors) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + auto* content = document().createElement("content"); |
| + content->setAttribute("select", "#foo,.bar,div[baz]"); |
| + host->createShadowRoot()->appendChild(content); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "baz")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "foo")); |
| + EXPECT_TRUE(hasSelectorForClassInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "baz")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "bar")); |
| + EXPECT_TRUE(hasSelectorForAttributeInShadow(host, "baz")); |
| +} |
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetSubtree) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + host->createShadowRoot()->setInnerHTML( |
| + "<div>" |
| + " <div></div>" |
| + " <content select='*'></content>" |
| + " <div>" |
| + " <content select='div[foo=piyo]'></content>" |
| + " </div>" |
| + "</div>"); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForClassInShadow(host, "foo")); |
| + EXPECT_TRUE(hasSelectorForAttributeInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForAttributeInShadow(host, "piyo")); |
| +} |
| + |
| +TEST_F(ShadowDOMVTest, FeatureSetMultipleShadowRoots) { |
| + loadURL("about:blank"); |
| + auto* host = document().createElement("div"); |
| + auto* hostShadow = host->createShadowRoot(); |
| + hostShadow->setInnerHTML("<content select='#foo'></content>"); |
| + auto* child = document().createElement("div"); |
| + auto* childRoot = child->createShadowRoot(); |
| + auto* childContent = document().createElement("content"); |
| + childContent->setAttribute("select", "#bar"); |
| + childRoot->appendChild(childContent); |
| + hostShadow->appendChild(child); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "foo")); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "baz")); |
| + childContent->setAttribute("select", "#baz"); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "foo")); |
| + EXPECT_FALSE(hasSelectorForIdInShadow(host, "bar")); |
| + EXPECT_TRUE(hasSelectorForIdInShadow(host, "baz")); |
| +} |
| + |
| +} // namespace |
| + |
| +} // namespace blink |