OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/editing/Position.h" | 5 #include "core/editing/Position.h" |
6 | 6 |
7 #include "core/editing/EditingTestBase.h" | 7 #include "core/editing/EditingTestBase.h" |
8 | 8 |
9 namespace blink { | 9 namespace blink { |
10 | 10 |
11 class PositionTest : public EditingTestBase { | 11 class PositionTest : public EditingTestBase { |
12 }; | 12 }; |
13 | 13 |
14 TEST_F(PositionTest, NodeAsRangeLastNodeNull) | 14 TEST_F(PositionTest, NodeAsRangeLastNodeNull) |
15 { | 15 { |
16 EXPECT_EQ(nullptr, Position().nodeAsRangeLastNode()); | 16 EXPECT_EQ(nullptr, Position().nodeAsRangeLastNode()); |
17 EXPECT_EQ(nullptr, PositionInComposedTree().nodeAsRangeLastNode()); | 17 EXPECT_EQ(nullptr, PositionInFlatTree().nodeAsRangeLastNode()); |
18 } | 18 } |
19 | 19 |
20 TEST_F(PositionTest, editingPositionOfWithEditingIgnoresContent) | 20 TEST_F(PositionTest, editingPositionOfWithEditingIgnoresContent) |
21 { | 21 { |
22 const char* bodyContent = "<textarea id=textarea></textarea><a id=child1>1</
a><b id=child2>2</b>"; | 22 const char* bodyContent = "<textarea id=textarea></textarea><a id=child1>1</
a><b id=child2>2</b>"; |
23 setBodyContent(bodyContent); | 23 setBodyContent(bodyContent); |
24 Node* textarea = document().getElementById("textarea"); | 24 Node* textarea = document().getElementById("textarea"); |
25 | 25 |
26 EXPECT_EQ(Position::beforeNode(textarea), Position::editingPositionOf(textar
ea, 0)); | 26 EXPECT_EQ(Position::beforeNode(textarea), Position::editingPositionOf(textar
ea, 0)); |
27 EXPECT_EQ(Position::afterNode(textarea), Position::editingPositionOf(textare
a, 1)); | 27 EXPECT_EQ(Position::afterNode(textarea), Position::editingPositionOf(textare
a, 1)); |
(...skipping 24 matching lines...) Expand all Loading... |
52 Node* t3 = EditingStrategy::firstChild(*p3); | 52 Node* t3 = EditingStrategy::firstChild(*p3); |
53 | 53 |
54 EXPECT_EQ(body, Position::inParentBeforeNode(*p1).nodeAsRangeLastNode()); | 54 EXPECT_EQ(body, Position::inParentBeforeNode(*p1).nodeAsRangeLastNode()); |
55 EXPECT_EQ(t1, Position::inParentBeforeNode(*p2).nodeAsRangeLastNode()); | 55 EXPECT_EQ(t1, Position::inParentBeforeNode(*p2).nodeAsRangeLastNode()); |
56 EXPECT_EQ(p2, Position::inParentBeforeNode(*p3).nodeAsRangeLastNode()); | 56 EXPECT_EQ(p2, Position::inParentBeforeNode(*p3).nodeAsRangeLastNode()); |
57 EXPECT_EQ(t1, Position::inParentAfterNode(*p1).nodeAsRangeLastNode()); | 57 EXPECT_EQ(t1, Position::inParentAfterNode(*p1).nodeAsRangeLastNode()); |
58 EXPECT_EQ(p2, Position::inParentAfterNode(*p2).nodeAsRangeLastNode()); | 58 EXPECT_EQ(p2, Position::inParentAfterNode(*p2).nodeAsRangeLastNode()); |
59 EXPECT_EQ(t3, Position::inParentAfterNode(*p3).nodeAsRangeLastNode()); | 59 EXPECT_EQ(t3, Position::inParentAfterNode(*p3).nodeAsRangeLastNode()); |
60 EXPECT_EQ(t3, Position::afterNode(p3).nodeAsRangeLastNode()); | 60 EXPECT_EQ(t3, Position::afterNode(p3).nodeAsRangeLastNode()); |
61 | 61 |
62 EXPECT_EQ(body, PositionInComposedTree::inParentBeforeNode(*p1).nodeAsRangeL
astNode()); | 62 EXPECT_EQ(body, PositionInFlatTree::inParentBeforeNode(*p1).nodeAsRangeLastN
ode()); |
63 EXPECT_EQ(t1, PositionInComposedTree::inParentBeforeNode(*p2).nodeAsRangeLas
tNode()); | 63 EXPECT_EQ(t1, PositionInFlatTree::inParentBeforeNode(*p2).nodeAsRangeLastNod
e()); |
64 EXPECT_EQ(p2, PositionInComposedTree::inParentBeforeNode(*p3).nodeAsRangeLas
tNode()); | 64 EXPECT_EQ(p2, PositionInFlatTree::inParentBeforeNode(*p3).nodeAsRangeLastNod
e()); |
65 EXPECT_EQ(t1, PositionInComposedTree::inParentAfterNode(*p1).nodeAsRangeLast
Node()); | 65 EXPECT_EQ(t1, PositionInFlatTree::inParentAfterNode(*p1).nodeAsRangeLastNode
()); |
66 EXPECT_EQ(p2, PositionInComposedTree::inParentAfterNode(*p2).nodeAsRangeLast
Node()); | 66 EXPECT_EQ(p2, PositionInFlatTree::inParentAfterNode(*p2).nodeAsRangeLastNode
()); |
67 EXPECT_EQ(t3, PositionInComposedTree::inParentAfterNode(*p3).nodeAsRangeLast
Node()); | 67 EXPECT_EQ(t3, PositionInFlatTree::inParentAfterNode(*p3).nodeAsRangeLastNode
()); |
68 EXPECT_EQ(t3, PositionInComposedTree::afterNode(p3).nodeAsRangeLastNode()); | 68 EXPECT_EQ(t3, PositionInFlatTree::afterNode(p3).nodeAsRangeLastNode()); |
69 } | 69 } |
70 | 70 |
71 TEST_F(PositionTest, NodeAsRangeLastNodeShadow) | 71 TEST_F(PositionTest, NodeAsRangeLastNodeShadow) |
72 { | 72 { |
73 const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</
b>33</p>"; | 73 const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</
b>33</p>"; |
74 const char* shadowContent = "<a id='a'><content select=#two></content><conte
nt select=#one></content></a>"; | 74 const char* shadowContent = "<a id='a'><content select=#two></content><conte
nt select=#one></content></a>"; |
75 setBodyContent(bodyContent); | 75 setBodyContent(bodyContent); |
76 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 76 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
77 | 77 |
78 Node* host = document().getElementById("host"); | 78 Node* host = document().getElementById("host"); |
79 Node* n1 = document().getElementById("one"); | 79 Node* n1 = document().getElementById("one"); |
80 Node* n2 = document().getElementById("two"); | 80 Node* n2 = document().getElementById("two"); |
81 Node* t0 = EditingStrategy::firstChild(*host); | 81 Node* t0 = EditingStrategy::firstChild(*host); |
82 Node* t1 = EditingStrategy::firstChild(*n1); | 82 Node* t1 = EditingStrategy::firstChild(*n1); |
83 Node* t2 = EditingStrategy::firstChild(*n2); | 83 Node* t2 = EditingStrategy::firstChild(*n2); |
84 Node* t3 = EditingStrategy::lastChild(*host); | 84 Node* t3 = EditingStrategy::lastChild(*host); |
85 Node* a = shadowRoot->getElementById("a"); | 85 Node* a = shadowRoot->getElementById("a"); |
86 | 86 |
87 EXPECT_EQ(t0, Position::inParentBeforeNode(*n1).nodeAsRangeLastNode()); | 87 EXPECT_EQ(t0, Position::inParentBeforeNode(*n1).nodeAsRangeLastNode()); |
88 EXPECT_EQ(t1, Position::inParentBeforeNode(*n2).nodeAsRangeLastNode()); | 88 EXPECT_EQ(t1, Position::inParentBeforeNode(*n2).nodeAsRangeLastNode()); |
89 EXPECT_EQ(t1, Position::inParentAfterNode(*n1).nodeAsRangeLastNode()); | 89 EXPECT_EQ(t1, Position::inParentAfterNode(*n1).nodeAsRangeLastNode()); |
90 EXPECT_EQ(t2, Position::inParentAfterNode(*n2).nodeAsRangeLastNode()); | 90 EXPECT_EQ(t2, Position::inParentAfterNode(*n2).nodeAsRangeLastNode()); |
91 EXPECT_EQ(t3, Position::afterNode(host).nodeAsRangeLastNode()); | 91 EXPECT_EQ(t3, Position::afterNode(host).nodeAsRangeLastNode()); |
92 | 92 |
93 EXPECT_EQ(t2, PositionInComposedTree::inParentBeforeNode(*n1).nodeAsRangeLas
tNode()); | 93 EXPECT_EQ(t2, PositionInFlatTree::inParentBeforeNode(*n1).nodeAsRangeLastNod
e()); |
94 EXPECT_EQ(a, PositionInComposedTree::inParentBeforeNode(*n2).nodeAsRangeLast
Node()); | 94 EXPECT_EQ(a, PositionInFlatTree::inParentBeforeNode(*n2).nodeAsRangeLastNode
()); |
95 EXPECT_EQ(t1, PositionInComposedTree::inParentAfterNode(*n1).nodeAsRangeLast
Node()); | 95 EXPECT_EQ(t1, PositionInFlatTree::inParentAfterNode(*n1).nodeAsRangeLastNode
()); |
96 EXPECT_EQ(t2, PositionInComposedTree::inParentAfterNode(*n2).nodeAsRangeLast
Node()); | 96 EXPECT_EQ(t2, PositionInFlatTree::inParentAfterNode(*n2).nodeAsRangeLastNode
()); |
97 EXPECT_EQ(t1, PositionInComposedTree::afterNode(host).nodeAsRangeLastNode())
; | 97 EXPECT_EQ(t1, PositionInFlatTree::afterNode(host).nodeAsRangeLastNode()); |
98 } | 98 } |
99 | 99 |
100 TEST_F(PositionTest, ToPositionInComposedTreeWithActiveInsertionPoint) | 100 TEST_F(PositionTest, ToPositionInFlatTreeWithActiveInsertionPoint) |
101 { | 101 { |
102 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; | 102 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; |
103 const char* shadowContent = "<a id='a'><content select=#one id='content'></c
ontent><content></content></a>"; | 103 const char* shadowContent = "<a id='a'><content select=#one id='content'></c
ontent><content></content></a>"; |
104 setBodyContent(bodyContent); | 104 setBodyContent(bodyContent); |
105 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 105 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
106 RefPtrWillBeRawPtr<Element> anchor = shadowRoot->getElementById("a"); | 106 RefPtrWillBeRawPtr<Element> anchor = shadowRoot->getElementById("a"); |
107 | 107 |
108 EXPECT_EQ(PositionInComposedTree(anchor.get(), 0), toPositionInComposedTree(
Position(anchor.get(), 0))); | 108 EXPECT_EQ(PositionInFlatTree(anchor.get(), 0), toPositionInFlatTree(Position
(anchor.get(), 0))); |
109 EXPECT_EQ(PositionInComposedTree(anchor.get(), 1), toPositionInComposedTree(
Position(anchor.get(), 1))); | 109 EXPECT_EQ(PositionInFlatTree(anchor.get(), 1), toPositionInFlatTree(Position
(anchor.get(), 1))); |
110 EXPECT_EQ(PositionInComposedTree(anchor, PositionAnchorType::AfterChildren),
toPositionInComposedTree(Position(anchor.get(), 2))); | 110 EXPECT_EQ(PositionInFlatTree(anchor, PositionAnchorType::AfterChildren), toP
ositionInFlatTree(Position(anchor.get(), 2))); |
111 } | 111 } |
112 | 112 |
113 TEST_F(PositionTest, ToPositionInComposedTreeWithInactiveInsertionPoint) | 113 TEST_F(PositionTest, ToPositionInFlatTreeWithInactiveInsertionPoint) |
114 { | 114 { |
115 const char* bodyContent = "<p id='p'><content></content></p>"; | 115 const char* bodyContent = "<p id='p'><content></content></p>"; |
116 setBodyContent(bodyContent); | 116 setBodyContent(bodyContent); |
117 RefPtrWillBeRawPtr<Element> anchor = document().getElementById("p"); | 117 RefPtrWillBeRawPtr<Element> anchor = document().getElementById("p"); |
118 | 118 |
119 EXPECT_EQ(PositionInComposedTree(anchor.get(), 0), toPositionInComposedTree(
Position(anchor.get(), 0))); | 119 EXPECT_EQ(PositionInFlatTree(anchor.get(), 0), toPositionInFlatTree(Position
(anchor.get(), 0))); |
120 EXPECT_EQ(PositionInComposedTree(anchor, PositionAnchorType::AfterChildren),
toPositionInComposedTree(Position(anchor.get(), 1))); | 120 EXPECT_EQ(PositionInFlatTree(anchor, PositionAnchorType::AfterChildren), toP
ositionInFlatTree(Position(anchor.get(), 1))); |
121 } | 121 } |
122 | 122 |
123 // This test comes from "editing/style/block-style-progress-crash.html". | 123 // This test comes from "editing/style/block-style-progress-crash.html". |
124 TEST_F(PositionTest, ToPositionInComposedTreeWithNotDistributed) | 124 TEST_F(PositionTest, ToPositionInFlatTreeWithNotDistributed) |
125 { | 125 { |
126 setBodyContent("<progress id=sample>foo</progress>"); | 126 setBodyContent("<progress id=sample>foo</progress>"); |
127 Element* sample = document().getElementById("sample"); | 127 Element* sample = document().getElementById("sample"); |
128 | 128 |
129 EXPECT_EQ(PositionInComposedTree(sample, PositionAnchorType::AfterChildren),
toPositionInComposedTree(Position(sample, 0))); | 129 EXPECT_EQ(PositionInFlatTree(sample, PositionAnchorType::AfterChildren), toP
ositionInFlatTree(Position(sample, 0))); |
130 } | 130 } |
131 | 131 |
132 TEST_F(PositionTest, ToPositionInComposedTreeWithShadowRoot) | 132 TEST_F(PositionTest, ToPositionInFlatTreeWithShadowRoot) |
133 { | 133 { |
134 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; | 134 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; |
135 const char* shadowContent = "<a><content select=#one></content></a>"; | 135 const char* shadowContent = "<a><content select=#one></content></a>"; |
136 setBodyContent(bodyContent); | 136 setBodyContent(bodyContent); |
137 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 137 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
138 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); | 138 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); |
139 | 139 |
140 EXPECT_EQ(PositionInComposedTree(host.get(), 0), toPositionInComposedTree(Po
sition(shadowRoot.get(), 0))); | 140 EXPECT_EQ(PositionInFlatTree(host.get(), 0), toPositionInFlatTree(Position(s
hadowRoot.get(), 0))); |
141 EXPECT_EQ(PositionInComposedTree(host.get(), PositionAnchorType::AfterChildr
en), toPositionInComposedTree(Position(shadowRoot.get(), 1))); | 141 EXPECT_EQ(PositionInFlatTree(host.get(), PositionAnchorType::AfterChildren),
toPositionInFlatTree(Position(shadowRoot.get(), 1))); |
142 } | 142 } |
143 | 143 |
144 TEST_F(PositionTest, ToPositionInComposedTreeWithShadowRootContainingSingleConte
nt) | 144 TEST_F(PositionTest, ToPositionInFlatTreeWithShadowRootContainingSingleContent) |
145 { | 145 { |
146 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; | 146 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; |
147 const char* shadowContent = "<content select=#one></content>"; | 147 const char* shadowContent = "<content select=#one></content>"; |
148 setBodyContent(bodyContent); | 148 setBodyContent(bodyContent); |
149 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 149 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
150 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); | 150 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); |
151 | 151 |
152 EXPECT_EQ(PositionInComposedTree(host.get(), 0), toPositionInComposedTree(Po
sition(shadowRoot.get(), 0))); | 152 EXPECT_EQ(PositionInFlatTree(host.get(), 0), toPositionInFlatTree(Position(s
hadowRoot.get(), 0))); |
153 EXPECT_EQ(PositionInComposedTree(host.get(), PositionAnchorType::AfterChildr
en), toPositionInComposedTree(Position(shadowRoot.get(), 1))); | 153 EXPECT_EQ(PositionInFlatTree(host.get(), PositionAnchorType::AfterChildren),
toPositionInFlatTree(Position(shadowRoot.get(), 1))); |
154 } | 154 } |
155 | 155 |
156 TEST_F(PositionTest, ToPositionInComposedTreeWithEmptyShadowRoot) | 156 TEST_F(PositionTest, ToPositionInFlatTreeWithEmptyShadowRoot) |
157 { | 157 { |
158 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; | 158 const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; |
159 const char* shadowContent = ""; | 159 const char* shadowContent = ""; |
160 setBodyContent(bodyContent); | 160 setBodyContent(bodyContent); |
161 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); | 161 RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent,
"host"); |
162 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); | 162 RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); |
163 | 163 |
164 EXPECT_EQ(PositionInComposedTree(host, PositionAnchorType::AfterChildren), t
oPositionInComposedTree(Position(shadowRoot.get(), 0))); | 164 EXPECT_EQ(PositionInFlatTree(host, PositionAnchorType::AfterChildren), toPos
itionInFlatTree(Position(shadowRoot.get(), 0))); |
165 } | 165 } |
166 | 166 |
167 } // namespace blink | 167 } // namespace blink |
OLD | NEW |