Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Unified Diff: third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp

Issue 1489433002: Support the essential part of Shadow DOM v1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert Internals.* Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp
diff --git a/third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp b/third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp
index 66fb250afa6bca8fcc130d666e9de51d727fdc5e..2da37991b4f5994debac45dc011eb7b1c8b988af 100644
--- a/third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/ComposedTreeTraversalTest.cpp
@@ -35,7 +35,10 @@ protected:
// calling member functions in |ComposedTreeTraversal|.
void setupSampleHTML(const char* mainHTML, const char* shadowHTML, unsigned);
+ void setupDocumentTree(const char* mainHTML);
+
void attachV0ShadowRoot(Element& shadowHost, const char* shadowInnerHTML);
+ void attachOpenShadowRoot(Element& shadowHost, const char* shadowInnerHTML);
private:
void SetUp() override;
@@ -66,6 +69,12 @@ void ComposedTreeTraversalTest::setupSampleHTML(const char* mainHTML, const char
body->updateDistribution();
}
+void ComposedTreeTraversalTest::setupDocumentTree(const char* mainHTML)
+{
+ RefPtrWillBeRawPtr<Element> body = document().body();
+ body->setInnerHTML(String::fromUTF8(mainHTML), ASSERT_NO_EXCEPTION);
+}
+
void ComposedTreeTraversalTest::attachV0ShadowRoot(Element& shadowHost, const char* shadowInnerHTML)
{
RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = shadowHost.createShadowRootInternal(ShadowRootType::V0, ASSERT_NO_EXCEPTION);
@@ -73,6 +82,13 @@ void ComposedTreeTraversalTest::attachV0ShadowRoot(Element& shadowHost, const ch
document().body()->updateDistribution();
}
+void ComposedTreeTraversalTest::attachOpenShadowRoot(Element& shadowHost, const char* shadowInnerHTML)
+{
+ RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = shadowHost.createShadowRootInternal(ShadowRootType::Open, ASSERT_NO_EXCEPTION);
+ shadowRoot->setInnerHTML(String::fromUTF8(shadowInnerHTML), ASSERT_NO_EXCEPTION);
+ document().body()->updateDistribution();
+}
+
void testCommonAncestor(Node* expectedResult, const Node& nodeA, const Node& nodeB)
{
Node* result1 = ComposedTreeTraversal::commonAncestor(nodeA, nodeB);
@@ -444,4 +460,105 @@ TEST_F(ComposedTreeTraversalTest, redistribution)
// EXPECT_EQ(nullptr, ComposedTreeTraversal::previousSibling(*m11));
}
+TEST_F(ComposedTreeTraversalTest, v1Simple)
+{
+ const char* mainHTML =
+ "<div id='host'>"
+ "<div id='child1' slot='slot1'></div>"
+ "<div id='child2' slot='slot2'></div>"
+ "</div>";
+ const char* shadowHTML =
+ "<div id='shadow-child1'></div>"
+ "<slot name='slot1'></slot>"
+ "<slot name='slot2'></slot>"
+ "<div id='shadow-child2'></div>";
+
+ setupDocumentTree(mainHTML);
+ RefPtrWillBeRawPtr<Element> body = document().body();
+ RefPtrWillBeRawPtr<Element> host = body->querySelector("#host", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> child1 = body->querySelector("#child1", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> child2 = body->querySelector("#child2", ASSERT_NO_EXCEPTION);
+
+ attachOpenShadowRoot(*host, shadowHTML);
+ RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = host->openShadowRoot();
+ RefPtrWillBeRawPtr<Element> slot1 = shadowRoot->querySelector("[name=slot1]", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> slot2 = shadowRoot->querySelector("[name=slot2]", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> shadowChild1 = shadowRoot->querySelector("#shadow-child1", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> shadowChild2 = shadowRoot->querySelector("#shadow-child2", ASSERT_NO_EXCEPTION);
+
+ EXPECT_EQ(shadowChild1.get(), ComposedTreeTraversal::firstChild(*host));
+ EXPECT_EQ(child1.get(), ComposedTreeTraversal::nextSibling(*shadowChild1));
+ EXPECT_EQ(child2.get(), ComposedTreeTraversal::nextSibling(*child1));
+ EXPECT_EQ(shadowChild2.get(), ComposedTreeTraversal::nextSibling(*child2));
+}
+
+TEST_F(ComposedTreeTraversalTest, v1Redistribution)
+{
+ const char* mainHTML =
+ "<div id='d1'>"
+ "<div id='d2' slot='d1-s1'></div>"
+ "<div id='d3' slot='d1-s2'></div>"
+ "<div id='d4' slot='nonexistent'></div>"
+ "<div id='d5'></div>"
+ "</div>"
+ "<div id='d6'></div>";
+ const char* shadowHTML1 =
+ "<div id='d1-1'>"
+ "<div id='d1-2'></div>"
+ "<slot id='d1-s0'></slot>"
+ "<slot name='d1-s1' slot='d1-1-s1'></slot>"
+ "<slot name='d1-s2'></slot>"
+ "<div id='d1-3'></div>"
+ "<div id='d1-4' slot='d1-1-s1'></div>"
+ "</div>";
+ const char* shadowHTML2 =
+ "<div id='d1-1-1'></div>"
+ "<slot name='d1-1-s1'></slot>"
+ "<slot name='d1-1-s2'></slot>"
+ "<div id='d1-1-2'></div>";
+
+ setupDocumentTree(mainHTML);
+
+ RefPtrWillBeRawPtr<Element> body = document().body();
+ RefPtrWillBeRawPtr<Element> d1 = body->querySelector("#d1", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d2 = body->querySelector("#d2", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d3 = body->querySelector("#d3", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d4 = body->querySelector("#d4", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d5 = body->querySelector("#d5", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d6 = body->querySelector("#d6", ASSERT_NO_EXCEPTION);
+
+ attachOpenShadowRoot(*d1, shadowHTML1);
+ RefPtrWillBeRawPtr<ShadowRoot> shadowRoot1 = d1->openShadowRoot();
+ RefPtrWillBeRawPtr<Element> d11 = shadowRoot1->querySelector("#d1-1", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d12 = shadowRoot1->querySelector("#d1-2", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d13 = shadowRoot1->querySelector("#d1-3", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d14 = shadowRoot1->querySelector("#d1-4", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d1s0 = shadowRoot1->querySelector("#d1-s0", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d1s1 = shadowRoot1->querySelector("[name=d1-s1]", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d1s2 = shadowRoot1->querySelector("[name=d1-s2]", ASSERT_NO_EXCEPTION);
+
+ attachOpenShadowRoot(*d11, shadowHTML2);
+ RefPtrWillBeRawPtr<ShadowRoot> shadowRoot2 = d11->openShadowRoot();
+ RefPtrWillBeRawPtr<Element> d111 = shadowRoot2->querySelector("#d1-1-1", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d112 = shadowRoot2->querySelector("#d1-1-2", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d11s1 = shadowRoot2->querySelector("[name=d1-1-s1]", ASSERT_NO_EXCEPTION);
+ RefPtrWillBeRawPtr<Element> d11s2 = shadowRoot2->querySelector("[name=d1-1-s2]", ASSERT_NO_EXCEPTION);
+
+ EXPECT_EQ(d11.get(), ComposedTreeTraversal::next(*d1));
+ EXPECT_EQ(d111.get(), ComposedTreeTraversal::next(*d11));
+ EXPECT_EQ(d2.get(), ComposedTreeTraversal::next(*d111));
+ EXPECT_EQ(d14.get(), ComposedTreeTraversal::next(*d2));
+ EXPECT_EQ(d112.get(), ComposedTreeTraversal::next(*d14));
+ EXPECT_EQ(d6.get(), ComposedTreeTraversal::next(*d112));
+
+ EXPECT_EQ(d112.get(), ComposedTreeTraversal::previous(*d6));
+
+ EXPECT_EQ(d11.get(), ComposedTreeTraversal::parent(*d111));
+ EXPECT_EQ(d11.get(), ComposedTreeTraversal::parent(*d112));
+ EXPECT_EQ(d11.get(), ComposedTreeTraversal::parent(*d2));
+ EXPECT_EQ(d11.get(), ComposedTreeTraversal::parent(*d14));
+ EXPECT_EQ(nullptr, ComposedTreeTraversal::parent(*d3));
+ EXPECT_EQ(nullptr, ComposedTreeTraversal::parent(*d4));
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698