/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace { class SwUiWriterTest9 : public SwModelTestBase { public: SwUiWriterTest9() : SwModelTestBase("/sw/qa/extras/uiwriter/data/") { } }; CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf158785) { // given a document with a hyperlink surrounded by N-dashes (–www.dordt.edu–) createSwDoc("tdf158785_hyperlink.fodt"); SwDoc& rDoc = *getSwDoc(); SwWrtShell* pWrtShell = rDoc.GetDocShell()->GetWrtShell(); CPPUNIT_ASSERT(pWrtShell); // go to the end of the hyperlink pWrtShell->SttEndDoc(/*bStart=*/false); pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false); // get last point that will be part of the hyperlink (current position 1pt wide). Point aLogicL(pWrtShell->GetCharRect().Center()); Point aLogicR(aLogicL); // sanity check - we really are right by the hyperlink aLogicL.AdjustX(-1); SwContentAtPos aContentAtPos(IsAttrAtPos::InetAttr); pWrtShell->GetContentAtPos(aLogicL, aContentAtPos); CPPUNIT_ASSERT_EQUAL(IsAttrAtPos::InetAttr, aContentAtPos.eContentAtPos); // The test: the position of the N-dash should not indicate hyperlink properties // cursor pos would NOT be considered part of the hyperlink, but increase for good measure... aLogicR.AdjustX(1); pWrtShell->GetContentAtPos(aLogicR, aContentAtPos); CPPUNIT_ASSERT_EQUAL(IsAttrAtPos::NONE, aContentAtPos.eContentAtPos); } CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159049) { // The document contains a shape which has a text with a line break. When copying the text to // clipboard the line break was missing in the RTF flavor of the clipboard. createSwDoc("tdf159049_LineBreakRTFClipboard.fodt"); CPPUNIT_ASSERT_EQUAL(1, getShapes()); selectShape(1); // Bring shape into text edit mode SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); CPPUNIT_ASSERT(pTextDoc); pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN); pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_RETURN); Scheduler::ProcessEventsToIdle(); // Copy text dispatchCommand(mxComponent, ".uno:SelectAll", {}); dispatchCommand(mxComponent, ".uno:Copy", {}); // Deactivate text edit mode ... pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_ESCAPE); pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_ESCAPE); Scheduler::ProcessEventsToIdle(); // ... and deselect shape. pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_ESCAPE); pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_ESCAPE); Scheduler::ProcessEventsToIdle(); // Paste special as RTF uno::Sequence aArgs(comphelper::InitPropertySequence( { { "SelectedFormat", uno::Any(static_cast(SotClipboardFormatId::RTF)) } })); dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aArgs); // Without fix Actual was "Abreakhere", the line break \n was missing. CPPUNIT_ASSERT_EQUAL(u"Abreak\nhere"_ustr, getParagraph(1)->getString()); } CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf135083) { createSwDoc("tdf135083-simple-text-plus-list.fodt"); dispatchCommand(mxComponent, u".uno:SelectAll"_ustr, {}); dispatchCommand(mxComponent, u".uno:Copy"_ustr, {}); // Paste special as RTF uno::Sequence aArgs(comphelper::InitPropertySequence( { { u"SelectedFormat"_ustr, uno::Any(static_cast(SotClipboardFormatId::RTF)) } })); dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aArgs); auto xLastPara = getParagraph(3); CPPUNIT_ASSERT_EQUAL(u"dolor"_ustr, xLastPara->getString()); // Without the fix in place, the last paragraph would loose its settings. ListId would be empty. CPPUNIT_ASSERT(!getProperty(xLastPara, u"ListId"_ustr).isEmpty()); } } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */