[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