sc/inc/dpobject.hxx |1
sc/qa/unit/ucalc.cxx | 133 +++
sc/source/core/data/dpobject.cxx |6 +
3 files changed, 127 insertions(+), 13 deletions(-)
New commits:
commit 10a5404fd0fc2da42ba5b293363704af081ae308
Author: Kohei Yoshida kohei.yosh...@suse.com
Date: Wed Jan 11 21:10:14 2012 -0500
New test for pivot tables with named source ranges.
diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx
index db8ea92..48e43eb 100644
--- a/sc/inc/dpobject.hxx
+++ b/sc/inc/dpobject.hxx
@@ -286,6 +286,7 @@ public:
ScDocument* mpDoc;
public:
NameCaches(ScDocument* pDoc);
+const ScDPCache* getCache(const rtl::OUString rName) const;
const ScDPCache* getCache(const ::rtl::OUString rName, const ScRange
rRange);
private:
void removeCache(const ::rtl::OUString rName);
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index 26df2e7..ebb368a 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -133,6 +133,12 @@ public:
* Test for pivot table's filtering functionality by page fields.
*/
void testDataPilotFilters();
+
+/**
+ * Test for pivot table's named source range.
+ */
+void testDataPilotNamedSource();
+
void testSheetCopy();
void testSheetMove();
void testExternalRef();
@@ -185,6 +191,7 @@ public:
CPPUNIT_TEST(testDataPilot);
CPPUNIT_TEST(testDataPilotLabels);
CPPUNIT_TEST(testDataPilotFilters);
+CPPUNIT_TEST(testDataPilotNamedSource);
CPPUNIT_TEST(testSheetCopy);
CPPUNIT_TEST(testSheetMove);
CPPUNIT_TEST(testExternalRef);
@@ -1152,17 +1159,12 @@ bool checkDPTableOutput(ScDocument* pDoc, const
ScRange aOutRange, const char*
return true;
}
-ScDPObject* createDPFromRange(
-ScDocument* pDoc, const ScRange rRange, DPFieldDef aFields[], size_t
nFieldCount,
+ScDPObject* createDPFromSourceDesc(
+ScDocument* pDoc, const ScSheetSourceDesc rDesc, DPFieldDef aFields[],
size_t nFieldCount,
bool bFilterButton)
{
-SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row();
-SCCOL nCol1 = rRange.aStart.Col();
-
-ScSheetSourceDesc aSheetDesc(pDoc);
-aSheetDesc.SetSourceRange(rRange);
ScDPObject* pDPObj = new ScDPObject(pDoc);
-pDPObj-SetSheetDesc(aSheetDesc);
+pDPObj-SetSheetDesc(rDesc);
pDPObj-SetOutRange(ScAddress(0, 0, 1));
ScPivotParam aParam;
pDPObj-FillOldParam(aParam);
@@ -1182,16 +1184,16 @@ ScDPObject* createDPFromRange(
aSaveData.SetDrillDown(true);
// Check the sanity of the source range.
-const ScRange rSrcRange = aSheetDesc.GetSourceRange();
-nCol1 = rSrcRange.aStart.Col();
-nRow1 = rSrcRange.aStart.Row();
-nRow2 = rSrcRange.aEnd.Row();
+const ScRange rSrcRange = rDesc.GetSourceRange();
+SCCOL nCol1 = rSrcRange.aStart.Col();
+SCROW nRow1 = rSrcRange.aStart.Row();
+SCROW nRow2 = rSrcRange.aEnd.Row();
CPPUNIT_ASSERT_MESSAGE(source range contains no data!, nRow2 - nRow1
1);
// Set the dimension information.
for (size_t i = 0; i nFieldCount; ++i)
{
-OUString aDimName = pDoc-GetString(nCol1+i, nRow1,
rRange.aStart.Tab());
+OUString aDimName = pDoc-GetString(nCol1+i, nRow1,
rSrcRange.aStart.Tab());
ScDPSaveDimension* pDim = aSaveData.GetDimensionByName(aDimName);
pDim-SetOrientation(static_castsal_uInt16(aFields[i].eOrient));
pDim-SetUsedHierarchy(0);
@@ -1247,6 +1249,15 @@ ScDPObject* createDPFromRange(
return pDPObj;
}
+ScDPObject* createDPFromRange(
+ScDocument* pDoc, const ScRange rRange, DPFieldDef aFields[], size_t
nFieldCount,
+bool bFilterButton)
+{
+ScSheetSourceDesc aSheetDesc(pDoc);
+aSheetDesc.SetSourceRange(rRange);
+return createDPFromSourceDesc(pDoc, aSheetDesc, aFields, nFieldCount,
bFilterButton);
+}
+
}
void Test::testDataPilot()
@@ -1573,6 +1584,102 @@ void Test::testDataPilotFilters()
m_pDoc-DeleteTab(0);
}
+void Test::testDataPilotNamedSource()
+{
+m_pDoc-InsertTab(0, OUString(RTL_CONSTASCII_USTRINGPARAM(Data)));
+m_pDoc-InsertTab(1, OUString(RTL_CONSTASCII_USTRINGPARAM(Table)));
+
+// Dimension definition
+DPFieldDef aFields[] = {
+{ Name, sheet::DataPilotFieldOrientation_ROW },
+{ Group, sheet::DataPilotFieldOrientation_COLUMN },
+{ Score, sheet::DataPilotFieldOrientation_DATA }
+};
+
+// Raw data
+const char* aData[][3] = {
+{ Andy,A, 30 },
+{ Bruce, A, 20 },
+{ Charlie, B, 45 },
+{ David, B, 12 },
+{ Edward, C, 8 },
+{ Frank, C, 15 },
+};
+
+size_t nFieldCount = SAL_N_ELEMENTS(aFields);
+size_t nDataCount = SAL_N_ELEMENTS(aData);
+
+// Insert the raw data.
+ScRange aSrcRange = insertDPSourceData(m_pDoc, aFields, nFieldCount,
aData, nDataCount);
+rtl::OUString aRangeStr;
+aSrcRange.Format(aRangeStr, SCR_ABS_3D,