TEST_F(PositionTest, ToPositionInFlatTreeWithInactiveInsertionPoint) { const char* bodyContent = "<p id='p'><content></content></p>"; setBodyContent(bodyContent); RefPtrWillBeRawPtr<Element> anchor = document().getElementById("p"); EXPECT_EQ(PositionInFlatTree(anchor.get(), 0), toPositionInFlatTree(Position(anchor.get(), 0))); EXPECT_EQ(PositionInFlatTree(anchor, PositionAnchorType::AfterChildren), toPositionInFlatTree(Position(anchor.get(), 1))); }
TEST_F(PositionTest, ToPositionInFlatTreeWithShadowRootContainingSingleContent) { const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; const char* shadowContent = "<content select=#one></content>"; setBodyContent(bodyContent); RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent, "host"); RefPtrWillBeRawPtr<Element> host = document().getElementById("host"); EXPECT_EQ(PositionInFlatTree(host.get(), 0), toPositionInFlatTree(Position(shadowRoot.get(), 0))); EXPECT_EQ(PositionInFlatTree(host.get(), PositionAnchorType::AfterChildren), toPositionInFlatTree(Position(shadowRoot.get(), 1))); }
TEST_F(PositionTest, ToPositionInFlatTreeWithShadowRoot) { const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; const char* shadowContent = "<a><content select=#one></content></a>"; setBodyContent(bodyContent); ShadowRoot* shadowRoot = setShadowContent(shadowContent, "host"); Element* host = document().getElementById("host"); EXPECT_EQ(PositionInFlatTree(host, 0), toPositionInFlatTree(Position(shadowRoot, 0))); EXPECT_EQ(PositionInFlatTree(host, PositionAnchorType::AfterChildren), toPositionInFlatTree(Position(shadowRoot, 1))); }
TEST_F(PositionTest, ToPositionInFlatTreeWithActiveInsertionPoint) { const char* bodyContent = "<p id='host'>00<b id='one'>11</b>22</p>"; const char* shadowContent = "<a id='a'><content select=#one id='content'></content><content></content></a>"; setBodyContent(bodyContent); RefPtrWillBeRawPtr<ShadowRoot> shadowRoot = setShadowContent(shadowContent, "host"); RefPtrWillBeRawPtr<Element> anchor = shadowRoot->getElementById("a"); EXPECT_EQ(PositionInFlatTree(anchor.get(), 0), toPositionInFlatTree(Position(anchor.get(), 0))); EXPECT_EQ(PositionInFlatTree(anchor.get(), 1), toPositionInFlatTree(Position(anchor.get(), 1))); EXPECT_EQ(PositionInFlatTree(anchor, PositionAnchorType::AfterChildren), toPositionInFlatTree(Position(anchor.get(), 2))); }
TEST_F(VisiblePositionTest, ShadowV0DistributedNodes) { const char* bodyContent = "<p id='host'>00<b id='one'>11</b><b id='two'>22</b>33</p>"; const char* shadowContent = "<a><span id='s4'>44</span><content select=#two></content><span " "id='s5'>55</span><content select=#one></content><span " "id='s6'>66</span></a>"; setBodyContent(bodyContent); ShadowRoot* shadowRoot = setShadowContent(shadowContent, "host"); Element* body = document().body(); Element* one = body->querySelector("#one"); Element* two = body->querySelector("#two"); Element* four = shadowRoot->querySelector("#s4"); Element* five = shadowRoot->querySelector("#s5"); EXPECT_EQ(Position(one->firstChild(), 0), canonicalPositionOf(Position(one, 0))); EXPECT_EQ(Position(one->firstChild(), 0), createVisiblePosition(Position(one, 0)).deepEquivalent()); EXPECT_EQ(Position(one->firstChild(), 2), canonicalPositionOf(Position(two, 0))); EXPECT_EQ(Position(one->firstChild(), 2), createVisiblePosition(Position(two, 0)).deepEquivalent()); EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), canonicalPositionOf(PositionInFlatTree(one, 0))); EXPECT_EQ(PositionInFlatTree(five->firstChild(), 2), createVisiblePosition(PositionInFlatTree(one, 0)).deepEquivalent()); EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), canonicalPositionOf(PositionInFlatTree(two, 0))); EXPECT_EQ(PositionInFlatTree(four->firstChild(), 2), createVisiblePosition(PositionInFlatTree(two, 0)).deepEquivalent()); }
TEST_F(SelectionAdjusterTest, adjustSelectionInFlatTree) { setBodyContent("<div id=sample>foo</div>"); MockVisibleSelectionChangeObserver selectionObserver; VisibleSelectionInFlatTree selectionInFlatTree; selectionInFlatTree.setChangeObserver(selectionObserver); Node* const sample = document().getElementById("sample"); Node* const foo = sample->firstChild(); // Select "foo" VisibleSelection selection(Position(foo, 0), Position(foo, 3)); SelectionAdjuster::adjustSelectionInFlatTree(&selectionInFlatTree, selection); EXPECT_EQ(PositionInFlatTree(foo, 0), selectionInFlatTree.start()); EXPECT_EQ(PositionInFlatTree(foo, 3), selectionInFlatTree.end()); EXPECT_EQ(1, selectionObserver.callCounter()) << "adjustSelectionInFlatTree() should call didChangeVisibleSelection()"; }
// This test comes from "editing/style/block-style-progress-crash.html". TEST_F(PositionTest, ToPositionInFlatTreeWithNotDistributed) { setBodyContent("<progress id=sample>foo</progress>"); Element* sample = document().getElementById("sample"); EXPECT_EQ(PositionInFlatTree(sample, PositionAnchorType::AfterChildren), toPositionInFlatTree(Position(sample, 0))); }
TEST_F(PositionTest, NodeAsRangeLastNodeNull) { EXPECT_EQ(nullptr, Position().nodeAsRangeLastNode()); EXPECT_EQ(nullptr, PositionInFlatTree().nodeAsRangeLastNode()); }