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