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 { |
11 | 11 |
12 class PositionIteratorTest : public EditingTestBase {}; | 12 class PositionIteratorTest : public EditingTestBase {}; |
13 | 13 |
14 // For http://crbug.com/695317 | 14 // For http://crbug.com/695317 |
15 TEST_F(PositionIteratorTest, decrementWithInputElement) { | 15 TEST_F(PositionIteratorTest, decrementWithInputElement) { |
16 SetBodyContent("123<input value='abc'>"); | 16 SetBodyContent("123<input value='abc'>"); |
17 Element* const input = GetDocument().QuerySelector("input"); | 17 Element* const input = GetDocument().QuerySelector("input"); |
18 Node* const text = input->previousSibling(); | 18 Node* const text = input->previousSibling(); |
19 | 19 |
20 // Decrement until start of "123" from INPUT on DOM tree | 20 // Decrement until start of "123" from INPUT on DOM tree |
21 PositionIterator dom_iterator( | 21 PositionIterator dom_iterator( |
22 Position::LastPositionInNode(GetDocument().body())); | 22 Position::LastPositionInNode(*GetDocument().body())); |
23 EXPECT_EQ(Position::LastPositionInNode(GetDocument().body()), | 23 EXPECT_EQ(Position::LastPositionInNode(*GetDocument().body()), |
24 dom_iterator.ComputePosition()); | 24 dom_iterator.ComputePosition()); |
25 dom_iterator.Decrement(); | 25 dom_iterator.Decrement(); |
26 EXPECT_EQ(Position::AfterNode(*input), dom_iterator.ComputePosition()); | 26 EXPECT_EQ(Position::AfterNode(*input), dom_iterator.ComputePosition()); |
27 dom_iterator.Decrement(); | 27 dom_iterator.Decrement(); |
28 EXPECT_EQ(Position::BeforeNode(*input), dom_iterator.ComputePosition()); | 28 EXPECT_EQ(Position::BeforeNode(*input), dom_iterator.ComputePosition()); |
29 dom_iterator.Decrement(); | 29 dom_iterator.Decrement(); |
30 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 30 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
31 dom_iterator.Decrement(); | 31 dom_iterator.Decrement(); |
32 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); | 32 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); |
33 | 33 |
34 // Decrement until start of "123" from INPUT on flat tree | 34 // Decrement until start of "123" from INPUT on flat tree |
35 PositionIteratorInFlatTree flat_iterator( | 35 PositionIteratorInFlatTree flat_iterator( |
36 PositionInFlatTree::LastPositionInNode(GetDocument().body())); | 36 PositionInFlatTree::LastPositionInNode(*GetDocument().body())); |
37 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(GetDocument().body()), | 37 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(*GetDocument().body()), |
38 flat_iterator.ComputePosition()); | 38 flat_iterator.ComputePosition()); |
39 flat_iterator.Decrement(); | 39 flat_iterator.Decrement(); |
40 EXPECT_EQ(PositionInFlatTree::AfterNode(*input), | 40 EXPECT_EQ(PositionInFlatTree::AfterNode(*input), |
41 flat_iterator.ComputePosition()); | 41 flat_iterator.ComputePosition()); |
42 flat_iterator.Decrement(); | 42 flat_iterator.Decrement(); |
43 EXPECT_EQ(PositionInFlatTree::BeforeNode(*input), | 43 EXPECT_EQ(PositionInFlatTree::BeforeNode(*input), |
44 flat_iterator.ComputePosition()); | 44 flat_iterator.ComputePosition()); |
45 flat_iterator.Decrement(); | 45 flat_iterator.Decrement(); |
46 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 46 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
47 flat_iterator.ComputePosition()); | 47 flat_iterator.ComputePosition()); |
48 flat_iterator.Decrement(); | 48 flat_iterator.Decrement(); |
49 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); | 49 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); |
50 } | 50 } |
51 | 51 |
52 TEST_F(PositionIteratorTest, decrementWithSelectElement) { | 52 TEST_F(PositionIteratorTest, decrementWithSelectElement) { |
53 SetBodyContent("123<select><option>1</option><option>2</option></select>"); | 53 SetBodyContent("123<select><option>1</option><option>2</option></select>"); |
54 Element* const select = GetDocument().QuerySelector("select"); | 54 Element* const select = GetDocument().QuerySelector("select"); |
55 Node* text = select->previousSibling(); | 55 Node* text = select->previousSibling(); |
56 | 56 |
57 // Decrement until start of "123" from SELECT on DOM tree | 57 // Decrement until start of "123" from SELECT on DOM tree |
58 PositionIterator dom_iterator( | 58 PositionIterator dom_iterator( |
59 Position::LastPositionInNode(GetDocument().body())); | 59 Position::LastPositionInNode(*GetDocument().body())); |
60 EXPECT_EQ(Position::LastPositionInNode(GetDocument().body()), | 60 EXPECT_EQ(Position::LastPositionInNode(*GetDocument().body()), |
61 dom_iterator.ComputePosition()); | 61 dom_iterator.ComputePosition()); |
62 dom_iterator.Decrement(); | 62 dom_iterator.Decrement(); |
63 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()); | 63 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()); |
64 dom_iterator.Decrement(); | 64 dom_iterator.Decrement(); |
65 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()) | 65 EXPECT_EQ(Position::AfterNode(*select), dom_iterator.ComputePosition()) |
66 << "This is redundant result, we should not have. see " | 66 << "This is redundant result, we should not have. see " |
67 "http://crbug.com/697283"; | 67 "http://crbug.com/697283"; |
68 dom_iterator.Decrement(); | 68 dom_iterator.Decrement(); |
69 EXPECT_EQ(Position::BeforeNode(*select), dom_iterator.ComputePosition()); | 69 EXPECT_EQ(Position::BeforeNode(*select), dom_iterator.ComputePosition()); |
70 dom_iterator.Decrement(); | 70 dom_iterator.Decrement(); |
71 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 71 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
72 dom_iterator.Decrement(); | 72 dom_iterator.Decrement(); |
73 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); | 73 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); |
74 | 74 |
75 // Decrement until start of "123" from SELECT on flat tree | 75 // Decrement until start of "123" from SELECT on flat tree |
76 PositionIteratorInFlatTree flat_iterator( | 76 PositionIteratorInFlatTree flat_iterator( |
77 PositionInFlatTree::LastPositionInNode(GetDocument().body())); | 77 PositionInFlatTree::LastPositionInNode(*GetDocument().body())); |
78 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(GetDocument().body()), | 78 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(*GetDocument().body()), |
79 flat_iterator.ComputePosition()); | 79 flat_iterator.ComputePosition()); |
80 flat_iterator.Decrement(); | 80 flat_iterator.Decrement(); |
81 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), | 81 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), |
82 flat_iterator.ComputePosition()); | 82 flat_iterator.ComputePosition()); |
83 flat_iterator.Decrement(); | 83 flat_iterator.Decrement(); |
84 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), | 84 EXPECT_EQ(PositionInFlatTree::AfterNode(*select), |
85 flat_iterator.ComputePosition()) | 85 flat_iterator.ComputePosition()) |
86 << "This is redundant result, we should not have. see " | 86 << "This is redundant result, we should not have. see " |
87 "http://crbug.com/697283"; | 87 "http://crbug.com/697283"; |
88 flat_iterator.Decrement(); | 88 flat_iterator.Decrement(); |
89 EXPECT_EQ(PositionInFlatTree::BeforeNode(*select), | 89 EXPECT_EQ(PositionInFlatTree::BeforeNode(*select), |
90 flat_iterator.ComputePosition()); | 90 flat_iterator.ComputePosition()); |
91 flat_iterator.Decrement(); | 91 flat_iterator.Decrement(); |
92 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 92 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
93 flat_iterator.ComputePosition()); | 93 flat_iterator.ComputePosition()); |
94 flat_iterator.Decrement(); | 94 flat_iterator.Decrement(); |
95 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); | 95 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); |
96 } | 96 } |
97 | 97 |
98 // For http://crbug.com/695317 | 98 // For http://crbug.com/695317 |
99 TEST_F(PositionIteratorTest, decrementWithTextAreaElement) { | 99 TEST_F(PositionIteratorTest, decrementWithTextAreaElement) { |
100 SetBodyContent("123<textarea>456</textarea>"); | 100 SetBodyContent("123<textarea>456</textarea>"); |
101 Element* const textarea = GetDocument().QuerySelector("textarea"); | 101 Element* const textarea = GetDocument().QuerySelector("textarea"); |
102 Node* const text = textarea->previousSibling(); | 102 Node* const text = textarea->previousSibling(); |
103 | 103 |
104 // Decrement until end of "123" from after TEXTAREA on DOM tree | 104 // Decrement until end of "123" from after TEXTAREA on DOM tree |
105 PositionIterator dom_iterator( | 105 PositionIterator dom_iterator( |
106 Position::LastPositionInNode(GetDocument().body())); | 106 Position::LastPositionInNode(*GetDocument().body())); |
107 EXPECT_EQ(Position::LastPositionInNode(GetDocument().body()), | 107 EXPECT_EQ(Position::LastPositionInNode(*GetDocument().body()), |
108 dom_iterator.ComputePosition()); | 108 dom_iterator.ComputePosition()); |
109 dom_iterator.Decrement(); | 109 dom_iterator.Decrement(); |
110 EXPECT_EQ(Position::AfterNode(*textarea), dom_iterator.ComputePosition()); | 110 EXPECT_EQ(Position::AfterNode(*textarea), dom_iterator.ComputePosition()); |
111 dom_iterator.Decrement(); | 111 dom_iterator.Decrement(); |
112 EXPECT_EQ(Position::BeforeNode(*textarea), dom_iterator.ComputePosition()); | 112 EXPECT_EQ(Position::BeforeNode(*textarea), dom_iterator.ComputePosition()); |
113 dom_iterator.Decrement(); | 113 dom_iterator.Decrement(); |
114 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); | 114 EXPECT_EQ(Position(GetDocument().body(), 1), dom_iterator.ComputePosition()); |
115 dom_iterator.Decrement(); | 115 dom_iterator.Decrement(); |
116 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); | 116 EXPECT_EQ(Position(text, 3), dom_iterator.ComputePosition()); |
117 | 117 |
118 // Decrement until end of "123" from after TEXTAREA on flat tree | 118 // Decrement until end of "123" from after TEXTAREA on flat tree |
119 PositionIteratorInFlatTree flat_iterator( | 119 PositionIteratorInFlatTree flat_iterator( |
120 PositionInFlatTree::LastPositionInNode(GetDocument().body())); | 120 PositionInFlatTree::LastPositionInNode(*GetDocument().body())); |
121 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(GetDocument().body()), | 121 EXPECT_EQ(PositionInFlatTree::LastPositionInNode(*GetDocument().body()), |
122 flat_iterator.ComputePosition()); | 122 flat_iterator.ComputePosition()); |
123 flat_iterator.Decrement(); | 123 flat_iterator.Decrement(); |
124 EXPECT_EQ(PositionInFlatTree::AfterNode(*textarea), | 124 EXPECT_EQ(PositionInFlatTree::AfterNode(*textarea), |
125 flat_iterator.ComputePosition()); | 125 flat_iterator.ComputePosition()); |
126 flat_iterator.Decrement(); | 126 flat_iterator.Decrement(); |
127 EXPECT_EQ(PositionInFlatTree::BeforeNode(*textarea), | 127 EXPECT_EQ(PositionInFlatTree::BeforeNode(*textarea), |
128 flat_iterator.ComputePosition()); | 128 flat_iterator.ComputePosition()); |
129 flat_iterator.Decrement(); | 129 flat_iterator.Decrement(); |
130 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), | 130 EXPECT_EQ(PositionInFlatTree(GetDocument().body(), 1), |
131 flat_iterator.ComputePosition()); | 131 flat_iterator.ComputePosition()); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 |