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

Side by Side Diff: third_party/WebKit/Source/core/editing/PositionIteratorTest.cpp

Issue 2725803002: Introduce PositionIteratorTest in webkit_unit_tests (Closed)
Patch Set: 2017-03-01T14:22:10 Created 3 years, 9 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
« no previous file with comments | « third_party/WebKit/Source/core/editing/PositionIterator.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 2017 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 "core/editing/PositionIterator.h"
6
7 #include "core/dom/shadow/FlatTreeTraversal.h"
8 #include "core/editing/EditingTestBase.h"
9
10 namespace blink {
11
12 class PositionIteratorTest : public EditingTestBase {};
13
14 // For http://crbug.com/695317
15 TEST_F(PositionIteratorTest, decrementWithInputElement) {
16 setBodyContent("123<input value='abc'>");
17 Element* const input = document().querySelector("input");
18 Node* const innerEditor = FlatTreeTraversal::firstChild(*input);
19 Node* const text = input->previousSibling();
20
21 // Decrement until start of "123" from INPUT on DOM tree
22 PositionIterator domIterator(Position::lastPositionInNode(document().body()));
yoichio 2017/03/01 06:08:49 Could you add EXPECT_EQ(Position::lastPositionInN
yosin_UTC9 2017/03/01 06:41:05 Done.
23 domIterator.decrement();
24 EXPECT_EQ(Position::afterNode(input), domIterator.computePosition());
25 domIterator.decrement();
26 EXPECT_EQ(Position::beforeNode(input), domIterator.computePosition());
27 domIterator.decrement();
28 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
29 domIterator.decrement();
30 EXPECT_EQ(Position(text, 3), domIterator.computePosition());
31
32 // Decrement until start of "123" from INPUT on flat tree
33 PositionIteratorInFlatTree flatIterator(
34 PositionInFlatTree::lastPositionInNode(document().body()));
35 flatIterator.decrement();
36 EXPECT_EQ(PositionInFlatTree::afterNode(input),
37 flatIterator.computePosition());
38 // TODO(yosin): We should not traverse inside INPUT
39 flatIterator.decrement();
40 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(innerEditor),
41 flatIterator.computePosition());
42 flatIterator.decrement();
43 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 3),
44 flatIterator.computePosition());
45 flatIterator.decrement();
46 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 2),
47 flatIterator.computePosition());
48 flatIterator.decrement();
49 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 1),
50 flatIterator.computePosition());
51 flatIterator.decrement();
52 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 0),
53 flatIterator.computePosition());
54 flatIterator.decrement();
55 EXPECT_EQ(PositionInFlatTree(innerEditor, 0), flatIterator.computePosition());
56 flatIterator.decrement();
57 EXPECT_EQ(PositionInFlatTree(input, 0), flatIterator.computePosition());
58 flatIterator.decrement();
59 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
60 flatIterator.computePosition());
61 flatIterator.decrement();
62 EXPECT_EQ(PositionInFlatTree(text, 3), flatIterator.computePosition());
63 }
64
65 TEST_F(PositionIteratorTest, decrementWithSelectElement) {
66 setBodyContent("123<select><option>1</option><option>2</option></select>");
67 Element* const select = document().querySelector("select");
68 Node* const option1 = select->firstChild();
69 Node* const option2 = select->lastChild();
70 Node* text = select->previousSibling();
71
72 // Decrement until start of "123" from SELECT on DOM tree
73 PositionIterator domIterator(Position::lastPositionInNode(document().body()));
74 domIterator.decrement();
75 EXPECT_EQ(Position::afterNode(select), domIterator.computePosition());
76 // TODO(yosin): We should not traverse inside SELECT and OPTION
77 domIterator.decrement();
78 EXPECT_EQ(Position::lastPositionInNode(option2),
79 domIterator.computePosition());
80 domIterator.decrement();
81 EXPECT_EQ(Position(option2->firstChild(), 1), domIterator.computePosition());
82 domIterator.decrement();
83 EXPECT_EQ(Position(option2, 0), domIterator.computePosition());
84 domIterator.decrement();
85 EXPECT_EQ(Position(select, 1), domIterator.computePosition());
86 domIterator.decrement();
87 EXPECT_EQ(Position::lastPositionInNode(option1),
88 domIterator.computePosition());
89 domIterator.decrement();
90 EXPECT_EQ(Position(option1->firstChild(), 1), domIterator.computePosition());
91 domIterator.decrement();
92 EXPECT_EQ(Position(option1, 0), domIterator.computePosition());
93 domIterator.decrement();
94 EXPECT_EQ(Position(select, 0), domIterator.computePosition());
95 domIterator.decrement();
96 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
97 domIterator.decrement();
98 EXPECT_EQ(Position(text, 3), domIterator.computePosition());
99
100 // Decrement until start of "123" from SELECT on flat tree
101 PositionIteratorInFlatTree flatIterator(
102 PositionInFlatTree::lastPositionInNode(document().body()));
103 flatIterator.decrement();
104 EXPECT_EQ(PositionInFlatTree::afterNode(select),
105 flatIterator.computePosition());
106 // TODO(yosin): We should not traverse inside SELECT and OPTION
107 // Traverse |option2|
108 flatIterator.decrement();
109 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(option2),
110 flatIterator.computePosition());
111 flatIterator.decrement();
112 EXPECT_EQ(PositionInFlatTree(FlatTreeTraversal::firstChild(*option2), 1),
113 flatIterator.computePosition());
114 flatIterator.decrement();
115 EXPECT_EQ(PositionInFlatTree(option2, 0), flatIterator.computePosition());
116 flatIterator.decrement();
117 EXPECT_EQ(PositionInFlatTree(select, 1), flatIterator.computePosition());
118 // Traverse |option1|
119 flatIterator.decrement();
120 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(option1),
121 flatIterator.computePosition());
122 flatIterator.decrement();
123 EXPECT_EQ(PositionInFlatTree(FlatTreeTraversal::firstChild(*option1), 1),
124 flatIterator.computePosition());
125 flatIterator.decrement();
126 EXPECT_EQ(PositionInFlatTree(option1, 0), flatIterator.computePosition());
127 flatIterator.decrement();
128 EXPECT_EQ(PositionInFlatTree(select, 0), flatIterator.computePosition());
129 flatIterator.decrement();
130 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
131 flatIterator.computePosition());
132 flatIterator.decrement();
133 EXPECT_EQ(PositionInFlatTree(text, 3), flatIterator.computePosition());
134 }
135
136 // For http://crbug.com/695317
137 TEST_F(PositionIteratorTest, decrementWithTextAreaElement) {
138 setBodyContent("123<textarea>456</textarea>");
139 Element* const textarea = document().querySelector("textarea");
140 Node* const innerEditor = FlatTreeTraversal::firstChild(*textarea);
141 Node* const text = textarea->previousSibling();
142
143 // Decrement until end of "123" from after TEXTAREA on DOM tree
144 PositionIterator domIterator(Position::lastPositionInNode(document().body()));
145 domIterator.decrement();
146 EXPECT_EQ(Position::afterNode(textarea), domIterator.computePosition());
147 // TODO(yosin): We should not traverse inside TEXTAREA
148 domIterator.decrement();
149 EXPECT_EQ(Position(textarea->firstChild(), 3), domIterator.computePosition());
150 domIterator.decrement();
151 EXPECT_EQ(Position(textarea, 0), domIterator.computePosition());
152 domIterator.decrement();
153 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
154 domIterator.decrement();
155 EXPECT_EQ(Position(text, 3), domIterator.computePosition());
156
157 // Decrement until end of "123" from after TEXTAREA on flat tree
158 PositionIteratorInFlatTree flatIterator(
159 PositionInFlatTree::lastPositionInNode(document().body()));
160 flatIterator.decrement();
161 EXPECT_EQ(PositionInFlatTree::afterNode(textarea),
162 flatIterator.computePosition());
163 // TODO(yosin): We should not traverse inside TEXTAREA
164 // Traverse |innerEditor|
165 flatIterator.decrement();
166 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(innerEditor),
167 flatIterator.computePosition());
168 flatIterator.decrement();
169 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 3),
170 flatIterator.computePosition());
171 flatIterator.decrement();
172 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 2),
173 flatIterator.computePosition());
174 flatIterator.decrement();
175 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 1),
176 flatIterator.computePosition());
177 flatIterator.decrement();
178 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 0),
179 flatIterator.computePosition());
180 flatIterator.decrement();
181 EXPECT_EQ(PositionInFlatTree(innerEditor, 0), flatIterator.computePosition());
182 flatIterator.decrement();
183 EXPECT_EQ(PositionInFlatTree(textarea, 0), flatIterator.computePosition());
184 flatIterator.decrement();
185 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
186 flatIterator.computePosition());
187 flatIterator.decrement();
188 EXPECT_EQ(PositionInFlatTree(text, 3), flatIterator.computePosition());
189 }
190
191 // For http://crbug.com/695317
192 TEST_F(PositionIteratorTest, incrementWithInputElement) {
193 setBodyContent("<input value='abc'>123");
194 Element* const input = document().querySelector("input");
195 Node* const innerEditor = FlatTreeTraversal::firstChild(*input);
196 Node* const text = input->nextSibling();
197
198 // Increment until start of "123" from INPUT on DOM tree
199 PositionIterator domIterator(
200 Position::firstPositionInNode(document().body()));
201 domIterator.increment();
202 EXPECT_EQ(Position::beforeNode(input), domIterator.computePosition());
203 domIterator.increment();
204 EXPECT_EQ(Position::afterNode(input), domIterator.computePosition());
205 domIterator.increment();
206 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
207 domIterator.increment();
208 EXPECT_EQ(Position(text, 0), domIterator.computePosition());
209
210 // Increment until start of "123" from INPUT on flat tree
211 PositionIteratorInFlatTree flatIterator(
212 PositionInFlatTree::firstPositionInNode(document().body()));
213 // TODO(yosin): We should not traverse inside INPUT
214 flatIterator.increment();
215 EXPECT_EQ(PositionInFlatTree(input, 0), flatIterator.computePosition());
216 flatIterator.increment();
217 EXPECT_EQ(PositionInFlatTree(innerEditor, 0), flatIterator.computePosition());
218 flatIterator.increment();
219 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 0),
220 flatIterator.computePosition());
221 flatIterator.increment();
222 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 1),
223 flatIterator.computePosition());
224 flatIterator.increment();
225 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 2),
226 flatIterator.computePosition());
227 flatIterator.increment();
228 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 3),
229 flatIterator.computePosition());
230 flatIterator.increment();
231 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(innerEditor),
232 flatIterator.computePosition());
233 flatIterator.increment();
234 EXPECT_EQ(PositionInFlatTree::afterNode(input),
235 flatIterator.computePosition());
236 flatIterator.increment();
237 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
238 flatIterator.computePosition());
239 flatIterator.increment();
240 EXPECT_EQ(PositionInFlatTree(text, 0), flatIterator.computePosition());
241 }
242
243 TEST_F(PositionIteratorTest, incrementWithSelectElement) {
244 setBodyContent("<select><option>1</option><option>2</option></select>123");
245 Element* const select = document().querySelector("select");
246 Node* const option1 = select->firstChild();
247 Node* const option2 = select->lastChild();
248 Node* const text = select->nextSibling();
249
250 // Increment until start of "123" from SELECT on DOM tree
251 PositionIterator domIterator(
252 Position::firstPositionInNode(document().body()));
253 // TODO(yosin): We should not traverse inside SELECT
254 domIterator.increment();
255 EXPECT_EQ(Position(select, 0), domIterator.computePosition());
256 domIterator.increment();
257 EXPECT_EQ(Position(option1, 0), domIterator.computePosition());
258 domIterator.increment();
259 EXPECT_EQ(Position(option1->firstChild(), 0), domIterator.computePosition());
260 domIterator.increment();
261 EXPECT_EQ(Position::lastPositionInNode(option1),
262 domIterator.computePosition());
263 domIterator.increment();
264 EXPECT_EQ(Position(select, 1), domIterator.computePosition());
265 domIterator.increment();
266 EXPECT_EQ(Position(option2, 0), domIterator.computePosition());
267 domIterator.increment();
268 EXPECT_EQ(Position(option2->firstChild(), 0), domIterator.computePosition());
269 domIterator.increment();
270 EXPECT_EQ(Position::lastPositionInNode(option2),
271 domIterator.computePosition());
272 domIterator.increment();
273 EXPECT_EQ(Position::afterNode(select), domIterator.computePosition());
274 domIterator.increment();
275 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
276 domIterator.increment();
277 EXPECT_EQ(Position(text, 0), domIterator.computePosition());
278
279 // Increment until start of "123" from SELECT on flat tree
280 PositionIteratorInFlatTree flatIterator(
281 PositionInFlatTree::firstPositionInNode(document().body()));
282 // TODO(yosin): We should not traverse inside SELECT
283 flatIterator.increment();
284 EXPECT_EQ(PositionInFlatTree(select, 0), flatIterator.computePosition());
285 flatIterator.increment();
286 // Traverse |option2|
287 EXPECT_EQ(PositionInFlatTree(option1, 0), flatIterator.computePosition());
288 flatIterator.increment();
289 EXPECT_EQ(PositionInFlatTree(FlatTreeTraversal::firstChild(*option1), 0),
290 flatIterator.computePosition());
291 flatIterator.increment();
292 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(option1),
293 flatIterator.computePosition());
294 flatIterator.increment();
295 EXPECT_EQ(PositionInFlatTree(select, 1), flatIterator.computePosition());
296 // Traverse |option2|
297 flatIterator.increment();
298 EXPECT_EQ(PositionInFlatTree(option2, 0), flatIterator.computePosition());
299 flatIterator.increment();
300 EXPECT_EQ(PositionInFlatTree(FlatTreeTraversal::firstChild(*option2), 0),
301 flatIterator.computePosition());
302 flatIterator.increment();
303 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(option2),
304 flatIterator.computePosition());
305 flatIterator.increment();
306 EXPECT_EQ(PositionInFlatTree::afterNode(select),
307 flatIterator.computePosition());
308 flatIterator.increment();
309 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
310 flatIterator.computePosition());
311 flatIterator.increment();
312 EXPECT_EQ(PositionInFlatTree(text, 0), flatIterator.computePosition());
313 }
314
315 // For http://crbug.com/695317
316 TEST_F(PositionIteratorTest, incrementWithTextAreaElement) {
317 setBodyContent("<textarea>123</textarea>456");
318 Element* const textarea = document().querySelector("textarea");
319 Node* const text = textarea->nextSibling();
320 Node* const innerEditor = FlatTreeTraversal::firstChild(*textarea);
321
322 // Increment until start of "123" from TEXTAREA on DOM tree
323 PositionIterator domIterator(
324 Position::firstPositionInNode(document().body()));
325 domIterator.increment();
326 EXPECT_EQ(Position(textarea, 0), domIterator.computePosition());
327 domIterator.increment();
328 EXPECT_EQ(Position(textarea->firstChild(), 0), domIterator.computePosition());
329 domIterator.increment();
330 EXPECT_EQ(Position::afterNode(textarea), domIterator.computePosition());
331 domIterator.increment();
332 EXPECT_EQ(Position(document().body(), 1), domIterator.computePosition());
333 domIterator.increment();
334 EXPECT_EQ(Position(text, 0), domIterator.computePosition());
335
336 // Increment until start of "123" from TEXTAREA on flat tree
337 PositionIteratorInFlatTree flatIterator(
338 PositionInFlatTree::firstPositionInNode(document().body()));
339 // TODO(yosin): We should not traverse inside TEXTAREA
340 flatIterator.increment();
341 EXPECT_EQ(PositionInFlatTree(textarea, 0), flatIterator.computePosition());
342 // Traverse |innerEditor|
343 flatIterator.increment();
344 EXPECT_EQ(PositionInFlatTree(innerEditor, 0), flatIterator.computePosition());
345 flatIterator.increment();
346 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 0),
347 flatIterator.computePosition());
348 flatIterator.increment();
349 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 1),
350 flatIterator.computePosition());
351 flatIterator.increment();
352 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 2),
353 flatIterator.computePosition());
354 flatIterator.increment();
355 EXPECT_EQ(PositionInFlatTree(innerEditor->firstChild(), 3),
356 flatIterator.computePosition());
357 flatIterator.increment();
358 EXPECT_EQ(PositionInFlatTree::lastPositionInNode(innerEditor),
359 flatIterator.computePosition());
360 flatIterator.increment();
361 EXPECT_EQ(PositionInFlatTree::afterNode(textarea),
362 flatIterator.computePosition());
363 flatIterator.increment();
364 EXPECT_EQ(PositionInFlatTree(document().body(), 1),
365 flatIterator.computePosition());
366 flatIterator.increment();
367 EXPECT_EQ(PositionInFlatTree(text, 0), flatIterator.computePosition());
368 }
369
370 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/PositionIterator.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698