// Tests moving extent over to the other side of the vase and immediately // passing the word boundary and going into word granularity. TEST_F(GranularityStrategyTest, DirectionSwitchSideWordGranularityThenShrink) { dummyPageHolder().frame().settings()->setDefaultFontSize(12); String str = "ab cd efghijkl mnopqr iiin, abc"; RefPtrWillBeRawPtr<Text> text = document().createTextNode(str); document().body()->appendChild(text); dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy::Direction); parseText(text.get()); // "abcd efgh ijkl mno^pqr|> iiin, abc" (^ means base, | means extent, < means start, and > means end). selection().setSelection(VisibleSelection(Position(text, 18), Position(text, 21))); EXPECT_EQ_SELECTED_TEXT("pqr"); // Move to the middle of word #4 selecting it - this will set the offset to // be half the width of "iiin". selection().moveRangeSelectionExtent(m_wordMiddles[4]); EXPECT_EQ_SELECTED_TEXT("pqr iiin"); // Move to the middle of word #2 - extent will switch over to the other // side of the base, and we should enter word granularity since we pass // the word boundary. The offset should become negative since the width // of "efghjkkl" is greater than that of "iiin". int offset = m_letterPos[26].x() - m_wordMiddles[4].x(); IntPoint p = IntPoint(m_wordMiddles[2].x() - offset - 1, m_wordMiddles[2].y()); selection().moveRangeSelectionExtent(p); EXPECT_EQ_SELECTED_TEXT("efghijkl mno"); p.move(m_letterPos[7].x() - m_letterPos[6].x(), 0); selection().moveRangeSelectionExtent(p); EXPECT_EQ_SELECTED_TEXT("fghijkl mno"); }
TEST_F(FrameSelectionTest, PaintCaretShouldNotLayout) { RefPtrWillBeRawPtr<Text> text = appendTextNode("Hello, World!"); document().view()->updateAllLifecyclePhases(); document().body()->setContentEditable("true", ASSERT_NO_EXCEPTION); document().body()->focus(); EXPECT_TRUE(document().body()->focused()); VisibleSelection validSelection(Position(text, 0), Position(text, 0)); selection().setCaretVisible(true); setSelection(validSelection); EXPECT_TRUE(selection().isCaret()); EXPECT_TRUE(selection().ShouldPaintCaretForTesting()); int startCount = layoutCount(); { // To force layout in next updateLayout calling, widen view. FrameView& frameView = dummyPageHolder().frameView(); IntRect frameRect = frameView.frameRect(); frameRect.setWidth(frameRect.width() + 1); frameRect.setHeight(frameRect.height() + 1); dummyPageHolder().frameView().setFrameRect(frameRect); } selection().paintCaret(nullptr, LayoutPoint(), LayoutRect()); EXPECT_EQ(startCount, layoutCount()); }
void GranularityStrategyTest::SetUp() { m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); m_document = toHTMLDocument(&m_dummyPageHolder->document()); ASSERT(m_document); dummyPageHolder().frame().settings()->setDefaultFontSize(12); dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy::Direction); }
// Test for the default CharacterGranularityStrategy TEST_F(GranularityStrategyTest, Character) { dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy::Character); dummyPageHolder().frame().settings()->setDefaultFontSize(12); // "Foo Bar Baz," RefPtrWillBeRawPtr<Text> text = appendTextNode("Foo Bar Baz,"); // "Foo B^a|>r Baz," (^ means base, | means extent, , < means start, and > means end). selection().setSelection(VisibleSelection(Position(text, 5), Position(text, 6))); EXPECT_EQ_SELECTED_TEXT("a"); // "Foo B^ar B|>az," selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVisiblePosition(Position(text, 9)))); EXPECT_EQ_SELECTED_TEXT("ar B"); // "F<|oo B^ar Baz," selection().moveRangeSelectionExtent(visiblePositionToContentsPoint(createVisiblePosition(Position(text, 1)))); EXPECT_EQ_SELECTED_TEXT("oo B"); }
// This is a regression test for https://crbug.com/121163 TEST_F(ReplaceSelectionCommandTest, styleTagsInPastedHeadIncludedInContent) { document().setDesignMode("on"); updateAllLifecyclePhases(); dummyPageHolder().frame().selection().setSelection( SelectionInDOMTree::Builder() .collapse(Position(document().body(), 0)) .build()); DocumentFragment* fragment = document().createDocumentFragment(); fragment->parseHTML( "<head><style>foo { bar: baz; }</style></head>" "<body><p>Text</p></body>", document().documentElement(), DisallowScriptingAndPluginContent); ReplaceSelectionCommand::CommandOptions options = 0; ReplaceSelectionCommand* command = ReplaceSelectionCommand::create(document(), fragment, options); EXPECT_TRUE(command->apply()) << "the replace command should have succeeded"; EXPECT_EQ( "<head><style>foo { bar: baz; }</style></head>" "<body><p>Text</p></body>", document().body()->innerHTML()) << "the STYLE and P elements should have been pasted into the body " << "of the document"; }
// Make sure we switch to word granularity right away when starting on a // word boundary and extending. TEST_F(GranularityStrategyTest, DirectionSwitchStartOnBoundary) { dummyPageHolder().frame().settings()->setDefaultFontSize(12); String str = "ab cd efghijkl mnopqr iiin, abc"; RefPtrWillBeRawPtr<Text> text = document().createTextNode(str); document().body()->appendChild(text); dummyPageHolder().frame().settings()->setSelectionStrategy(SelectionStrategy::Direction); parseText(text.get()); // "ab cd efghijkl ^mnopqr |>stuvwi inm," (^ means base and | means extent, // > means end). selection().setSelection(VisibleSelection(Position(text, 15), Position(text, 22))); EXPECT_EQ_SELECTED_TEXT("mnopqr "); selection().moveRangeSelectionExtent(m_wordMiddles[4]); EXPECT_EQ_SELECTED_TEXT("mnopqr iiin"); }