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

Eike Rathke (via logerrit) logerrit at kemper.freedesktop.org
Wed Feb 26 12:09:13 UTC 2020


 sc/qa/unit/ucalc_formula.cxx |  114 +++++++++++++++++++++++++++++++++----------
 1 file changed, 90 insertions(+), 24 deletions(-)

New commits:
commit 57452f7944257ef6b639144ff34fb34d6583ae62
Author:     Eike Rathke <erack at redhat.com>
AuthorDate: Tue Feb 25 18:40:34 2020 +0100
Commit:     Eike Rathke <erack at redhat.com>
CommitDate: Wed Feb 26 13:08:34 2020 +0100

    Unit test tdf#130825 insert/delete sheet moving sheet-local names
    
    Change-Id: I1f0aed734ebb2c1035e06350d3508becb0d68b4d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89476
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Jenkins

diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 10ad7a3169da..17e8bde4fc53 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -4010,16 +4010,20 @@ void Test::testFormulaRefUpdateNameCopySheetCheckTab( SCTAB nTab, bool bCheckNam
 
 void Test::testFormulaRefUpdateSheetLocalMove()
 {
-    m_pDoc->InsertTab(0, "Sheet1");
-    m_pDoc->InsertTab(1, "Sheet2");
+    SCTAB nSheet1 = 0;
+    SCTAB nSheet2 = 1;
+    m_pDoc->InsertTab( nSheet1, "Sheet1");
+    m_pDoc->InsertTab( nSheet2, "Sheet2");
 
-    ScAddress aPos;
+    ScAddress aPos(0,0,nSheet1);
     bool bOk;
     bOk = m_pDoc->InsertNewRangeName( 0, "MyCell", aPos, "$Sheet1.$B$2");
     CPPUNIT_ASSERT(bOk);
+    aPos.SetTab(nSheet2);
     bOk = m_pDoc->InsertNewRangeName( 1, "MyCell", aPos, "$Sheet2.$B$2");
     CPPUNIT_ASSERT(bOk);
 
+    aPos.SetTab(nSheet1);
     aPos.IncCol();
     m_pDoc->SetString( aPos, "x");
     aPos.IncRow();
@@ -4028,7 +4032,7 @@ void Test::testFormulaRefUpdateSheetLocalMove()
     m_pDoc->SetString( aPos, "=MyCell");
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Sheet1.B3", 1.0, m_pDoc->GetValue(aPos));
 
-    aPos.SetTab(1);
+    aPos.SetTab(nSheet2);
     aPos.SetRow(1);
     m_pDoc->SetString( aPos, "2.0");
     aPos.IncRow();
@@ -4039,66 +4043,128 @@ void Test::testFormulaRefUpdateSheetLocalMove()
     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);
+    bOk = rFunc.MoveBlock( ScRange(1,0,nSheet1,1,0,nSheet1), ScAddress(1,0,nSheet2), 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)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet2.B3", 2.0, m_pDoc->GetValue(ScAddress(1,2,nSheet2)));
     // Formulas not changed.
-    m_pDoc->GetFormula( 1,2,0, aFormula);
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Move x: Sheet1.B3", OUString("=MyCell"), aFormula);
-    m_pDoc->GetFormula( 1,2,1, aFormula);
+    m_pDoc->GetFormula( 1,2,nSheet2, 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);
+    bOk = rFunc.MoveBlock( ScRange(1,1,nSheet2,1,1,nSheet2), ScAddress(2,1,nSheet1), 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)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet2.B3", 2.0, m_pDoc->GetValue(ScAddress(1,2,nSheet2)));
     // Formulas not changed.
-    m_pDoc->GetFormula( 1,2,0, aFormula);
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Move 2.0: Sheet1.B3", OUString("=MyCell"), aFormula);
-    m_pDoc->GetFormula( 1,2,1, aFormula);
+    m_pDoc->GetFormula( 1,2,nSheet2, 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");
+    pName = m_pDoc->GetRangeName(nSheet2)->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);
+    bOk = rFunc.MoveBlock( ScRange(1,2,nSheet2,1,2,nSheet2), ScAddress(2,2,nSheet1), 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)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet2.B3", 0.0, m_pDoc->GetValue(ScAddress(1,2,nSheet2)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.C3", 2.0, m_pDoc->GetValue(ScAddress(2,2,nSheet1)));
     // One formula identical, one adjusted.
-    m_pDoc->GetFormula( 1,2,0, aFormula);
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Move =MyCell: Sheet1.B3", OUString("=MyCell"), aFormula);
-    m_pDoc->GetFormula( 2,2,0, aFormula);
+    m_pDoc->GetFormula( 2,2,nSheet1, 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");
+    pName = m_pDoc->GetRangeName(nSheet1)->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");
+    pName = m_pDoc->GetRangeName(nSheet2)->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);
+    // Insert sheet before the others.
+    m_pDoc->InsertTab(0, "Sheet0");
+    ++nSheet1;
+    ++nSheet2;
+
+    // Nothing changed.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet1.C3", 2.0, m_pDoc->GetValue(ScAddress(2,2,nSheet1)));
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 2,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet1.C3", OUString("=Sheet2.MyCell"), aFormula);
+    pName = m_pDoc->GetRangeName(nSheet1)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet1 sheet-local name", OUString("$Sheet1.$B$2"), aFormula);
+    pName = m_pDoc->GetRangeName(nSheet2)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Insert Sheet0: Sheet2 sheet-local name", OUString("$Sheet1.$C$2"), aFormula);
+
+    // Delete sheet before the others.
+    m_pDoc->DeleteTab(0);
+    --nSheet1;
+    --nSheet2;
+
+    // Nothing changed.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet1.C3", 2.0, m_pDoc->GetValue(ScAddress(2,2,nSheet1)));
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 2,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet1.C3", OUString("=Sheet2.MyCell"), aFormula);
+    pName = m_pDoc->GetRangeName(nSheet1)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet1 sheet-local name", OUString("$Sheet1.$B$2"), aFormula);
+    pName = m_pDoc->GetRangeName(nSheet2)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet0: Sheet2 sheet-local name", OUString("$Sheet1.$C$2"), aFormula);
+
+    // Delete last sheet with sheet-local name.
+    m_pDoc->DeleteTab(nSheet2);
+
+    // XXX we *could* analyze whether the expression points to a different
+    // sheet and then move the name to a remaining sheet. If so, adapt this
+    // test.
+    // Nothing changed except the sheet-local name and its use.
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1.B3", 1.0, m_pDoc->GetValue(ScAddress(1,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1.C3", 0.0, m_pDoc->GetValue(ScAddress(2,2,nSheet1)));
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1.C3", OUString("#NAME?"), m_pDoc->GetString(ScAddress(2,2,nSheet1)));
+    m_pDoc->GetFormula( 1,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1.B3", OUString("=MyCell"), aFormula);
+    m_pDoc->GetFormula( 2,2,nSheet1, aFormula);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1.C3", OUString("=#NAME?"), aFormula);
+    pName = m_pDoc->GetRangeName(nSheet1)->findByUpperName("MYCELL");
+    CPPUNIT_ASSERT(pName);
+    pName->GetSymbol( aFormula, ScAddress(), formula::FormulaGrammar::GRAM_ENGLISH);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Delete Sheet2: Sheet1 sheet-local name", OUString("$Sheet1.$B$2"), aFormula);
+    CPPUNIT_ASSERT(!m_pDoc->GetRangeName(nSheet2));
+    nSheet2 = -1;
+
     m_pDoc->DeleteTab(0);
 }
 


More information about the Libreoffice-commits mailing list