[Libreoffice-commits] core.git: 2 commits - sc/qa sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Wed Oct 15 17:10:09 PDT 2014
sc/qa/unit/ucalc.hxx | 2 ++
sc/qa/unit/ucalc_formula.cxx | 26 ++++++++++++++++++++++++++
sc/source/core/tool/interpr1.cxx | 22 ++++++++++++++++++++--
3 files changed, 48 insertions(+), 2 deletions(-)
New commits:
commit 3e2bd1e4022e25b77bcc8eba5e02c1adc57008a1
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Oct 15 20:07:33 2014 -0400
fdo#73080: Correctly count blank cells in COUNTBLANK.
Especially when formula cells are involved.
Change-Id: I40950e7108778821c17d08354f01bb157b1551e6
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 358dab0..44c3ea6 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -4545,8 +4545,26 @@ void ScInterpreter::ScCountEmptyCells()
ScCellIterator aIter( pDok, aRange, mnSubTotalFlags);
for (bool bHas = aIter.first(); bHas; bHas = aIter.next())
{
- if (!aIter.hasEmptyData())
- ++nCount;
+ const ScRefCellValue& rCell = aIter.getRefCellValue();
+ switch (rCell.meType)
+ {
+ case CELLTYPE_VALUE:
+ case CELLTYPE_STRING:
+ case CELLTYPE_EDIT:
+ ++nCount;
+ break;
+ case CELLTYPE_FORMULA:
+ {
+ sc::FormulaResultValue aRes = rCell.mpFormula->GetResult();
+ if (aRes.meType != sc::FormulaResultValue::String)
+ ++nCount;
+ else if (!aRes.maString.isEmpty())
+ ++nCount;
+ }
+ break;
+ default:
+ ;
+ }
}
}
}
commit 27a2e19ed2c3203c9d63873796d7c9ec2f58dd3d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Oct 15 20:06:45 2014 -0400
fdo#73080: Write test for this first.
Change-Id: Ia2a32f4be3ef2c09ac68fe03ee9a7c9d31aef7ed
diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 259d0a2..d7f85f0 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -140,6 +140,7 @@ public:
void testMultipleOperations();
void testFuncCOLUMN();
void testFuncCOUNT();
+ void testFuncCOUNTBLANK();
void testFuncROW();
void testFuncSUM();
void testFuncPRODUCT();
@@ -429,6 +430,7 @@ public:
CPPUNIT_TEST(testMultipleOperations);
CPPUNIT_TEST(testFuncCOLUMN);
CPPUNIT_TEST(testFuncCOUNT);
+ CPPUNIT_TEST(testFuncCOUNTBLANK);
CPPUNIT_TEST(testFuncROW);
CPPUNIT_TEST(testFuncSUM);
CPPUNIT_TEST(testFuncPRODUCT);
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 45112d1..5c5d6b0 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -2515,6 +2515,32 @@ void Test::testFuncCOUNT()
m_pDoc->DeleteTab(0);
}
+void Test::testFuncCOUNTBLANK()
+{
+ sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
+ m_pDoc->InsertTab(0, "Formula");
+
+ const char* aData[][4] = {
+ { "1", 0, "=B1", "=\"\"" },
+ { "2", 0, "=B2", "=\"\"" },
+ { "A", 0, "=B3", "=\"\"" },
+ { "B", 0, "=B4", "=D3" },
+ { 0, 0, "=B5", "=D4" },
+ { "=COUNTBLANK(A1:A5)", "=COUNTBLANK(B1:B5)", "=COUNTBLANK(C1:C5)", "=COUNTBLANK(D1:D5)" }
+ };
+
+ ScAddress aPos(0,0,0);
+ ScRange aRange = insertRangeData(m_pDoc, aPos, aData, SAL_N_ELEMENTS(aData));
+ CPPUNIT_ASSERT(aRange.aStart == aPos);
+
+ CPPUNIT_ASSERT_EQUAL(1.0, m_pDoc->GetValue(ScAddress(0,5,0)));
+ CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc->GetValue(ScAddress(1,5,0)));
+ CPPUNIT_ASSERT_EQUAL(0.0, m_pDoc->GetValue(ScAddress(2,5,0)));
+ CPPUNIT_ASSERT_EQUAL(5.0, m_pDoc->GetValue(ScAddress(3,5,0)));
+
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testFuncROW()
{
m_pDoc->InsertTab(0, "Formula");
More information about the Libreoffice-commits
mailing list