[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Sat Feb 8 12:10:33 PST 2014
sc/qa/unit/ucalc.hxx | 2 +
sc/qa/unit/ucalc_sharedformula.cxx | 39 ++++++++++++++++++++++++++++++++++++
sc/source/core/data/formulacell.cxx | 8 +++++++
3 files changed, 49 insertions(+)
New commits:
commit 1556dbc451f067d8744378fb9bac0eaa7ef8f5ac
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sat Feb 8 15:13:18 2014 -0500
fdo#74453: Only adjust tokens for top formula cells of formula group.
Change-Id: Id04387dffac271b3d617da0fbc19c862c929d60a
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index a1e9ec1..88ca441 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -3023,6 +3023,10 @@ void ScFormulaCell::UpdateInsertTabAbs(SCTAB nTable)
if (pDocument->IsClipOrUndo())
return;
+ bool bAdjustCode = !mxGroup || mxGroup->mpTopCell == this;
+ if (!bAdjustCode)
+ return;
+
pCode->Reset();
ScToken* p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
while (p)
@@ -3045,6 +3049,10 @@ bool ScFormulaCell::TestTabRefAbs(SCTAB nTable)
if (pDocument->IsClipOrUndo())
return false;
+ bool bAdjustCode = !mxGroup || mxGroup->mpTopCell == this;
+ if (!bAdjustCode)
+ return false;
+
bool bRet = false;
pCode->Reset();
ScToken* p = static_cast<ScToken*>(pCode->GetNextReferenceRPN());
commit ac5682aa3013550e3643026c571b5d851b9e7b67
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Sat Feb 8 14:42:31 2014 -0500
fdo#74453: Write unit test for this.
Change-Id: Ic8cbc650d6608ff7af5d1d58deeeba409bb81725
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index f595467..053e607 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -252,6 +252,7 @@ public:
void testSharedFormulasRefUpdateRange();
void testSharedFormulasDeleteRows();
void testSharedFormulasRefUpdateMoveSheets();
+ void testSharedFormulasRefUpdateCopySheets();
void testSharedFormulasCopyPaste();
void testSharedFormulaInsertColumn();
void testFormulaPosition();
@@ -414,6 +415,7 @@ public:
CPPUNIT_TEST(testSharedFormulasRefUpdateRange);
CPPUNIT_TEST(testSharedFormulasDeleteRows);
CPPUNIT_TEST(testSharedFormulasRefUpdateMoveSheets);
+ CPPUNIT_TEST(testSharedFormulasRefUpdateCopySheets);
CPPUNIT_TEST(testSharedFormulasCopyPaste);
CPPUNIT_TEST(testSharedFormulaInsertColumn);
CPPUNIT_TEST(testFormulaPosition);
diff --git a/sc/qa/unit/ucalc_sharedformula.cxx b/sc/qa/unit/ucalc_sharedformula.cxx
index 04e917f..a64398b 100644
--- a/sc/qa/unit/ucalc_sharedformula.cxx
+++ b/sc/qa/unit/ucalc_sharedformula.cxx
@@ -600,6 +600,45 @@ void Test::testSharedFormulasRefUpdateMoveSheets()
m_pDoc->DeleteTab(0);
}
+void Test::testSharedFormulasRefUpdateCopySheets()
+{
+ sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // make sure auto calc is on.
+
+ m_pDoc->InsertTab(0, "Sheet1");
+ m_pDoc->InsertTab(1, "Sheet2");
+
+ m_pDoc->SetValue(ScAddress(0,0,1), 1.0); // A1 on Sheet2
+ m_pDoc->SetValue(ScAddress(0,1,1), 2.0); // A2 on Sheet2
+
+ // Reference values on Sheet2, but use absolute sheet references.
+ m_pDoc->SetString(ScAddress(0,0,0), "=$Sheet2.A1");
+ m_pDoc->SetString(ScAddress(0,1,0), "=$Sheet2.A2");
+
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(0,0,0)));
+ CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(ScAddress(0,1,0)));
+
+ // Copy Sheet1 and insert the copied sheet before the current Sheet1 position.
+ m_pDoc->CopyTab(0, 0);
+
+ if (!checkFormula(*m_pDoc, ScAddress(0,0,0), "$Sheet2.A1"))
+ CPPUNIT_FAIL("Wrong formula");
+
+ if (!checkFormula(*m_pDoc, ScAddress(0,1,0), "$Sheet2.A2"))
+ CPPUNIT_FAIL("Wrong formula");
+
+ // Check the values on the copied sheet.
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(0,0,0)));
+ CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(ScAddress(0,1,0)));
+
+ // Check the values on the original sheet.
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(0,0,1)));
+ CPPUNIT_ASSERT_EQUAL(2.0, m_pDoc->GetValue(ScAddress(0,1,1)));
+
+ m_pDoc->DeleteTab(2);
+ m_pDoc->DeleteTab(1);
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testSharedFormulasCopyPaste()
{
m_pDoc->InsertTab(0, "Test");
More information about the Libreoffice-commits
mailing list