summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2012-07-06 16:46:09 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-07-06 16:46:47 -0400
commit2758492a670618262bd42e3b938f3fdf2e9141a2 (patch)
tree64b334b158de0453f570105d0a76105be50cf599 /sc
parentf2b6d71ccd04f41a849a0e5386f6619bfcc211da (diff)
New unit test for pivot table's handling of empty rows.
Change-Id: I1c922fd3d06aca49b98a933d82da478b22e74d4a
Diffstat (limited to 'sc')
-rw-r--r--sc/qa/unit/ucalc.cxx89
1 files changed, 89 insertions, 0 deletions
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index f317f52068e1..46da7a093d52 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -167,6 +167,7 @@ public:
void testPivotTableNormalGrouping();
void testPivotTableNumberGrouping();
void testPivotTableDateGrouping();
+ void testPivotTableEmptyRows();
void testSheetCopy();
void testSheetMove();
@@ -234,6 +235,7 @@ public:
CPPUNIT_TEST(testPivotTableNormalGrouping);
CPPUNIT_TEST(testPivotTableNumberGrouping);
CPPUNIT_TEST(testPivotTableDateGrouping);
+ CPPUNIT_TEST(testPivotTableEmptyRows);
CPPUNIT_TEST(testSheetCopy);
CPPUNIT_TEST(testSheetMove);
CPPUNIT_TEST(testExternalRef);
@@ -2688,6 +2690,93 @@ void Test::testPivotTableDateGrouping()
m_pDoc->DeleteTab(0);
}
+void Test::testPivotTableEmptyRows()
+{
+ m_pDoc->InsertTab(0, OUString("Data"));
+ m_pDoc->InsertTab(1, OUString("Table"));
+
+ // Raw data
+ const char* aData[][2] = {
+ { "Name", "Value" },
+ { "A", "1" },
+ { "B", "2" },
+ { "C", "3" },
+ { "D", "4" },
+ };
+
+ // Dimension definition
+ DPFieldDef aFields[] = {
+ { "Name", sheet::DataPilotFieldOrientation_ROW, 0 },
+ { "Value", sheet::DataPilotFieldOrientation_DATA, sheet::GeneralFunction_SUM },
+ };
+
+ ScAddress aPos(1,1,0);
+ ScRange aDataRange = insertRangeData(m_pDoc, aPos, aData, SAL_N_ELEMENTS(aData));
+ CPPUNIT_ASSERT_MESSAGE("failed to insert range data at correct position", aDataRange.aStart == aPos);
+
+ // Extend the range downward to include some trailing empty rows.
+ aDataRange.aEnd.IncRow(2);
+
+ ScDPObject* pDPObj = createDPFromRange(
+ m_pDoc, aDataRange, aFields, SAL_N_ELEMENTS(aFields), false);
+
+ ScDPCollection* pDPs = m_pDoc->GetDPCollection();
+ bool bSuccess = pDPs->InsertNewTable(pDPObj);
+
+ CPPUNIT_ASSERT_MESSAGE("failed to insert a new pivot table object into document.", bSuccess);
+ CPPUNIT_ASSERT_MESSAGE("there should be only one data pilot table.",
+ pDPs->GetCount() == 1);
+ pDPObj->SetName(pDPs->CreateNewName());
+
+ ScRange aOutRange = refresh(pDPObj);
+
+ {
+ // Expected output table content. 0 = empty cell
+ const char* aOutputCheck[][2] = {
+ { "Name", 0 },
+ { "A", "1" },
+ { "B", "2" },
+ { "C", "3" },
+ { "D", "4" },
+ { "(empty)", 0 },
+ { "Total Result", "10" },
+ };
+
+ bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Include empty rows");
+ CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess);
+ }
+
+ // This time, ignore empty rows.
+ ScDPSaveData* pSaveData = pDPObj->GetSaveData();
+ CPPUNIT_ASSERT_MESSAGE("Save data doesn't exist.", pSaveData);
+ pSaveData->SetIgnoreEmptyRows(true);
+ pDPObj->ClearTableData();
+ aOutRange = refresh(pDPObj);
+
+ {
+ // Expected output table content. 0 = empty cell
+ const char* aOutputCheck[][2] = {
+ { "Name", 0 },
+ { "A", "1" },
+ { "B", "2" },
+ { "C", "3" },
+ { "D", "4" },
+ { "Total Result", "10" },
+ };
+
+ bSuccess = checkDPTableOutput<2>(m_pDoc, aOutRange, aOutputCheck, "Ignore empty rows");
+ CPPUNIT_ASSERT_MESSAGE("Table output check failed", bSuccess);
+ }
+
+ pDPs->FreeTable(pDPObj);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be no more tables.", pDPs->GetCount(), static_cast<size_t>(0));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("There shouldn't be any more cache stored.",
+ pDPs->GetSheetCaches().size(), static_cast<size_t>(0));
+
+ m_pDoc->DeleteTab(1);
+ m_pDoc->DeleteTab(0);
+}
+
void Test::testSheetCopy()
{
OUString aTabName("TestTab");