// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "third_party/blink/renderer/core/editing/visible_position.h" #include "third_party/blink/renderer/core/css/css_style_declaration.h" #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h" #include "third_party/blink/renderer/core/editing/visible_units.h" namespace blink { class VisiblePositionTest : public EditingTestBase {}; TEST_F(VisiblePositionTest, ShadowV0DistributedNodes) { const char* body_content = "
00112233
"; const char* shadow_content = "44one
"); Element* paragraph = GetDocument().QuerySelector("p"); Position position(paragraph->firstChild(), 1); EXPECT_TRUE(CreateVisiblePosition(position).IsValid()); } TEST_F(VisiblePositionTest, NonNullInvalidatedAfterDOMChange) { SetBodyContent("one
"); Element* paragraph = GetDocument().QuerySelector("p"); Position position(paragraph->firstChild(), 1); VisiblePosition null_visible_position; VisiblePosition non_null_visible_position = CreateVisiblePosition(position); Element* div = GetDocument().CreateRawElement(html_names::kDivTag); GetDocument().body()->AppendChild(div); EXPECT_TRUE(null_visible_position.IsValid()); EXPECT_FALSE(non_null_visible_position.IsValid()); UpdateAllLifecyclePhasesForTest(); // Invalid VisiblePosition can never become valid again. EXPECT_FALSE(non_null_visible_position.IsValid()); } TEST_F(VisiblePositionTest, NonNullInvalidatedAfterStyleChange) { SetBodyContent("two
"); Element* paragraph = GetDocument().QuerySelector("p"); Element* div = GetDocument().QuerySelector("div"); Position position(paragraph->firstChild(), 1); VisiblePosition visible_position1 = CreateVisiblePosition(position); div->style()->setProperty(&GetDocument(), "color", "red", "important", ASSERT_NO_EXCEPTION); EXPECT_FALSE(visible_position1.IsValid()); UpdateAllLifecyclePhasesForTest(); VisiblePosition visible_position2 = CreateVisiblePosition(position); div->style()->setProperty(&GetDocument(), "display", "none", "important", ASSERT_NO_EXCEPTION); EXPECT_FALSE(visible_position2.IsValid()); UpdateAllLifecyclePhasesForTest(); // Invalid VisiblePosition can never become valid again. EXPECT_FALSE(visible_position1.IsValid()); EXPECT_FALSE(visible_position2.IsValid()); } #endif } // namespace blink