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

Side by Side Diff: Source/core/dom/PositionTest.cpp

Issue 1190303002: Introduce Position::nodeAsRangeLastNode (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: reviews Created 5 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/Position.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « Source/core/dom/Position.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698