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

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