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

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: 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 "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.
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