diff options
Diffstat (limited to 'sw/qa/core/text/text.cxx')
-rw-r--r-- | sw/qa/core/text/text.cxx | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx index 5f1b89e34247..0de7d7b81ff6 100644 --- a/sw/qa/core/text/text.cxx +++ b/sw/qa/core/text/text.cxx @@ -19,8 +19,11 @@ #include <unotools/mediadescriptor.hxx> #include <docsh.hxx> +#include <rootfrm.hxx> #include <unotxdoc.hxx> #include <wrtsh.hxx> +#include <fmtfsize.hxx> +#include <IDocumentRedlineAccess.hxx> constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/core/text/data/"; @@ -151,6 +154,47 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testEmptyNumberingPageSplit) dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs); } +CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRedlineDelete) +{ + // Given a document with A4 paper size, some text, redlining on, but hidden: + SwDoc* pDoc = createSwDoc(); + SwDocShell* pDocShell = pDoc->GetDocShell(); + SwWrtShell* pWrtShell = pDocShell->GetWrtShell(); + { + // Set page size to A4. + size_t nCurIdx = pWrtShell->GetCurPageDesc(); + SwPageDesc aPageDesc(pWrtShell->GetPageDesc(nCurIdx)); + SwFrameFormat& rMaster = aPageDesc.GetMaster(); + SwFormatFrameSize aSize(SwFrameSize::Fixed); + aSize.SetSize(Size(11906, 16838)); + rMaster.SetFormatAttr(aSize); + pWrtShell->ChgPageDesc(nCurIdx, aPageDesc); + } + OUString aBefore("aaaaaaaaa aaaaaaaaaa aa aa aa "); + OUString aDelete("delete eeeeeeeeeee ee eeeeeeeeeee ee eeeeee"); + pWrtShell->Insert(aBefore + " " + aDelete + + " zz zzz zzzzzzzzz zzz zzzz zzzz zzzzzzzzz zzzzzz zzz zzzzzzzzzzz zzz"); + // Enable redlining. + pDocShell->SetChangeRecording(/*bActivate=*/true); + // Hide redlining. + pWrtShell->StartAllAction(); + pWrtShell->GetLayout()->SetHideRedlines(true); + pWrtShell->EndAllAction(); + + // When deleting content in the middle of the paragraph: + pWrtShell->SttEndDoc(/*bStt=*/true); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/false, /*nCount=*/aBefore.getLength(), + /*bBasicCall=*/false); + pWrtShell->Right(CRSR_SKIP_CHARS, /*bSelect=*/true, /*nCount=*/aDelete.getLength(), + /*bBasicCall=*/false); + // Without the accompanying fix in place, this test would have crashed: + pWrtShell->Delete(); + + // Then make sure that the redline is created: + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), + pDoc->getIDocumentRedlineAccess().GetRedlineTable().size()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |