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 <er...@redhat.com> AuthorDate: Tue Feb 25 00:32:08 2020 +0100 Commit: Eike Rathke <er...@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 <er...@redhat.com> Tested-by: Eike Rathke <er...@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"); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits