OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/PositionIterator.h" | 5 #include "core/editing/PositionIterator.h" |
6 | 6 |
7 #include "core/dom/shadow/FlatTreeTraversal.h" | 7 #include "core/dom/shadow/FlatTreeTraversal.h" |
8 #include "core/editing/EditingTestBase.h" | 8 #include "core/editing/EditingTestBase.h" |
9 | 9 |
10 namespace blink { | 10 namespace blink { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 } | 134 } |
135 | 135 |
136 // For http://crbug.com/695317 | 136 // For http://crbug.com/695317 |
137 TEST_F(PositionIteratorTest, incrementWithInputElement) { | 137 TEST_F(PositionIteratorTest, incrementWithInputElement) { |
138 SetBodyContent("<input value='abc'>123"); | 138 SetBodyContent("<input value='abc'>123"); |
139 Element* const input = GetDocument().QuerySelector("input"); | 139 Element* const input = GetDocument().QuerySelector("input"); |
140 Node* const text = input->nextSibling(); | 140 Node* const text = input->nextSibling(); |
141 | 141 |
142 // Increment until start of "123" from INPUT on DOM tree | 142 // Increment until start of "123" from INPUT on DOM tree |
143 PositionIterator dom_iterator( | 143 PositionIterator dom_iterator( |
144 Position::FirstPositionInNode(GetDocument().body())); | 144 Position::FirstPositionInNode(*GetDocument().body())); |
145 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); | 145 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); |
146 dom_iterator.Increment(); | 146 dom_iterator.Increment(); |
147 EXPECT_EQ(Position::BeforeNode(*input), dom_iterator.ComputePosition()); | 147 EXPECT_EQ(Position::BeforeNode(*input), dom_iterator.ComputePosition()); |
148 dom_iterator.Increment(); | 148 dom_iterator.Increment(); |
149 EXPECT_EQ(Position::AfterNode(*input), dom_iterator.ComputePosition()); | 149 EXPECT_EQ(Position::AfterNode(*input), dom_iterator.ComputePosition()); |
150 dom_iterator.Increment(); | 150 dom_iterator.Increment(); |
151 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 151 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
152 dom_iterator.Increment(); | 152 dom_iterator.Increment(); |
153 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); | 153 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); |
154 | 154 |
155 // Increment until start of "123" from INPUT on flat tree | 155 // Increment until start of "123" from INPUT on flat tree |
156 PositionIteratorInFlatTree flat_iterator( | 156 PositionIteratorInFlatTree flat_iterator( |
157 PositionInFlatTree::FirstPositionInNode(GetDocument().body())); | 157 PositionInFlatTree::FirstPositionInNode(*GetDocument().body())); |
158 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), | 158 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), |
159 flat_iterator.ComputePosition()); | 159 flat_iterator.ComputePosition()); |
160 flat_iterator.Increment(); | 160 flat_iterator.Increment(); |
161 EXPECT_EQ(PositionInFlatTree::BeforeNode(*input), | 161 EXPECT_EQ(PositionInFlatTree::BeforeNode(*input), |
162 flat_iterator.ComputePosition()); | 162 flat_iterator.ComputePosition()); |
163 flat_iterator.Increment(); | 163 flat_iterator.Increment(); |
164 EXPECT_EQ(PositionInFlatTree::AfterNode(*input), | 164 EXPECT_EQ(PositionInFlatTree::AfterNode(*input), |
165 flat_iterator.ComputePosition()); | 165 flat_iterator.ComputePosition()); |
166 flat_iterator.Increment(); | 166 flat_iterator.Increment(); |
167 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 167 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
168 flat_iterator.ComputePosition()); | 168 flat_iterator.ComputePosition()); |
169 flat_iterator.Increment(); | 169 flat_iterator.Increment(); |
170 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); | 170 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); |
171 } | 171 } |
172 | 172 |
173 TEST_F(PositionIteratorTest, incrementWithSelectElement) { | 173 TEST_F(PositionIteratorTest, incrementWithSelectElement) { |
174 SetBodyContent("<select><option>1</option><option>2</option></select>123"); | 174 SetBodyContent("<select><option>1</option><option>2</option></select>123"); |
175 Element* const select = GetDocument().QuerySelector("select"); | 175 Element* const select = GetDocument().QuerySelector("select"); |
176 Node* const text = select->nextSibling(); | 176 Node* const text = select->nextSibling(); |
177 | 177 |
178 // Increment until start of "123" from SELECT on DOM tree | 178 // Increment until start of "123" from SELECT on DOM tree |
179 PositionIterator dom_iterator( | 179 PositionIterator dom_iterator( |
180 Position::FirstPositionInNode(GetDocument().body())); | 180 Position::FirstPositionInNode(*GetDocument().body())); |
181 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); | 181 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); |
182 dom_iterator.Increment(); | 182 dom_iterator.Increment(); |
183 EXPECT_EQ(Position::BeforeNode(*select), dom_iterator.ComputePosition()); | 183 EXPECT_EQ(Position::BeforeNode(*select), dom_iterator.ComputePosition()); |
184 dom_iterator.Increment(); | 184 dom_iterator.Increment(); |
185 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()); | 185 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()); |
186 dom_iterator.Increment(); | 186 dom_iterator.Increment(); |
187 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()) | 187 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()) |
188 << "This is redundant result, we should not have. see " | 188 << "This is redundant result, we should not have. see " |
189 "http://crbug.com/697283"; | 189 "http://crbug.com/697283"; |
190 dom_iterator.Increment(); | 190 dom_iterator.Increment(); |
191 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 191 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
192 dom_iterator.Increment(); | 192 dom_iterator.Increment(); |
193 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); | 193 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); |
194 | 194 |
195 // Increment until start of "123" from SELECT on flat tree | 195 // Increment until start of "123" from SELECT on flat tree |
196 PositionIteratorInFlatTree flat_iterator( | 196 PositionIteratorInFlatTree flat_iterator( |
197 PositionInFlatTree::FirstPositionInNode(GetDocument().body())); | 197 PositionInFlatTree::FirstPositionInNode(*GetDocument().body())); |
198 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), | 198 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), |
199 flat_iterator.ComputePosition()); | 199 flat_iterator.ComputePosition()); |
200 flat_iterator.Increment(); | 200 flat_iterator.Increment(); |
201 EXPECT_EQ(PositionInFlatTree::BeforeNode(*select), | 201 EXPECT_EQ(PositionInFlatTree::BeforeNode(*select), |
202 flat_iterator.ComputePosition()); | 202 flat_iterator.ComputePosition()); |
203 flat_iterator.Increment(); | 203 flat_iterator.Increment(); |
204 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), | 204 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), |
205 flat_iterator.ComputePosition()); | 205 flat_iterator.ComputePosition()); |
206 flat_iterator.Increment(); | 206 flat_iterator.Increment(); |
207 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), | 207 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), |
208 flat_iterator.ComputePosition()) | 208 flat_iterator.ComputePosition()) |
209 << "This is redundant result, we should not have. see " | 209 << "This is redundant result, we should not have. see " |
210 "http://crbug.com/697283"; | 210 "http://crbug.com/697283"; |
211 flat_iterator.Increment(); | 211 flat_iterator.Increment(); |
212 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 212 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
213 flat_iterator.ComputePosition()); | 213 flat_iterator.ComputePosition()); |
214 flat_iterator.Increment(); | 214 flat_iterator.Increment(); |
215 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); | 215 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); |
216 } | 216 } |
217 | 217 |
218 // For http://crbug.com/695317 | 218 // For http://crbug.com/695317 |
219 TEST_F(PositionIteratorTest, incrementWithTextAreaElement) { | 219 TEST_F(PositionIteratorTest, incrementWithTextAreaElement) { |
220 SetBodyContent("<textarea>123</textarea>456"); | 220 SetBodyContent("<textarea>123</textarea>456"); |
221 Element* const textarea = GetDocument().QuerySelector("textarea"); | 221 Element* const textarea = GetDocument().QuerySelector("textarea"); |
222 Node* const text = textarea->nextSibling(); | 222 Node* const text = textarea->nextSibling(); |
223 | 223 |
224 // Increment until start of "123" from TEXTAREA on DOM tree | 224 // Increment until start of "123" from TEXTAREA on DOM tree |
225 PositionIterator dom_iterator( | 225 PositionIterator dom_iterator( |
226 Position::FirstPositionInNode(GetDocument().body())); | 226 Position::FirstPositionInNode(*GetDocument().body())); |
227 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); | 227 EXPECT_EQ(Position(GetDocument().body(), 0), dom_iterator.ComputePosition()); |
228 dom_iterator.Increment(); | 228 dom_iterator.Increment(); |
229 EXPECT_EQ(Position::BeforeNode(*textarea), dom_iterator.ComputePosition()); | 229 EXPECT_EQ(Position::BeforeNode(*textarea), dom_iterator.ComputePosition()); |
230 dom_iterator.Increment(); | 230 dom_iterator.Increment(); |
231 EXPECT_EQ(Position::AfterNode(*textarea), dom_iterator.ComputePosition()); | 231 EXPECT_EQ(Position::AfterNode(*textarea), dom_iterator.ComputePosition()); |
232 dom_iterator.Increment(); | 232 dom_iterator.Increment(); |
233 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 233 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
234 dom_iterator.Increment(); | 234 dom_iterator.Increment(); |
235 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); | 235 EXPECT_EQ(Position(text, 0), dom_iterator.ComputePosition()); |
236 | 236 |
237 // Increment until start of "123" from TEXTAREA on flat tree | 237 // Increment until start of "123" from TEXTAREA on flat tree |
238 PositionIteratorInFlatTree flat_iterator( | 238 PositionIteratorInFlatTree flat_iterator( |
239 PositionInFlatTree::FirstPositionInNode(GetDocument().body())); | 239 PositionInFlatTree::FirstPositionInNode(*GetDocument().body())); |
240 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), | 240 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 0), |
241 flat_iterator.ComputePosition()); | 241 flat_iterator.ComputePosition()); |
242 // TODO(yosin): We should not traverse inside TEXTAREA | 242 // TODO(yosin): We should not traverse inside TEXTAREA |
243 flat_iterator.Increment(); | 243 flat_iterator.Increment(); |
244 EXPECT_EQ(PositionInFlatTree::BeforeNode(*textarea), | 244 EXPECT_EQ(PositionInFlatTree::BeforeNode(*textarea), |
245 flat_iterator.ComputePosition()); | 245 flat_iterator.ComputePosition()); |
246 flat_iterator.Increment(); | 246 flat_iterator.Increment(); |
247 EXPECT_EQ(PositionInFlatTree::AfterNode(*textarea), | 247 EXPECT_EQ(PositionInFlatTree::AfterNode(*textarea), |
248 flat_iterator.ComputePosition()); | 248 flat_iterator.ComputePosition()); |
249 flat_iterator.Increment(); | 249 flat_iterator.Increment(); |
250 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 250 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
251 flat_iterator.ComputePosition()); | 251 flat_iterator.ComputePosition()); |
252 flat_iterator.Increment(); | 252 flat_iterator.Increment(); |
253 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); | 253 EXPECT_EQ(PositionInFlatTree(text, 0), flat_iterator.ComputePosition()); |
254 } | 254 } |
255 | 255 |
256 } // namespace blink | 256 } // namespace blink |
OLD | NEW |