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

Eike Rathke (via logerrit) logerrit at kemper.freedesktop.org
Tue Feb 25 00:40:40 UTC 2020


 sc/qa/unit/ucalc.hxx         |    2 
 sc/qa/unit/ucalc_formula.cxx |   94 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+)

New commits:
commit 4e5f875cdb81a1c1ca881ef8c90a63c2afd2ba78
Author:     Eike Rathke <erack at redhat.com>
AuthorDate: Tue Feb 25 00:32:08 2020 +0100
Commit:     Eike Rathke <erack at redhat.com>
CommitDate: Tue Feb 25 01:40:04 2020 +0100

    Unit test tdf#130370 cut&paste / move with sheet-local named reference
    
    Change-Id: I28473558e028012ce0a4ca881549e808bc34aad1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89391
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 521a81130971..45790021e943 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -175,6 +175,7 @@ public:
     void testFormulaRefUpdateNameDeleteRow();
     void testFormulaRefUpdateNameCopySheet();
     void testFormulaRefUpdateNameCopySheetCheckTab( SCTAB Tab, bool bCheckNames );
+    void testFormulaRefUpdateSheetLocalMove();
     void testFormulaRefUpdateNameDelete();
     void testFormulaRefUpdateValidity();
     void testTokenArrayRefUpdateMove();
@@ -616,6 +617,7 @@ public:
     CPPUNIT_TEST(testFormulaRefUpdateNameExpandRef2);
     CPPUNIT_TEST(testFormulaRefUpdateNameDeleteRow);
     CPPUNIT_TEST(testFormulaRefUpdateNameCopySheet);
+    CPPUNIT_TEST(testFormulaRefUpdateSheetLocalMove);
     CPPUNIT_TEST(testFormulaRefUpdateNameDelete);
     CPPUNIT_TEST(testFormulaRefUpdateValidity);
     CPPUNIT_TEST(testTokenArrayRefUpdateMove);
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index dbd8bd951bab..10ad7a3169da 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -4008,6 +4008,100 @@ void Test::testFormulaRefUpdateNameCopySheetCheckTab( SCTAB nTab, bool bCheckNam
     CPPUNIT_ASSERT_EQUAL( 1100000.0 * nSheet, m_pDoc->GetValue(aPos));
 }
 
+void Test::testFormulaRefUpdateSheetLocalMove()
+{
+    m_pDoc->InsertTab(0, "Sheet1");
+    m_pDoc->InsertTab(1, "Sheet2");
+
+    ScAddress aPos;
+    bool bOk;
+    bOk = m_pDoc->InsertNewRangeName( 0, "MyCell", aPos, "$Sheet1.$B$2");
+    CPPUNIT_ASSERT(bOk);
+    bOk = m_pDoc->InsertNewRangeName( 1, "MyCell", aPos, "$Sheet2.$B$2");
+    CPPUNIT_ASSERT(bOk);
+
+    aPos.IncCol();
+    m_pDoc->SetString( aPos, "x");
+    aPos.IncRow();
+    m_pDoc->SetString( aPos, "1.0");
+    aPos.IncRow();
+    m_pDoc->SetString( aPos, "=MyCell");
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Sheet1.B3", 1.0, m_pDoc->GetValue(aPos));
+
+    aPos.SetTab(1);
+    aPos.SetRow(1);
+    m_pDoc->SetString( aPos, "2.0");
+    aPos.IncRow();
+    m_pDoc->SetString( aPos, "=MyCell");
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Sheet2.B3", 2.0, m_pDoc->GetValue(aPos));
+
+    ScDocFunc& rFunc = getDocShell().GetDocFunc();
+    OUString aFormula;
+
+    // Move Sheet1.B1 ("x") to Sheet2.B1
+    bOk = rFunc.MoveBlock( ScRange(1,0,0,1,0,0), ScAddress(1,0,1), true, false, false, false);
+    CPPUNIT_ASSERT(bOk);
+    // Results not changed.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,0)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet2.B3", 2.0, m_pDoc->GetValue(ScAddress(1,2,1)));
+    // Formulas not changed.
+    m_pDoc->GetFormula( 1,2,0, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 1,2,1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet2.B3", OUString("=MyCell"), aFormula);
+
+    // Move Sheet2.B2 ("2.0") to Sheet1.C2
+    bOk = rFunc.MoveBlock( ScRange(1,1,1,1,1,1), ScAddress(2,1,0), true, false, false, false);
+    CPPUNIT_ASSERT(bOk);
+    // Results not changed.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,0)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet2.B3", 2.0, m_pDoc->GetValue(ScAddress(1,2,1)));
+    // Formulas not changed.
+    m_pDoc->GetFormula( 1,2,0, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 1,2,1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet2.B3", OUString("=MyCell"), aFormula);
+
+    ScRangeData* pName;
+
+    // Check that the sheet-local named reference points to the moved cell, now
+    // Sheet1.C2
+    pName = m_pDoc->GetRangeName(1)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet2 sheet-local name", OUString("$Sheet1.$C$2"), aFormula);
+
+    // Move Sheet2.B3 ("=MyCell") to Sheet1.C3
+    bOk = rFunc.MoveBlock( ScRange(1,2,1,1,2,1), ScAddress(2,2,0), true, false, false, false);
+    CPPUNIT_ASSERT(bOk);
+    // Results changed.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,0)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet2.B3", 0.0, m_pDoc->GetValue(ScAddress(1,2,1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.C3", 2.0, m_pDoc->GetValue(ScAddress(2,2,0)));
+    // One formula identical, one adjusted.
+    m_pDoc->GetFormula( 1,2,0, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 2,2,0, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.C3", OUString("=Sheet2.MyCell"), aFormula);
+
+    // Check that the sheet-local named reference in Sheet1 still points to the
+    // original cell Sheet1.B2
+    pName = m_pDoc->GetRangeName(0)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1 sheet-local name", OUString("$Sheet1.$B$2"), aFormula);
+
+    // Check that the sheet-local named reference in Sheet2 still points to the
+    // moved cell, now Sheet1.C2
+    pName = m_pDoc->GetRangeName(1)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet2 sheet-local name", OUString("$Sheet1.$C$2"), aFormula);
+
+    m_pDoc->DeleteTab(1);
+    m_pDoc->DeleteTab(0);
+}
+
 void Test::testFormulaRefUpdateNameDelete()
 {
     m_pDoc->InsertTab(0, "Test");


More information about the Libreoffice-commits mailing list