[Libreoffice-commits] core.git: sc/qa sc/source

scito (via logerrit) logerrit at kemper.freedesktop.org
Fri May 21 10:33:23 UTC 2021


 sc/qa/unit/ucalc_copypaste.cxx   |   57 +++++++++++++++++++++++++++++++++++++++
 sc/source/core/data/documen3.cxx |    2 -
 2 files changed, 58 insertions(+), 1 deletion(-)

New commits:
commit fd0779f6a0fd04263155d293320546ce7cbae84b
Author:     scito <info at scito.ch>
AuthorDate: Fri May 21 11:06:20 2021 +0200
Commit:     Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Fri May 21 12:32:47 2021 +0200

    tdf#71058 cut paste transposed: use correct clipdoc
    
    ScDocument: :UpdateTranspose() operated on the wrong clipdoc
    Change-Id: I10fb010c7b6a1d523a1af92d67fc127957f9d17f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115901
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/sc/qa/unit/ucalc_copypaste.cxx b/sc/qa/unit/ucalc_copypaste.cxx
index 40536a573d90..0bbd326eb128 100644
--- a/sc/qa/unit/ucalc_copypaste.cxx
+++ b/sc/qa/unit/ucalc_copypaste.cxx
@@ -114,6 +114,7 @@ public:
     void testCopyPasteFormulas();
     void testCopyPasteFormulasExternalDoc();
     void testCopyPasteReferencesExternalDoc(); // tdf#106456
+    void testTdf71058();
 
     CPPUNIT_TEST_SUITE(TestCopyPaste);
 
@@ -188,6 +189,8 @@ public:
     CPPUNIT_TEST(testCopyPasteFormulasExternalDoc);
     CPPUNIT_TEST(testCopyPasteReferencesExternalDoc);
 
+    CPPUNIT_TEST(testTdf71058);
+
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -6817,6 +6820,60 @@ void TestCopyPaste::testCopyPasteReferencesExternalDoc()
     xExtDocSh->DoClose();
 }
 
+void TestCopyPaste::testTdf71058()
+{
+    const SCTAB nTab = 0;
+    m_pDoc->InsertTab(nTab, "Test");
+
+    m_pDoc->SetString(2, 2, nTab, "=C4"); // C3
+    m_pDoc->SetString(3, 2, nTab, "=D4"); // D3
+    m_pDoc->SetValue(2, 3, nTab, 1.0); // C4
+    m_pDoc->SetValue(3, 3, nTab, 2.0); // D4
+
+    // Cut C4:C5 to the clip document.
+    ScDocument aClipDoc(SCDOCMODE_CLIP);
+    ScRange aSrcRange(2, 3, nTab, 3, 3, nTab);
+    cutToClip(*m_xDocShell, aSrcRange, &aClipDoc, false);
+
+    // To E6:E7
+    ScRange aDestRange(4, 5, nTab, 4, 6, nTab);
+    ScMarkData aDestMark(m_pDoc->GetSheetLimits());
+
+    // Transpose
+    ScDocument* pOrigClipDoc = &aClipDoc;
+    ScDocumentUniquePtr pTransClip(new ScDocument(SCDOCMODE_CLIP));
+    aClipDoc.TransposeClip(pTransClip.get(), InsertDeleteFlags::ALL, false, true);
+    aDestMark.SetMarkArea(aDestRange);
+    // Paste
+    m_pDoc->CopyFromClip(aDestRange, aDestMark, InsertDeleteFlags::ALL, nullptr, pTransClip.get(),
+                         true, false, true, false);
+    m_pDoc->UpdateTranspose(aDestRange.aStart, pOrigClipDoc, aDestMark, nullptr);
+    pTransClip.reset();
+
+    // Check precondition
+    CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(4, 5, nTab));
+    CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(4, 6, nTab));
+
+    // Check results
+    // Without the fix in place, this would have failed with
+    // - Expected: =E6
+    // - Actual  : =C4
+    ASSERT_FORMULA_EQUAL(*m_pDoc, ScAddress(2, 2, nTab), "E6", "Wrong formula");
+    // Without the fix in place, this would have failed with
+    // - Expected: 1
+    // - Actual  : 0
+    CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(2, 2, nTab));
+
+    // Without the fix in place, this would have failed with
+    // - Expected: =E7
+    // - Actual  : =D4
+    ASSERT_FORMULA_EQUAL(*m_pDoc, ScAddress(3, 2, nTab), "E7", "Wrong formula");
+    // Without the fix in place, this would have failed with
+    // - Expected: 2
+    // - Actual  : 0
+    CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(3, 2, nTab));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(TestCopyPaste);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 8de06d151d78..5db63b6e7815 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -1112,7 +1112,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo
     OSL_ENSURE(pClipDoc->bIsClip, "UpdateTranspose: No Clip");
 
     ScRange aSource;
-    ScClipParam& rClipParam = GetClipParam();
+    ScClipParam& rClipParam = pClipDoc->GetClipParam();
     if (!rClipParam.maRanges.empty())
         aSource = rClipParam.maRanges.front();
     ScAddress aDest = rDestPos;


More information about the Libreoffice-commits mailing list