sc/inc/dputil.hxx | 2 - sc/qa/unit/subsequent_filters-test.cxx | 57 +++++++++++++++++++++++++++++++++ sc/source/core/data/dpdimsave.cxx | 4 +- sc/source/core/data/dpgroup.cxx | 2 - sc/source/core/data/dputil.cxx | 13 ++++--- 5 files changed, 69 insertions(+), 9 deletions(-)
New commits: commit fb7899e2423d26710200e46f66cf85894525afec Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Jan 7 23:00:19 2014 -0500 fdo#72774: Write test to ensure correct group items in pivot cache on load. Change-Id: Ib9656b8e321a12a6f971f5775aaed235eac8df58 diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index fd0ae76..220e6b4 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -1741,6 +1741,7 @@ void ScFiltersTest::testPivotTableSharedCacheGroupODS() bool bHasYears = false; bool bHasMonths = false; + std::vector<SCROW> aMemberIds; for (long nGrpDim = 9; nGrpDim <= 10; ++nGrpDim) { @@ -1748,10 +1749,66 @@ void ScFiltersTest::testPivotTableSharedCacheGroupODS() switch (nGrpType) { case sheet::DataPilotFieldGroupBy::MONTHS: + { bHasMonths = true; + aMemberIds.clear(); + pCache->GetGroupDimMemberIds(nGrpDim, aMemberIds); + + // There should be a total of 14 items for the month group: 12 + // months plus the start and end value items. + + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(14), aMemberIds.size()); + + std::vector<sal_Int32> aGrpValues; + for (size_t i = 0, n = aMemberIds.size(); i < n; ++i) + { + const ScDPItemData* pItem = pCache->GetItemDataById(nGrpDim, aMemberIds[i]); + CPPUNIT_ASSERT_MESSAGE("Failed to get pivot item.", pItem); + CPPUNIT_ASSERT_EQUAL(ScDPItemData::GroupValue, pItem->GetType()); + ScDPItemData::GroupValueAttr aGrpVal = pItem->GetGroupValue(); + CPPUNIT_ASSERT_EQUAL(sheet::DataPilotFieldGroupBy::MONTHS, aGrpVal.mnGroupType); + aGrpValues.push_back(aGrpVal.mnValue); + } + + std::sort(aGrpValues.begin(), aGrpValues.end()); + std::vector<sal_Int32> aChecks; + aChecks.push_back(ScDPItemData::DateFirst); + for (sal_Int32 i = 1; i <= 12; ++i) + aChecks.push_back(i); // January through December. + aChecks.push_back(ScDPItemData::DateLast); + CPPUNIT_ASSERT_MESSAGE("Unexpected group values for the month group.", aGrpValues == aChecks); + } break; case sheet::DataPilotFieldGroupBy::YEARS: + { bHasYears = true; + aMemberIds.clear(); + pCache->GetGroupDimMemberIds(nGrpDim, aMemberIds); + + // There should be a total of 4 items and they should be 2012, + // 2013 and the start and end value items. + + CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aMemberIds.size()); + + std::vector<sal_Int32> aGrpValues; + for (size_t i = 0, n = aMemberIds.size(); i < n; ++i) + { + const ScDPItemData* pItem = pCache->GetItemDataById(nGrpDim, aMemberIds[i]); + CPPUNIT_ASSERT_MESSAGE("Failed to get pivot item.", pItem); + CPPUNIT_ASSERT_EQUAL(ScDPItemData::GroupValue, pItem->GetType()); + ScDPItemData::GroupValueAttr aGrpVal = pItem->GetGroupValue(); + CPPUNIT_ASSERT_EQUAL(sheet::DataPilotFieldGroupBy::YEARS, aGrpVal.mnGroupType); + aGrpValues.push_back(aGrpVal.mnValue); + } + + std::sort(aGrpValues.begin(), aGrpValues.end()); + std::vector<sal_Int32> aChecks; + aChecks.push_back(ScDPItemData::DateFirst); + aChecks.push_back(2012); + aChecks.push_back(2013); + aChecks.push_back(ScDPItemData::DateLast); + CPPUNIT_ASSERT_MESSAGE("Unexpected group values for the year group.", aGrpValues == aChecks); + } break; default: ; commit c2e88a32314012afb799e321ec1d658f99f71781 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Jan 7 22:13:07 2014 -0500 fdo#72774: Generate correct group items for the year group. This changes bring it back to the same algorithm used in 3.5. Change-Id: I16855cef1de133a1f886baa823d5b0d2b148e781 diff --git a/sc/inc/dputil.hxx b/sc/inc/dputil.hxx index e4ed831..9568e95 100644 --- a/sc/inc/dputil.hxx +++ b/sc/inc/dputil.hxx @@ -45,7 +45,7 @@ public: SvNumberFormatter* pFormatter); static sal_Int32 getDatePartValue( - double fValue, const ScDPNumGroupInfo& rInfo, sal_Int32 nDatePart, + double fValue, const ScDPNumGroupInfo* pInfo, sal_Int32 nDatePart, SvNumberFormatter* pFormatter); static OUString getDisplayedMeasureName(const OUString& rName, ScSubTotalFunc eFunc); diff --git a/sc/source/core/data/dpdimsave.cxx b/sc/source/core/data/dpdimsave.cxx index d200971..3f51268 100644 --- a/sc/source/core/data/dpdimsave.cxx +++ b/sc/source/core/data/dpdimsave.cxx @@ -337,8 +337,8 @@ void fillDateGroupDimension( { case sheet::DataPilotFieldGroupBy::YEARS: nStart = ScDPUtil::getDatePartValue( - fSourceMin, rDateInfo, sheet::DataPilotFieldGroupBy::YEARS, pFormatter); - nEnd = ScDPUtil::getDatePartValue(fSourceMax, rDateInfo, sheet::DataPilotFieldGroupBy::YEARS, pFormatter); + fSourceMin, NULL, sheet::DataPilotFieldGroupBy::YEARS, pFormatter); + nEnd = ScDPUtil::getDatePartValue(fSourceMax, NULL, sheet::DataPilotFieldGroupBy::YEARS, pFormatter); break; case sheet::DataPilotFieldGroupBy::QUARTERS: nStart = 1; nEnd = 4; break; case sheet::DataPilotFieldGroupBy::MONTHS: nStart = 1; nEnd = 12; break; diff --git a/sc/source/core/data/dpgroup.cxx b/sc/source/core/data/dpgroup.cxx index f79a740..e5da799 100644 --- a/sc/source/core/data/dpgroup.cxx +++ b/sc/source/core/data/dpgroup.cxx @@ -911,7 +911,7 @@ void ScDPGroupTableData::FillGroupValues(vector<SCROW>& rItems, const vector<lon { SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); sal_Int32 nPartValue = ScDPUtil::getDatePartValue( - pData->GetValue(), *pNumInfo, nDatePart, pFormatter); + pData->GetValue(), pNumInfo, nDatePart, pFormatter); ScDPItemData aItem(nDatePart, nPartValue); rItems[i] = pCache->GetIdByItemData(nColumn, aItem); diff --git a/sc/source/core/data/dputil.cxx b/sc/source/core/data/dputil.cxx index 14b8639..73fc4d7 100644 --- a/sc/source/core/data/dputil.cxx +++ b/sc/source/core/data/dputil.cxx @@ -290,16 +290,19 @@ OUString ScDPUtil::getNumGroupName( } sal_Int32 ScDPUtil::getDatePartValue( - double fValue, const ScDPNumGroupInfo& rInfo, sal_Int32 nDatePart, + double fValue, const ScDPNumGroupInfo* pInfo, sal_Int32 nDatePart, SvNumberFormatter* pFormatter) { // Start and end are inclusive // (End date without a time value is included, with a time value it's not) - if (fValue < rInfo.mfStart && !rtl::math::approxEqual(fValue, rInfo.mfStart)) - return ScDPItemData::DateFirst; - if (fValue > rInfo.mfEnd && !rtl::math::approxEqual(fValue, rInfo.mfEnd)) - return ScDPItemData::DateLast; + if (pInfo) + { + if (fValue < pInfo->mfStart && !rtl::math::approxEqual(fValue, pInfo->mfStart)) + return ScDPItemData::DateFirst; + if (fValue > pInfo->mfEnd && !rtl::math::approxEqual(fValue, pInfo->mfEnd)) + return ScDPItemData::DateLast; + } sal_Int32 nResult = 0; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits