[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