From cdc9c6d5780f199418cbed8045790846f0c32521 Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Tue, 23 Jul 2013 18:59:34 -0400 Subject: Add starter test for reference update on range move. This currently fails. Change-Id: I83cdcb6ed9620079664ff35375a0457b0c9bcea0 --- sc/qa/unit/ucalc.hxx | 2 ++ sc/qa/unit/ucalc_formula.cxx | 50 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) (limited to 'sc/qa') diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx index ac17bd9b4801..5a1d0aea89e9 100644 --- a/sc/qa/unit/ucalc.hxx +++ b/sc/qa/unit/ucalc.hxx @@ -89,6 +89,7 @@ public: void testFormulaRefUpdate(); void testFormulaRefUpdateRange(); void testFormulaRefUpdateSheets(); + void testFormulaRefUpdateMove(); void testFuncCOLUMN(); void testFuncROW(); void testFuncSUM(); @@ -280,6 +281,7 @@ public: CPPUNIT_TEST(testFormulaRefUpdate); CPPUNIT_TEST(testFormulaRefUpdateRange); CPPUNIT_TEST(testFormulaRefUpdateSheets); + CPPUNIT_TEST(testFormulaRefUpdateMove); CPPUNIT_TEST(testFuncCOLUMN); CPPUNIT_TEST(testFuncROW); CPPUNIT_TEST(testFuncSUM); diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index c651b6d34cd1..69b0374aa275 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -18,6 +18,8 @@ #include "formulacell.hxx" #include "inputopt.hxx" #include "scmod.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" #include @@ -837,6 +839,54 @@ void Test::testFormulaRefUpdateSheets() m_pDoc->DeleteTab(0); } +void Test::testFormulaRefUpdateMove() +{ + m_pDoc->InsertTab(0, "Sheet1"); + + sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. + + // Set value to B4:B6. + m_pDoc->SetValue(ScAddress(1,3,0), 1); + m_pDoc->SetValue(ScAddress(1,4,0), 2); + m_pDoc->SetValue(ScAddress(1,5,0), 3); + + // Set formulas to A9:A12 that references B4:B6. + m_pDoc->SetString(ScAddress(0,8,0), "=SUM(B4:B6)"); + m_pDoc->SetString(ScAddress(0,9,0), "=SUM($B$4:$B$6)"); + m_pDoc->SetString(ScAddress(0,10,0), "=B5"); + m_pDoc->SetString(ScAddress(0,11,0), "=$B$6"); + + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(0,8,0)); + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(0,9,0)); + CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(0,10,0)); + CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc->GetValue(0,11,0)); + + // Move B4:B6 to D4 (two columsn to the right). + ScDocFunc& rFunc = getDocShell().GetDocFunc(); + bool bMoved = rFunc.MoveBlock(ScRange(1,3,0,1,5,0), ScAddress(3,3,0), true, false, false, false); + CPPUNIT_ASSERT_MESSAGE("Failed to move B4:B6.", bMoved); + + // The results of the formula cells that reference the moved range should remain the same. + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(0,8,0)); + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(0,9,0)); + CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(0,10,0)); + CPPUNIT_ASSERT_EQUAL(3.0, m_pDoc->GetValue(0,11,0)); + + if (!checkFormula(*m_pDoc, ScAddress(0,8,0), "SUM(D4:D6)")) + CPPUNIT_FAIL("Wrong formula."); + + if (!checkFormula(*m_pDoc, ScAddress(0,9,0), "SUM($D$4:$D$6)")) + CPPUNIT_FAIL("Wrong formula."); + + if (!checkFormula(*m_pDoc, ScAddress(0,10,0), "D5")) + CPPUNIT_FAIL("Wrong formula."); + + if (!checkFormula(*m_pDoc, ScAddress(0,11,0), "$D$6")) + CPPUNIT_FAIL("Wrong formula."); + + m_pDoc->DeleteTab(0); +} + void Test::testFuncCOLUMN() { m_pDoc->InsertTab(0, "Formula"); -- cgit v1.2.3