sc/qa/unit/ucalc.cxx | 9 +++++++ sc/qa/unit/ucalc.hxx | 8 ++++++ sc/qa/unit/ucalc_formula.cxx | 52 +++++++++++++++++++++++++++++------------- sc/source/core/tool/token.cxx | 2 - 4 files changed, 54 insertions(+), 17 deletions(-)
New commits: commit 7aa32a759fb7b440f870739f7bb680f405f338ce Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue May 6 15:24:50 2014 -0400 fdo#77647: Fix the column insertion use case. Change-Id: I7c78f54c9386eced16113e69e625d23ed4acedd7 diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index b1f8e02..636ff01 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -2546,7 +2546,7 @@ bool expandRange( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, const Sc // Selected range is only partially overlapping in vertical direction. Bail out. return false; - if (!rCxt.mrDoc.IsExpandRefs() && rSelectedRange.aStart.Col() == rRefRange.aStart.Col()) + if (!rCxt.mrDoc.IsExpandRefs() && rSelectedRange.aStart.Col() <= rRefRange.aStart.Col()) // Selected range is at the left end and the edge expansion is turned off. No expansion. return false; commit 48631bde1ccdbd618e5892b7050822b61b843332 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue May 6 15:23:57 2014 -0400 fdo#77647: Test for reference adjustment on column insertion. Change-Id: Ic95ff3892efbfc003ae9976b4fba4129de11bbef diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index 97e6521..d764673 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -62,6 +62,7 @@ #include <patattr.hxx> #include <docpool.hxx> #include <globalnames.hxx> +#include <inputopt.hxx> #include "formula/IFunctionDescription.hxx" @@ -6139,6 +6140,14 @@ ScUndoPaste* Test::createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange, Sc &rDocSh, rRange, aMarkData, pUndoDoc, NULL, IDF_ALL, pRefUndoData, false); } +void Test::setExpandRefs(bool bExpand) +{ + ScModule* pMod = SC_MOD(); + ScInputOptions aOpt = pMod->GetInputOptions(); + aOpt.SetExpandRefs(bExpand); + pMod->SetInputOptions(aOpt); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx index f812630..dbe84e7 100644 --- a/sc/qa/unit/ucalc.hxx +++ b/sc/qa/unit/ucalc.hxx @@ -47,6 +47,12 @@ public: static void pasteFromClip(ScDocument* pDestDoc, const ScRange& rDestRange, ScDocument* pClipDoc); static ScUndoPaste* createUndoPaste(ScDocShell& rDocSh, const ScRange& rRange, ScDocument* pUndoDoc); + /** + * Enable or disable expand reference options which controls how + * references in formula are expanded when inserting rows or columns. + */ + static void setExpandRefs(bool bExpand); + template<size_t _Size> static ScRange insertRangeData(ScDocument* pDoc, const ScAddress& rPos, const char* aData[][_Size], size_t nRowCount) { @@ -119,6 +125,7 @@ public: void testFormulaRefUpdateRange(); void testFormulaRefUpdateSheets(); void testFormulaRefUpdateInsertRows(); + void testFormulaRefUpdateInsertColumns(); void testFormulaRefUpdateMove(); void testFormulaRefUpdateMoveUndo(); void testFormulaRefUpdateNamedExpression(); @@ -375,6 +382,7 @@ public: CPPUNIT_TEST(testFormulaRefUpdateRange); CPPUNIT_TEST(testFormulaRefUpdateSheets); CPPUNIT_TEST(testFormulaRefUpdateInsertRows); + CPPUNIT_TEST(testFormulaRefUpdateInsertColumns); CPPUNIT_TEST(testFormulaRefUpdateMove); CPPUNIT_TEST(testFormulaRefUpdateMoveUndo); CPPUNIT_TEST(testFormulaRefUpdateNamedExpression); diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index efe73a0..3f75db8 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -17,7 +17,6 @@ #include "scopetools.hxx" #include "formulacell.hxx" #include "formulagroup.hxx" -#include "inputopt.hxx" #include "scmod.hxx" #include "docsh.hxx" #include "docfunc.hxx" @@ -1036,10 +1035,7 @@ void Test::testFormulaRefUpdateRange() sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. - ScModule* pMod = SC_MOD(); - ScInputOptions aOpt = pMod->GetInputOptions(); - aOpt.SetExpandRefs(false); - pMod->SetInputOptions(aOpt); + setExpandRefs(false); // Set values to B2:C5. m_pDoc->SetValue(ScAddress(1,1,0), 1); @@ -1166,7 +1162,7 @@ void Test::testFormulaRefUpdateRange() clearRange(m_pDoc, ScRange(0,0,0,20,20,0)); // Disable expansion of range reference on insertion in adjacent areas. - m_pDoc->SetExpandRefs(false); + setExpandRefs(false); // Fill C2:D3 with values. m_pDoc->SetValue(ScAddress(2,1,0), 1); @@ -1251,8 +1247,7 @@ void Test::testFormulaRefUpdateRange() clearRange(m_pDoc, ScRange(0,0,0,20,20,0)); // Turn edge expansion on. - aOpt.SetExpandRefs(true); - pMod->SetInputOptions(aOpt); + setExpandRefs(true); // Fill C6:D7 with values. m_pDoc->SetValue(ScAddress(2,5,0), 1); @@ -1479,10 +1474,7 @@ void Test::testFormulaRefUpdateSheets() void Test::testFormulaRefUpdateInsertRows() { - ScModule* pMod = SC_MOD(); - ScInputOptions aOpt = pMod->GetInputOptions(); - aOpt.SetExpandRefs(false); - pMod->SetInputOptions(aOpt); + setExpandRefs(false); sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. m_pDoc->InsertTab(0, "Formula"); @@ -1537,6 +1529,37 @@ void Test::testFormulaRefUpdateInsertRows() m_pDoc->DeleteTab(0); } +void Test::testFormulaRefUpdateInsertColumns() +{ + sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. + setExpandRefs(false); + + m_pDoc->InsertTab(0, "Formula"); + + // Set values in B1:B3. + m_pDoc->SetValue(ScAddress(1,0,0), 1.0); + m_pDoc->SetValue(ScAddress(1,1,0), 2.0); + m_pDoc->SetValue(ScAddress(1,2,0), 3.0); + + // Reference them in B4. + m_pDoc->SetString(ScAddress(1,3,0), "=SUM(B1:B3)"); + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(1,3,0))); + + // Inert columns over A:B. + ScMarkData aMark; + aMark.SelectOneTable(0); + ScDocFunc& rFunc = getDocShell().GetDocFunc(); + rFunc.InsertCells(ScRange(0,0,0,1,MAXROW,0), &aMark, INS_INSCOLS, false, true, false); + + // Now, the original column B has moved to column D. + if (!checkFormula(*m_pDoc, ScAddress(3,3,0), "SUM(D1:D3)")) + CPPUNIT_FAIL("Wrong formula in D4 after column insertion."); + + CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(3,3,0))); + + m_pDoc->DeleteTab(0); +} + void Test::testFormulaRefUpdateMove() { m_pDoc->InsertTab(0, "Sheet1"); @@ -1982,10 +2005,7 @@ void Test::testFormulaRefUpdateNamedExpressionMove() void Test::testFormulaRefUpdateNamedExpressionExpandRef() { - ScModule* pMod = SC_MOD(); - ScInputOptions aOpt = pMod->GetInputOptions(); - aOpt.SetExpandRefs(true); // turn on automatic range expansion. - pMod->SetInputOptions(aOpt); + setExpandRefs(true); sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits