summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-03-07 18:00:24 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-03-07 18:05:07 -0500
commit78e6b7a94265507e43dd80182706970f49cdb303 (patch)
tree12e1c4ff9699cf6f551acfd7a4263f72057a718b
parent78e2431d3e1aafe672a40d2ce79fbb1c48244fff (diff)
fdo#75628: Write unit test for this.
Change-Id: I26e5d0bf4344eeb518222ba036c61eca861c5fcf
-rw-r--r--sc/qa/unit/ucalc_formula.cxx29
1 files changed, 28 insertions, 1 deletions
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 580e2a3971ad..f4c6f7a95cf3 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -1841,6 +1841,8 @@ void Test::testFuncSUM()
CPPUNIT_ASSERT_MESSAGE ("failed to insert sheet",
m_pDoc->InsertTab (0, aTabName));
+ sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn on auto calc.
+
// Single argument case.
m_pDoc->SetValue(ScAddress(0,0,0), 1);
m_pDoc->SetValue(ScAddress(0,1,0), 1);
@@ -1864,11 +1866,36 @@ void Test::testFuncSUM()
m_pDoc->SetString(ScAddress(3,0,0), "=SUM(A1:A2;B1:B2)");
m_pDoc->SetString(ScAddress(3,1,0), "=SUM(A2:A3;B2:B3)");
m_pDoc->SetString(ScAddress(3,2,0), "=SUM(A3:A4;B3:B4)");
- m_pDoc->CalcAll();
CPPUNIT_ASSERT_EQUAL(30.0, m_pDoc->GetValue(ScAddress(3,0,0)));
CPPUNIT_ASSERT_EQUAL(35.0, m_pDoc->GetValue(ScAddress(3,1,0)));
CPPUNIT_ASSERT_EQUAL(20.0, m_pDoc->GetValue(ScAddress(3,2,0)));
+ // Clear and start over.
+ clearRange(m_pDoc, ScRange(0,0,0,3,MAXROW,0));
+
+ // SUM needs to take the first error in case the range contains an error.
+ m_pDoc->SetValue(ScAddress(0,0,0), 1.0);
+ m_pDoc->SetValue(ScAddress(0,1,0), 10.0);
+ m_pDoc->SetValue(ScAddress(0,2,0), 100.0);
+ m_pDoc->SetString(ScAddress(0,3,0), "=SUM(A1:A3)");
+ CPPUNIT_ASSERT_EQUAL(111.0, m_pDoc->GetValue(ScAddress(0,3,0)));
+
+ // Set #DIV/0! error to A3. A4 should also inherit this error.
+ m_pDoc->SetString(ScAddress(0,2,0), "=1/0");
+ sal_uInt16 nErr = m_pDoc->GetErrCode(ScAddress(0,2,0));
+ CPPUNIT_ASSERT_MESSAGE("Cell should have a division by zero error.",
+ nErr == errDivisionByZero);
+ nErr = m_pDoc->GetErrCode(ScAddress(0,3,0));
+ CPPUNIT_ASSERT_MESSAGE("SUM should have also inherited a div-by-zero error.",
+ nErr == errDivisionByZero);
+
+ // Set #NA! to A2. A4 should now inherit this error.
+ m_pDoc->SetString(ScAddress(0,1,0), "=NA()");
+ nErr = m_pDoc->GetErrCode(ScAddress(0,1,0));
+ CPPUNIT_ASSERT_MESSAGE("A2 should be an error.", nErr);
+ CPPUNIT_ASSERT_MESSAGE("A4 should have inherited the same error as A2.",
+ nErr == m_pDoc->GetErrCode(ScAddress(0,3,0)));
+
m_pDoc->DeleteTab(0);
}