| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/dom/StaticRange.h" | 5 #include "core/dom/StaticRange.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/core/v8/V8BindingForTesting.h" | 8 #include "bindings/core/v8/V8BindingForTesting.h" |
| 9 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
| 10 #include "core/dom/NodeList.h" | 10 #include "core/dom/NodeList.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 HTMLDocument& StaticRangeTest::document() const { | 42 HTMLDocument& StaticRangeTest::document() const { |
| 43 return *m_document; | 43 return *m_document; |
| 44 } | 44 } |
| 45 | 45 |
| 46 TEST_F(StaticRangeTest, SplitTextNodeRangeWithinText) { | 46 TEST_F(StaticRangeTest, SplitTextNodeRangeWithinText) { |
| 47 V8TestingScope scope; | 47 V8TestingScope scope; |
| 48 document().body()->setInnerHTML("1234"); | 48 document().body()->setInnerHTML("1234"); |
| 49 Text* oldText = toText(document().body()->firstChild()); | 49 Text* oldText = toText(document().body()->firstChild()); |
| 50 | 50 |
| 51 StaticRange* staticRange04 = | 51 StaticRange* staticRange04 = |
| 52 StaticRange::create(document(), oldText, 0, oldText, 4); | 52 StaticRange::create(document(), oldText, 0u, oldText, 4u); |
| 53 StaticRange* staticRange02 = | 53 StaticRange* staticRange02 = |
| 54 StaticRange::create(document(), oldText, 0, oldText, 2); | 54 StaticRange::create(document(), oldText, 0u, oldText, 2u); |
| 55 StaticRange* staticRange22 = | 55 StaticRange* staticRange22 = |
| 56 StaticRange::create(document(), oldText, 2, oldText, 2); | 56 StaticRange::create(document(), oldText, 2u, oldText, 2u); |
| 57 StaticRange* staticRange24 = | 57 StaticRange* staticRange24 = |
| 58 StaticRange::create(document(), oldText, 2, oldText, 4); | 58 StaticRange::create(document(), oldText, 2u, oldText, 4u); |
| 59 | 59 |
| 60 Range* range04 = staticRange04->toRange(ASSERT_NO_EXCEPTION); | 60 Range* range04 = staticRange04->toRange(ASSERT_NO_EXCEPTION); |
| 61 Range* range02 = staticRange02->toRange(ASSERT_NO_EXCEPTION); | 61 Range* range02 = staticRange02->toRange(ASSERT_NO_EXCEPTION); |
| 62 Range* range22 = staticRange22->toRange(ASSERT_NO_EXCEPTION); | 62 Range* range22 = staticRange22->toRange(ASSERT_NO_EXCEPTION); |
| 63 Range* range24 = staticRange24->toRange(ASSERT_NO_EXCEPTION); | 63 Range* range24 = staticRange24->toRange(ASSERT_NO_EXCEPTION); |
| 64 | 64 |
| 65 oldText->splitText(2, ASSERT_NO_EXCEPTION); | 65 oldText->splitText(2, ASSERT_NO_EXCEPTION); |
| 66 Text* newText = toText(oldText->nextSibling()); | 66 Text* newText = toText(oldText->nextSibling()); |
| 67 | 67 |
| 68 // Range should mutate. | 68 // Range should mutate. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 87 EXPECT_EQ(2u, range22->endOffset()); | 87 EXPECT_EQ(2u, range22->endOffset()); |
| 88 | 88 |
| 89 EXPECT_TRUE(range24->boundaryPointsValid()); | 89 EXPECT_TRUE(range24->boundaryPointsValid()); |
| 90 EXPECT_EQ(oldText, range24->startContainer()); | 90 EXPECT_EQ(oldText, range24->startContainer()); |
| 91 EXPECT_EQ(2u, range24->startOffset()); | 91 EXPECT_EQ(2u, range24->startOffset()); |
| 92 EXPECT_EQ(newText, range24->endContainer()); | 92 EXPECT_EQ(newText, range24->endContainer()); |
| 93 EXPECT_EQ(2u, range24->endOffset()); | 93 EXPECT_EQ(2u, range24->endOffset()); |
| 94 | 94 |
| 95 // StaticRange shouldn't mutate. | 95 // StaticRange shouldn't mutate. |
| 96 EXPECT_EQ(oldText, staticRange04->startContainer()); | 96 EXPECT_EQ(oldText, staticRange04->startContainer()); |
| 97 EXPECT_EQ(0, staticRange04->startOffset()); | 97 EXPECT_EQ(0u, staticRange04->startOffset()); |
| 98 EXPECT_EQ(oldText, staticRange04->endContainer()); | 98 EXPECT_EQ(oldText, staticRange04->endContainer()); |
| 99 EXPECT_EQ(4, staticRange04->endOffset()); | 99 EXPECT_EQ(4u, staticRange04->endOffset()); |
| 100 | 100 |
| 101 EXPECT_EQ(oldText, staticRange02->startContainer()); | 101 EXPECT_EQ(oldText, staticRange02->startContainer()); |
| 102 EXPECT_EQ(0, staticRange02->startOffset()); | 102 EXPECT_EQ(0u, staticRange02->startOffset()); |
| 103 EXPECT_EQ(oldText, staticRange02->endContainer()); | 103 EXPECT_EQ(oldText, staticRange02->endContainer()); |
| 104 EXPECT_EQ(2, staticRange02->endOffset()); | 104 EXPECT_EQ(2u, staticRange02->endOffset()); |
| 105 | 105 |
| 106 EXPECT_EQ(oldText, staticRange22->startContainer()); | 106 EXPECT_EQ(oldText, staticRange22->startContainer()); |
| 107 EXPECT_EQ(2, staticRange22->startOffset()); | 107 EXPECT_EQ(2u, staticRange22->startOffset()); |
| 108 EXPECT_EQ(oldText, staticRange22->endContainer()); | 108 EXPECT_EQ(oldText, staticRange22->endContainer()); |
| 109 EXPECT_EQ(2, staticRange22->endOffset()); | 109 EXPECT_EQ(2u, staticRange22->endOffset()); |
| 110 | 110 |
| 111 EXPECT_EQ(oldText, staticRange24->startContainer()); | 111 EXPECT_EQ(oldText, staticRange24->startContainer()); |
| 112 EXPECT_EQ(2, staticRange24->startOffset()); | 112 EXPECT_EQ(2u, staticRange24->startOffset()); |
| 113 EXPECT_EQ(oldText, staticRange24->endContainer()); | 113 EXPECT_EQ(oldText, staticRange24->endContainer()); |
| 114 EXPECT_EQ(4, staticRange24->endOffset()); | 114 EXPECT_EQ(4u, staticRange24->endOffset()); |
| 115 } | 115 } |
| 116 | 116 |
| 117 TEST_F(StaticRangeTest, SplitTextNodeRangeOutsideText) { | 117 TEST_F(StaticRangeTest, SplitTextNodeRangeOutsideText) { |
| 118 V8TestingScope scope; | 118 V8TestingScope scope; |
| 119 document().body()->setInnerHTML( | 119 document().body()->setInnerHTML( |
| 120 "<span id=\"outer\">0<span id=\"inner-left\">1</span>SPLITME<span " | 120 "<span id=\"outer\">0<span id=\"inner-left\">1</span>SPLITME<span " |
| 121 "id=\"inner-right\">2</span>3</span>"); | 121 "id=\"inner-right\">2</span>3</span>"); |
| 122 | 122 |
| 123 Element* outer = document().getElementById(AtomicString::fromUTF8("outer")); | 123 Element* outer = document().getElementById(AtomicString::fromUTF8("outer")); |
| 124 Element* innerLeft = | 124 Element* innerLeft = |
| 125 document().getElementById(AtomicString::fromUTF8("inner-left")); | 125 document().getElementById(AtomicString::fromUTF8("inner-left")); |
| 126 Element* innerRight = | 126 Element* innerRight = |
| 127 document().getElementById(AtomicString::fromUTF8("inner-right")); | 127 document().getElementById(AtomicString::fromUTF8("inner-right")); |
| 128 Text* oldText = toText(outer->childNodes()->item(2)); | 128 Text* oldText = toText(outer->childNodes()->item(2)); |
| 129 | 129 |
| 130 StaticRange* staticRangeOuterOutside = | 130 StaticRange* staticRangeOuterOutside = |
| 131 StaticRange::create(document(), outer, 0, outer, 5); | 131 StaticRange::create(document(), outer, 0u, outer, 5u); |
| 132 StaticRange* staticRangeOuterInside = | 132 StaticRange* staticRangeOuterInside = |
| 133 StaticRange::create(document(), outer, 1, outer, 4); | 133 StaticRange::create(document(), outer, 1u, outer, 4u); |
| 134 StaticRange* staticRangeOuterSurroundingText = | 134 StaticRange* staticRangeOuterSurroundingText = |
| 135 StaticRange::create(document(), outer, 2, outer, 3); | 135 StaticRange::create(document(), outer, 2u, outer, 3u); |
| 136 StaticRange* staticRangeInnerLeft = | 136 StaticRange* staticRangeInnerLeft = |
| 137 StaticRange::create(document(), innerLeft, 0, innerLeft, 1); | 137 StaticRange::create(document(), innerLeft, 0u, innerLeft, 1u); |
| 138 StaticRange* staticRangeInnerRight = | 138 StaticRange* staticRangeInnerRight = |
| 139 StaticRange::create(document(), innerRight, 0, innerRight, 1); | 139 StaticRange::create(document(), innerRight, 0u, innerRight, 1u); |
| 140 StaticRange* staticRangeFromTextToMiddleOfElement = | 140 StaticRange* staticRangeFromTextToMiddleOfElement = |
| 141 StaticRange::create(document(), oldText, 6, outer, 3); | 141 StaticRange::create(document(), oldText, 6u, outer, 3u); |
| 142 | 142 |
| 143 Range* rangeOuterOutside = | 143 Range* rangeOuterOutside = |
| 144 staticRangeOuterOutside->toRange(ASSERT_NO_EXCEPTION); | 144 staticRangeOuterOutside->toRange(ASSERT_NO_EXCEPTION); |
| 145 Range* rangeOuterInside = | 145 Range* rangeOuterInside = |
| 146 staticRangeOuterInside->toRange(ASSERT_NO_EXCEPTION); | 146 staticRangeOuterInside->toRange(ASSERT_NO_EXCEPTION); |
| 147 Range* rangeOuterSurroundingText = | 147 Range* rangeOuterSurroundingText = |
| 148 staticRangeOuterSurroundingText->toRange(ASSERT_NO_EXCEPTION); | 148 staticRangeOuterSurroundingText->toRange(ASSERT_NO_EXCEPTION); |
| 149 Range* rangeInnerLeft = staticRangeInnerLeft->toRange(ASSERT_NO_EXCEPTION); | 149 Range* rangeInnerLeft = staticRangeInnerLeft->toRange(ASSERT_NO_EXCEPTION); |
| 150 Range* rangeInnerRight = staticRangeInnerRight->toRange(ASSERT_NO_EXCEPTION); | 150 Range* rangeInnerRight = staticRangeInnerRight->toRange(ASSERT_NO_EXCEPTION); |
| 151 Range* rangeFromTextToMiddleOfElement = | 151 Range* rangeFromTextToMiddleOfElement = |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 EXPECT_EQ(1u, rangeInnerRight->endOffset()); | 188 EXPECT_EQ(1u, rangeInnerRight->endOffset()); |
| 189 | 189 |
| 190 EXPECT_TRUE(rangeFromTextToMiddleOfElement->boundaryPointsValid()); | 190 EXPECT_TRUE(rangeFromTextToMiddleOfElement->boundaryPointsValid()); |
| 191 EXPECT_EQ(newText, rangeFromTextToMiddleOfElement->startContainer()); | 191 EXPECT_EQ(newText, rangeFromTextToMiddleOfElement->startContainer()); |
| 192 EXPECT_EQ(3u, rangeFromTextToMiddleOfElement->startOffset()); | 192 EXPECT_EQ(3u, rangeFromTextToMiddleOfElement->startOffset()); |
| 193 EXPECT_EQ(outer, rangeFromTextToMiddleOfElement->endContainer()); | 193 EXPECT_EQ(outer, rangeFromTextToMiddleOfElement->endContainer()); |
| 194 EXPECT_EQ(4u, rangeFromTextToMiddleOfElement->endOffset()); | 194 EXPECT_EQ(4u, rangeFromTextToMiddleOfElement->endOffset()); |
| 195 | 195 |
| 196 // StaticRange shouldn't mutate. | 196 // StaticRange shouldn't mutate. |
| 197 EXPECT_EQ(outer, staticRangeOuterOutside->startContainer()); | 197 EXPECT_EQ(outer, staticRangeOuterOutside->startContainer()); |
| 198 EXPECT_EQ(0, staticRangeOuterOutside->startOffset()); | 198 EXPECT_EQ(0u, staticRangeOuterOutside->startOffset()); |
| 199 EXPECT_EQ(outer, staticRangeOuterOutside->endContainer()); | 199 EXPECT_EQ(outer, staticRangeOuterOutside->endContainer()); |
| 200 EXPECT_EQ(5, staticRangeOuterOutside->endOffset()); | 200 EXPECT_EQ(5u, staticRangeOuterOutside->endOffset()); |
| 201 | 201 |
| 202 EXPECT_EQ(outer, staticRangeOuterInside->startContainer()); | 202 EXPECT_EQ(outer, staticRangeOuterInside->startContainer()); |
| 203 EXPECT_EQ(1, staticRangeOuterInside->startOffset()); | 203 EXPECT_EQ(1u, staticRangeOuterInside->startOffset()); |
| 204 EXPECT_EQ(outer, staticRangeOuterInside->endContainer()); | 204 EXPECT_EQ(outer, staticRangeOuterInside->endContainer()); |
| 205 EXPECT_EQ(4, staticRangeOuterInside->endOffset()); | 205 EXPECT_EQ(4u, staticRangeOuterInside->endOffset()); |
| 206 | 206 |
| 207 EXPECT_EQ(outer, staticRangeOuterSurroundingText->startContainer()); | 207 EXPECT_EQ(outer, staticRangeOuterSurroundingText->startContainer()); |
| 208 EXPECT_EQ(2, staticRangeOuterSurroundingText->startOffset()); | 208 EXPECT_EQ(2u, staticRangeOuterSurroundingText->startOffset()); |
| 209 EXPECT_EQ(outer, staticRangeOuterSurroundingText->endContainer()); | 209 EXPECT_EQ(outer, staticRangeOuterSurroundingText->endContainer()); |
| 210 EXPECT_EQ(3, staticRangeOuterSurroundingText->endOffset()); | 210 EXPECT_EQ(3u, staticRangeOuterSurroundingText->endOffset()); |
| 211 | 211 |
| 212 EXPECT_EQ(innerLeft, staticRangeInnerLeft->startContainer()); | 212 EXPECT_EQ(innerLeft, staticRangeInnerLeft->startContainer()); |
| 213 EXPECT_EQ(0, staticRangeInnerLeft->startOffset()); | 213 EXPECT_EQ(0u, staticRangeInnerLeft->startOffset()); |
| 214 EXPECT_EQ(innerLeft, staticRangeInnerLeft->endContainer()); | 214 EXPECT_EQ(innerLeft, staticRangeInnerLeft->endContainer()); |
| 215 EXPECT_EQ(1, staticRangeInnerLeft->endOffset()); | 215 EXPECT_EQ(1u, staticRangeInnerLeft->endOffset()); |
| 216 | 216 |
| 217 EXPECT_EQ(innerRight, staticRangeInnerRight->startContainer()); | 217 EXPECT_EQ(innerRight, staticRangeInnerRight->startContainer()); |
| 218 EXPECT_EQ(0, staticRangeInnerRight->startOffset()); | 218 EXPECT_EQ(0u, staticRangeInnerRight->startOffset()); |
| 219 EXPECT_EQ(innerRight, staticRangeInnerRight->endContainer()); | 219 EXPECT_EQ(innerRight, staticRangeInnerRight->endContainer()); |
| 220 EXPECT_EQ(1, staticRangeInnerRight->endOffset()); | 220 EXPECT_EQ(1u, staticRangeInnerRight->endOffset()); |
| 221 | 221 |
| 222 EXPECT_EQ(oldText, staticRangeFromTextToMiddleOfElement->startContainer()); | 222 EXPECT_EQ(oldText, staticRangeFromTextToMiddleOfElement->startContainer()); |
| 223 EXPECT_EQ(6, staticRangeFromTextToMiddleOfElement->startOffset()); | 223 EXPECT_EQ(6u, staticRangeFromTextToMiddleOfElement->startOffset()); |
| 224 EXPECT_EQ(outer, staticRangeFromTextToMiddleOfElement->endContainer()); | 224 EXPECT_EQ(outer, staticRangeFromTextToMiddleOfElement->endContainer()); |
| 225 EXPECT_EQ(3, staticRangeFromTextToMiddleOfElement->endOffset()); | 225 EXPECT_EQ(3u, staticRangeFromTextToMiddleOfElement->endOffset()); |
| 226 } | 226 } |
| 227 | 227 |
| 228 TEST_F(StaticRangeTest, InvalidToRange) { | 228 TEST_F(StaticRangeTest, InvalidToRange) { |
| 229 V8TestingScope scope; | 229 V8TestingScope scope; |
| 230 document().body()->setInnerHTML("1234"); | 230 document().body()->setInnerHTML("1234"); |
| 231 Text* oldText = toText(document().body()->firstChild()); | 231 Text* oldText = toText(document().body()->firstChild()); |
| 232 | 232 |
| 233 StaticRange* staticRange04 = | 233 StaticRange* staticRange04 = |
| 234 StaticRange::create(document(), oldText, 0, oldText, 4); | 234 StaticRange::create(document(), oldText, 0u, oldText, 4u); |
| 235 | 235 |
| 236 // Valid StaticRange. | 236 // Valid StaticRange. |
| 237 staticRange04->toRange(ASSERT_NO_EXCEPTION); | 237 staticRange04->toRange(ASSERT_NO_EXCEPTION); |
| 238 | 238 |
| 239 oldText->splitText(2, ASSERT_NO_EXCEPTION); | 239 oldText->splitText(2, ASSERT_NO_EXCEPTION); |
| 240 // StaticRange shouldn't mutate, endOffset() become invalid after splitText(). | 240 // StaticRange shouldn't mutate, endOffset() become invalid after splitText(). |
| 241 EXPECT_EQ(oldText, staticRange04->startContainer()); | 241 EXPECT_EQ(oldText, staticRange04->startContainer()); |
| 242 EXPECT_EQ(0, staticRange04->startOffset()); | 242 EXPECT_EQ(0u, staticRange04->startOffset()); |
| 243 EXPECT_EQ(oldText, staticRange04->endContainer()); | 243 EXPECT_EQ(oldText, staticRange04->endContainer()); |
| 244 EXPECT_EQ(4, staticRange04->endOffset()); | 244 EXPECT_EQ(4u, staticRange04->endOffset()); |
| 245 | 245 |
| 246 // Invalid StaticRange. | 246 // Invalid StaticRange. |
| 247 DummyExceptionStateForTesting exceptionState; | 247 DummyExceptionStateForTesting exceptionState; |
| 248 staticRange04->toRange(exceptionState); | 248 staticRange04->toRange(exceptionState); |
| 249 EXPECT_TRUE(exceptionState.hadException()); | 249 EXPECT_TRUE(exceptionState.hadException()); |
| 250 } | 250 } |
| 251 | 251 |
| 252 } // namespace blink | 252 } // namespace blink |
| OLD | NEW |