diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-08-29 14:46:25 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-08-29 14:48:02 -0400 |
commit | e9cb48ff652ac2d4950ff9f1d3f41537bb1b5c80 (patch) | |
tree | 026b39c85c61a65e6de620b5def4bcb800a65368 /sc | |
parent | 5b63c12ace2aec9a659e4b9125f6aa9ff204ed09 (diff) |
Write export unit test for pivot table import / export with xlsx.
Change-Id: Idc4e9e9aafd3fe0a01758fe988ffacd76cb15784
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/data/xlsx/pivot-table/many-fields-in-cache.xlsx | bin | 0 -> 12622 bytes | |||
-rw-r--r-- | sc/qa/unit/subsequent_export-test.cxx | 147 |
2 files changed, 147 insertions, 0 deletions
diff --git a/sc/qa/unit/data/xlsx/pivot-table/many-fields-in-cache.xlsx b/sc/qa/unit/data/xlsx/pivot-table/many-fields-in-cache.xlsx Binary files differnew file mode 100644 index 000000000000..2b39849d8885 --- /dev/null +++ b/sc/qa/unit/data/xlsx/pivot-table/many-fields-in-cache.xlsx diff --git a/sc/qa/unit/subsequent_export-test.cxx b/sc/qa/unit/subsequent_export-test.cxx index 01d1673b084d..d20bf7311d81 100644 --- a/sc/qa/unit/subsequent_export-test.cxx +++ b/sc/qa/unit/subsequent_export-test.cxx @@ -36,6 +36,9 @@ #include <postit.hxx> #include <tokenstringcontext.hxx> #include <chgtrack.hxx> +#include <dpcache.hxx> +#include <dpobject.hxx> +#include <dpsave.hxx> #include <svx/svdoole2.hxx> #include "tabprotection.hxx" @@ -56,6 +59,8 @@ #include <test/xmltesttools.hxx> #include <com/sun/star/table/BorderLineStyle.hpp> +#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> +#include <com/sun/star/sheet/GeneralFunction.hpp> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -116,6 +121,8 @@ public: void testRelativePaths(); void testSheetProtection(); + void testPivotTableXLSX(); + CPPUNIT_TEST_SUITE(ScExportTest); CPPUNIT_TEST(test); #if !defined(MACOSX) && !defined(DRAGONFLY) @@ -152,6 +159,7 @@ public: CPPUNIT_TEST(testRelativePaths); #endif CPPUNIT_TEST(testSheetProtection); + CPPUNIT_TEST(testPivotTableXLSX); CPPUNIT_TEST(testFunctionsExcel2010ODS); CPPUNIT_TEST_SUITE_END(); @@ -1955,6 +1963,7 @@ void testSheetProtection_Impl(ScDocument& rDoc) } } + void ScExportTest::testSheetProtection() { ScDocShellRef xDocSh = loadDoc("sheet-protection.", ODS); @@ -1974,6 +1983,144 @@ void ScExportTest::testSheetProtection() xDocSh2->DoClose(); } +void ScExportTest::testPivotTableXLSX() +{ + struct + { + bool check( const ScDocument& rDoc ) + { + if (!rDoc.HasPivotTable()) + { + cerr << "The document should have pivot table." << endl; + return false; + } + + const ScDPCollection* pDPs = rDoc.GetDPCollection(); + if (!pDPs) + { + cerr << "Pivot table container should exist." << endl; + return false; + } + + ScRange aSrcRange(0,0,0,9,2,0); // A1:J3 on Sheet1. + const ScDPCache* pCache = pDPs->GetSheetCaches().getExistingCache(aSrcRange); + if (!pCache) + { + cerr << "The document should have a pivot cache for A1:J3 on Sheet1." << endl; + return false; + } + + // Cache should have fields from F1 through F10. + + const char* pNames[] = { + "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10" + }; + + size_t nCount = pCache->GetFieldCount(); + if (nCount != SAL_N_ELEMENTS(pNames)) + { + cout << "Incorrect number of fields in pivot cache." << endl; + return false; + } + + for (size_t i = 0; i < nCount; ++i) + { + OUString aCacheName = pCache->GetDimensionName(i); + if (aCacheName != OUString::createFromAscii(pNames[i])) + { + cerr << "Field " << i << " has label '" << aCacheName << "' but expected '" << pNames[i] << "'" << endl; + return false; + } + } + + const ScDPObject* pDPObj = rDoc.GetDPAtCursor(0,10,0); // A11 + if (!pDPObj) + { + cerr << "A pivot table should exist over A11." << endl; + return false; + } + + // Output range should be A8:D15. + ScRange aOutRange = pDPObj->GetOutRange(); + if (ScRange(0,7,0,3,14,0) != aOutRange) + { + cerr << "Incorrect output range." << endl; + return false; + } + + // Row field - F1 + // Column field - F4 + // Page fields - F7 and F6 + // Data field - F10 + + const ScDPSaveData* pSaveData = pDPObj->GetSaveData(); + if (!pSaveData) + { + cerr << "Save data should exist in each pivot table object." << endl; + return false; + } + + std::vector<const ScDPSaveDimension*> aDims; + pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_ROW, aDims); + if (aDims.size() != 1 || aDims[0]->GetName() != "F1") + { + cerr << "Pivot table should have one row field labeld 'F1'" << endl; + return false; + } + + pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_COLUMN, aDims); + if (aDims.size() != 1 || aDims[0]->GetName() != "F4") + { + cerr << "Pivot table should have one column field labeld 'F4'" << endl; + return false; + } + + pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_PAGE, aDims); + if (aDims.size() != 2 || aDims[0]->GetName() != "F7" || aDims[1]->GetName() != "F6") + { + cerr << "Pivot table should have two page fields labeld 'F7' and 'F6' in this order." << endl; + return false; + } + + pSaveData->GetAllDimensionsByOrientation(sheet::DataPilotFieldOrientation_DATA, aDims); + if (aDims.size() != 1 || aDims[0]->GetName() != "F10") + { + cerr << "Pivot table should have one data field labeld 'F10'" << endl; + return false; + } + + const ScDPSaveDimension* pDim = aDims[0]; + if (pDim->GetFunction() != sheet::GeneralFunction_SUM) + { + cerr << "Data field should have SUM function." << endl; + return false; + } + + return true; + } + + } aTest; + + ScDocShellRef xDocSh = loadDoc("pivot-table/many-fields-in-cache.", XLSX); + CPPUNIT_ASSERT(xDocSh.Is()); + ScDocument* pDoc = &xDocSh->GetDocument(); + + // Initial check. + bool bCheck = aTest.check(*pDoc); + CPPUNIT_ASSERT_MESSAGE("Initial check failed.", bCheck); + + ScDocShellRef xDocSh2 = saveAndReload(xDocSh, XLSX); + xDocSh->DoClose(); + CPPUNIT_ASSERT(xDocSh2.Is()); + pDoc = &xDocSh2->GetDocument(); + + // Reload check. + bCheck = aTest.check(*pDoc); + CPPUNIT_ASSERT_MESSAGE("Reload check failed.", bCheck); + + xDocSh2->DoClose(); +} + void ScExportTest::testFunctionsExcel2010ODS() { //testFunctionsExcel2010(ODS); |