diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-07-06 16:46:09 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-07-06 16:46:47 -0400 |
commit | 2758492a670618262bd42e3b938f3fdf2e9141a2 (patch) | |
tree | 64b334b158de0453f570105d0a76105be50cf599 /sc/qa | |
parent | f2b6d71ccd04f41a849a0e5386f6619bfcc211da (diff) |
New unit test for pivot table's handling of empty rows.
Change-Id: I1c922fd3d06aca49b98a933d82da478b22e74d4a
Diffstat (limited to 'sc/qa')
-rw-r--r-- | sc/qa/unit/ucalc.cxx | 89 |
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"); |