From 7b1d50e97eaa00855152e74f42b789fc643e0bac Mon Sep 17 00:00:00 2001 From: Aron Budea Date: Sun, 25 Mar 2018 08:33:16 +0200 Subject: tdf#106746: pDelPam is a bit special Regression from db17d3c17c40d6b0e92392cf3c6e343d1d17b771 Change-Id: I17e2fef2eb16a900cc487b75c3b9dbba2764ac71 Reviewed-on: https://gerrit.libreoffice.org/51814 Tested-by: Jenkins Reviewed-by: Noel Grandin Reviewed-by: Aron Budea --- sw/qa/extras/uiwriter/uiwriter.cxx | 36 ++++++++++++++++++++++ .../core/doc/DocumentContentOperationsManager.cxx | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 236621d1f88e..f16dec2a61a4 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -243,6 +243,7 @@ public: void testTdf84695NormalChar(); void testTdf84695Tab(); void testTableStyleUndo(); + void testRedlineCopyPaste(); void testRedlineParam(); void testRedlineViewAuthor(); void testTdf91292(); @@ -427,6 +428,7 @@ public: CPPUNIT_TEST(testTdf84695NormalChar); CPPUNIT_TEST(testTdf84695Tab); CPPUNIT_TEST(testTableStyleUndo); + CPPUNIT_TEST(testRedlineCopyPaste); CPPUNIT_TEST(testRedlineParam); CPPUNIT_TEST(testRedlineViewAuthor); CPPUNIT_TEST(testTdf91292); @@ -4761,6 +4763,40 @@ void SwUiWriterTest::testTableStyleUndo() CPPUNIT_ASSERT(bool(pStyle->GetBoxFormat(0).GetBackground() == aBackground2)); } +void SwUiWriterTest::testRedlineCopyPaste() +{ + // regressed in tdf#106746 + SwDoc* pDoc = createDoc(); + + SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1); + SwPaM aPaM(aIdx); + + pDoc->getIDocumentContentOperations().InsertString(aPaM, "abzdezgh"); + SwTextNode* pTextNode = aPaM.GetNode().GetTextNode(); + + // Turn on track changes, make changes, turn off track changes + uno::Reference xPropertySet(mxComponent, uno::UNO_QUERY); + xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(true)); + lcl_selectCharacters(aPaM, 2, 3); + pDoc->getIDocumentContentOperations().ReplaceRange(aPaM, "c", false); + lcl_selectCharacters(aPaM, 6, 7); + pDoc->getIDocumentContentOperations().ReplaceRange(aPaM, "f", false); + xPropertySet->setPropertyValue("RecordChanges", uno::makeAny(false)); + + // Create the clipboard document. + SwDoc aClipboard; + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + + // Select the whole content, copy, delete the original and paste the copied content + pWrtShell->SelAll(); + pWrtShell->Copy(&aClipboard); + pWrtShell->Delete(); + pWrtShell->Paste(&aClipboard); + + // With the bug this is "abzcdefgh", ie. contains the first deleted piece, too + CPPUNIT_ASSERT_EQUAL(OUString("abcdefgh"), pTextNode->GetText()); +} + void SwUiWriterTest::testRedlineParam() { // Create a document with minimal content. diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index ef50e8cb4d13..a137c0feec6f 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -355,7 +355,7 @@ namespace default: { - pDelPam.reset(new SwPaM( *pCpyStt, pDelPam.get() )); + pDelPam.reset(new SwPaM( *pCpyStt, pDelPam.release() )); if( *pStt < *pRStt ) { lcl_NonCopyCount( rPam, aCorrIdx, pRStt->nNode.GetIndex(), nDelCount ); -- cgit v1.2.3