| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "config.h" |
| 6 #include "core/dom/Position.h" |
| 7 |
| 8 #include "core/html/HTMLBodyElement.h" |
| 9 #include "core/html/HTMLDocument.h" |
| 10 #include "core/html/HTMLElement.h" |
| 11 #include "core/html/HTMLHtmlElement.h" |
| 12 #include "core/testing/CoreTestHelpers.h" |
| 13 #include "wtf/RefPtr.h" |
| 14 #include <gtest/gtest.h> |
| 15 |
| 16 namespace blink { |
| 17 |
| 18 class PositionTest : public ::testing::Test { |
| 19 protected: |
| 20 void SetUp() override; |
| 21 |
| 22 HTMLDocument& document() const; |
| 23 void setBodyContent(const char*); |
| 24 PassRefPtrWillBeRawPtr<ShadowRoot> setShadowContent(const char*); |
| 25 |
| 26 private: |
| 27 RefPtrWillBePersistent<HTMLDocument> m_document; |
| 28 }; |
| 29 |
| 30 void PositionTest::SetUp() |
| 31 { |
| 32 m_document = HTMLDocument::create(); |
| 33 RefPtrWillBeRawPtr<HTMLHtmlElement> html = HTMLHtmlElement::create(*m_docume
nt); |
| 34 html->appendChild(HTMLBodyElement::create(*m_document)); |
| 35 m_document->appendChild(html.release()); |
| 36 } |
| 37 |
| 38 HTMLDocument& PositionTest::document() const |
| 39 { |
| 40 return *m_document; |
| 41 } |
| 42 |
| 43 void PositionTest::setBodyContent(const char* bodyContent) |
| 44 { |
| 45 document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXC
EPTION); |
| 46 } |
| 47 |
| 48 static PassRefPtrWillBeRawPtr<ShadowRoot> createShadowRootForElementWithIDAndSet
InnerHTML(TreeScope& scope, const char* hostElementID, const char* shadowRootCon
tent) |
| 49 { |
| 50 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = scope.getElementById(AtomicStrin
g::fromUTF8(hostElementID))->createShadowRoot(ASSERT_NO_EXCEPTION); |
| 51 shadowRoot->setInnerHTML(String::fromUTF8(shadowRootContent), ASSERT_NO_EXCE
PTION); |
| 52 return shadowRoot.release(); |
| 53 } |
| 54 |
| 55 PassRefPtrWillBeRawPtr<ShadowRoot> PositionTest::setShadowContent(const char* sh
adowContent) |
| 56 { |
| 57 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = createShadowRootForElementWithID
AndSetInnerHTML(document(), "host", shadowContent); |
| 58 document().recalcDistribution(); |
| 59 return shadowRoot; |
| 60 } |
| 61 |
| 62 TEST_F(PositionTest, NodeAsRangeLastNodeNull) |
| 63 { |
| 64 EXPECT_EQ(nullptr, Position().nodeAsRangeLastNode()); |
| 65 EXPECT_EQ(nullptr, PositionInComposedTree().nodeAsRangeLastNode()); |
| 66 } |
| 67 |
| 68 TEST_F(PositionTest, NodeAsRangeLastNode) |
| 69 { |
| 70 const char* bodyContent = "<p id='p1'>11</p><p id='p2'></p><p id='p3'>33</p>
"; |
| 71 setBodyContent(bodyContent); |
| 72 Node* p1 = document().getElementById("p1"); |
| 73 Node* p2 = document().getElementById("p2"); |
| 74 Node* p3 = document().getElementById("p3"); |
| 75 Node* body = EditingStrategy::parent(*p1); |
| 76 Node* t1 = EditingStrategy::firstChild(*p1); |
| 77 Node* t3 = EditingStrategy::firstChild(*p3); |
| 78 |
| 79 EXPECT_EQ(body, Position::inParentBeforeNode(*p1).nodeAsRangeLastNode()); |
| 80 EXPECT_EQ(t1, Position::inParentBeforeNode(*p2).nodeAsRangeLastNode()); |
| 81 EXPECT_EQ(p2, Position::inParentBeforeNode(*p3).nodeAsRangeLastNode()); |
| 82 EXPECT_EQ(t1, Position::inParentAfterNode(*p1).nodeAsRangeLastNode()); |
| 83 EXPECT_EQ(p2, Position::inParentAfterNode(*p2).nodeAsRangeLastNode()); |
| 84 EXPECT_EQ(t3, Position::inParentAfterNode(*p3).nodeAsRangeLastNode()); |
| 85 EXPECT_EQ(t3, Position::afterNode(p3).nodeAsRangeLastNode()); |
| 86 |
| 87 EXPECT_EQ(body, PositionInComposedTree::inParentBeforeNode(*p1).nodeAsRangeL
astNode()); |
| 88 EXPECT_EQ(t1, PositionInComposedTree::inParentBeforeNode(*p2).nodeAsRangeLas
tNode()); |
| 89 EXPECT_EQ(p2, PositionInComposedTree::inParentBeforeNode(*p3).nodeAsRangeLas
tNode()); |
| 90 EXPECT_EQ(t1, PositionInComposedTree::inParentAfterNode(*p1).nodeAsRangeLast
Node()); |
| 91 EXPECT_EQ(p2, PositionInComposedTree::inParentAfterNode(*p2).nodeAsRangeLast
Node()); |
| 92 EXPECT_EQ(t3, PositionInComposedTree::inParentAfterNode(*p3).nodeAsRangeLast
Node()); |
| 93 EXPECT_EQ(t3, PositionInComposedTree::afterNode(p3).nodeAsRangeLastNode()); |
| 94 } |
| 95 |
| 96 TEST_F(PositionTest, NodeAsRangeLastNodeShadow) |
| 97 { |
| 98 const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</
b>33</p>"; |
| 99 const char* shadowContent = "<a id='a'><content select=#two></content><conte
nt select=#one></content></a>"; |
| 100 setBodyContent(bodyContent); |
| 101 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent); |
| 102 |
| 103 Node* host = document().getElementById("host"); |
| 104 Node* n1 = document().getElementById("one"); |
| 105 Node* n2 = document().getElementById("two"); |
| 106 Node* t0 = EditingStrategy::firstChild(*host); |
| 107 Node* t1 = EditingStrategy::firstChild(*n1); |
| 108 Node* t2 = EditingStrategy::firstChild(*n2); |
| 109 Node* t3 = EditingStrategy::lastChild(*host); |
| 110 Node* a = shadowRoot->getElementById("a"); |
| 111 |
| 112 EXPECT_EQ(t0, Position::inParentBeforeNode(*n1).nodeAsRangeLastNode()); |
| 113 EXPECT_EQ(t1, Position::inParentBeforeNode(*n2).nodeAsRangeLastNode()); |
| 114 EXPECT_EQ(t1, Position::inParentAfterNode(*n1).nodeAsRangeLastNode()); |
| 115 EXPECT_EQ(t2, Position::inParentAfterNode(*n2).nodeAsRangeLastNode()); |
| 116 EXPECT_EQ(t3, Position::afterNode(host).nodeAsRangeLastNode()); |
| 117 |
| 118 EXPECT_EQ(t2, PositionInComposedTree::inParentBeforeNode(*n1).nodeAsRangeLas
tNode()); |
| 119 EXPECT_EQ(a, PositionInComposedTree::inParentBeforeNode(*n2).nodeAsRangeLast
Node()); |
| 120 EXPECT_EQ(t1, PositionInComposedTree::inParentAfterNode(*n1).nodeAsRangeLast
Node()); |
| 121 EXPECT_EQ(t2, PositionInComposedTree::inParentAfterNode(*n2).nodeAsRangeLast
Node()); |
| 122 EXPECT_EQ(t1, PositionInComposedTree::afterNode(host).nodeAsRangeLastNode())
; |
| 123 } |
| 124 |
| 125 } // namespace blink |
| OLD | NEW |