OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/VisiblePosition.h" | 5 #include "core/editing/VisiblePosition.h" |
6 | 6 |
| 7 #include "core/css/CSSStyleDeclaration.h" |
7 #include "core/editing/EditingTestBase.h" | 8 #include "core/editing/EditingTestBase.h" |
8 #include "core/editing/VisibleUnits.h" | 9 #include "core/editing/VisibleUnits.h" |
9 | 10 |
10 namespace blink { | 11 namespace blink { |
11 | 12 |
12 class VisiblePositionTest : public EditingTestBase { | 13 class VisiblePositionTest : public EditingTestBase { |
13 }; | 14 }; |
14 | 15 |
15 TEST_F(VisiblePositionTest, ShadowV0DistributedNodes) | 16 TEST_F(VisiblePositionTest, ShadowV0DistributedNodes) |
16 { | 17 { |
(...skipping 12 matching lines...) Expand all Loading... |
29 EXPECT_EQ(Position(one->firstChild(), 0), createVisiblePosition(Position(one
, 0)).deepEquivalent()); | 30 EXPECT_EQ(Position(one->firstChild(), 0), createVisiblePosition(Position(one
, 0)).deepEquivalent()); |
30 EXPECT_EQ(Position(one->firstChild(), 2), canonicalPositionOf(Position(two,
0))); | 31 EXPECT_EQ(Position(one->firstChild(), 2), canonicalPositionOf(Position(two,
0))); |
31 EXPECT_EQ(Position(one->firstChild(), 2), createVisiblePosition(Position(two
, 0)).deepEquivalent()); | 32 EXPECT_EQ(Position(one->firstChild(), 2), createVisiblePosition(Position(two
, 0)).deepEquivalent()); |
32 | 33 |
33 EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), canonicalPositionOf(Pos
itionInFlatTree(one, 0))); | 34 EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), canonicalPositionOf(Pos
itionInFlatTree(one, 0))); |
34 EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), createVisiblePosition(P
ositionInFlatTree(one, 0)).deepEquivalent()); | 35 EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), createVisiblePosition(P
ositionInFlatTree(one, 0)).deepEquivalent()); |
35 EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), canonicalPositionOf(Pos
itionInFlatTree(two, 0))); | 36 EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), canonicalPositionOf(Pos
itionInFlatTree(two, 0))); |
36 EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), createVisiblePosition(P
ositionInFlatTree(two, 0)).deepEquivalent()); | 37 EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), createVisiblePosition(P
ositionInFlatTree(two, 0)).deepEquivalent()); |
37 } | 38 } |
38 | 39 |
| 40 #if DCHECK_IS_ON() |
| 41 |
| 42 TEST_F(VisiblePositionTest, NullIsValid) |
| 43 { |
| 44 EXPECT_TRUE(VisiblePosition().isValid()); |
| 45 } |
| 46 |
| 47 TEST_F(VisiblePositionTest, NonNullIsValidBeforeMutation) |
| 48 { |
| 49 setBodyContent("<p>one</p>"); |
| 50 |
| 51 Element* paragraph = document().querySelector("p"); |
| 52 Position position(paragraph->firstChild(), 1); |
| 53 EXPECT_TRUE(createVisiblePosition(position).isValid()); |
| 54 } |
| 55 |
| 56 TEST_F(VisiblePositionTest, NonNullInvalidatedAfterDOMChange) |
| 57 { |
| 58 setBodyContent("<p>one</p>"); |
| 59 |
| 60 Element* paragraph = document().querySelector("p"); |
| 61 Position position(paragraph->firstChild(), 1); |
| 62 VisiblePosition nullVisiblePosition; |
| 63 VisiblePosition nonNullVisiblePosition = createVisiblePosition(position); |
| 64 |
| 65 Element* div = document().createElement("div", ASSERT_NO_EXCEPTION); |
| 66 document().body()->appendChild(div); |
| 67 |
| 68 EXPECT_TRUE(nullVisiblePosition.isValid()); |
| 69 EXPECT_FALSE(nonNullVisiblePosition.isValid()); |
| 70 |
| 71 updateAllLifecyclePhases(); |
| 72 |
| 73 // Invalid VisiblePosition can never become valid again. |
| 74 EXPECT_FALSE(nonNullVisiblePosition.isValid()); |
| 75 } |
| 76 |
| 77 TEST_F(VisiblePositionTest, NonNullInvalidatedAfterStyleChange) |
| 78 { |
| 79 setBodyContent("<div>one</div><p>two</p>"); |
| 80 |
| 81 Element* paragraph = document().querySelector("p"); |
| 82 Element* div = document().querySelector("div"); |
| 83 Position position(paragraph->firstChild(), 1); |
| 84 |
| 85 VisiblePosition visiblePosition1 = createVisiblePosition(position); |
| 86 div->style()->setProperty("color", "red", "important", ASSERT_NO_EXCEPTION); |
| 87 EXPECT_FALSE(visiblePosition1.isValid()); |
| 88 |
| 89 updateAllLifecyclePhases(); |
| 90 |
| 91 VisiblePosition visiblePosition2 = createVisiblePosition(position); |
| 92 div->style()->setProperty("display", "none", "important", ASSERT_NO_EXCEPTIO
N); |
| 93 EXPECT_FALSE(visiblePosition2.isValid()); |
| 94 |
| 95 updateAllLifecyclePhases(); |
| 96 |
| 97 // Invalid VisiblePosition can never become valid again. |
| 98 EXPECT_FALSE(visiblePosition1.isValid()); |
| 99 EXPECT_FALSE(visiblePosition2.isValid()); |
| 100 } |
| 101 |
| 102 #endif |
| 103 |
39 } // namespace blink | 104 } // namespace blink |
OLD | NEW |