| 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()); |
| 132 flat_iterator.Decrement(); | 132 flat_iterator.Decrement(); |
| 133 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); | 133 EXPECT_EQ(PositionInFlatTree(text, 3), flat_iterator.ComputePosition()); |
| 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 |