diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2017-04-02 11:32:18 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2017-04-02 11:32:18 +0200 |
commit | 2f9a1a499dd4909acb621cbc7976a59c031e2a56 (patch) | |
tree | f9dcbd25576f4652c4d30e705428a7c213ba3188 | |
parent | chart2: simplify pivot chart tests (diff) | |
download | core-feature/pivotcharts.tar.gz core-feature/pivotcharts.zip |
fix crash when there are no row fields + test
feature/pivotcharts
Change-Id: I56852e953e32767fcf7d93f5cfcfd0fe7642443a
-rw-r--r-- | chart2/qa/extras/PivotChartTest.cxx | 38 | ||||
-rw-r--r-- | sc/source/ui/unoobj/PivotChartDataProvider.cxx | 10 |
2 files changed, 44 insertions, 4 deletions
diff --git a/chart2/qa/extras/PivotChartTest.cxx b/chart2/qa/extras/PivotChartTest.cxx index 4cf872599d18..245f5e1ac3a5 100644 --- a/chart2/qa/extras/PivotChartTest.cxx +++ b/chart2/qa/extras/PivotChartTest.cxx @@ -64,7 +64,11 @@ bool lclCheckSequence(std::vector<double> const & reference, double delta) { if (reference.size() != size_t(values.getLength())) + { + printf ("Sequence size differs - reference is %ld but actual is %ld\n", + reference.size(), size_t(values.getLength())); return false; + } for (size_t i = 0; i < reference.size(); ++i) { @@ -233,6 +237,40 @@ void PivotChartTest::testChangePivotTable() CPPUNIT_ASSERT_EQUAL(aExpectedLabel, lclGetLabel(xChartDoc, 2)); } + + // Modify the pivot table + { + uno::Reference<sheet::XDataPilotTable> xDataPilotTable = lclGetPivotTableByName(1, "DataPilot1", mxComponent); + uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, UNO_QUERY_THROW); + + lclModifyOrientation(xDataPilotDescriptor, "Service Month", sheet::DataPilotFieldOrientation_HIDDEN); + } + + // Check the pivot chart again as we expect it has been updated when we updated the pivot table + + CPPUNIT_ASSERT(xChartDoc.is()); + + // Check the first data series + { + std::vector<double> aReference { 10162.033139 }; + xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 0)->getData(); + CPPUNIT_ASSERT(lclCheckSequence(aReference, xSequence, 1E-3)); + CPPUNIT_ASSERT_EQUAL(OUString("Big"), lclGetLabel(xChartDoc, 0)); + } + // Check the second data series + { + std::vector<double> aReference { 16614.523063 }; + xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 1)->getData(); + CPPUNIT_ASSERT(lclCheckSequence(aReference, xSequence, 1E-3)); + CPPUNIT_ASSERT_EQUAL(OUString("Medium"), lclGetLabel(xChartDoc, 1)); + } + // Check the third data series + { + std::vector<double> aReference { 27944.146101 }; + xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 2)->getData(); + CPPUNIT_ASSERT(lclCheckSequence(aReference, xSequence, 1E-3)); + CPPUNIT_ASSERT_EQUAL(OUString("Small"), lclGetLabel(xChartDoc, 2)); + } } CPPUNIT_TEST_SUITE_REGISTRATION(PivotChartTest); diff --git a/sc/source/ui/unoobj/PivotChartDataProvider.cxx b/sc/source/ui/unoobj/PivotChartDataProvider.cxx index 954453193387..7fe660c4a77d 100644 --- a/sc/source/ui/unoobj/PivotChartDataProvider.cxx +++ b/sc/source/ui/unoobj/PivotChartDataProvider.cxx @@ -564,10 +564,12 @@ uno::Reference<chart2::data::XDataSource> PivotChartDataProvider::createPivotCha { std::vector<PivotChartItem> aFirstCategories; - std::copy (m_aCategoriesColumnOrientation[0].begin(), - m_aCategoriesColumnOrientation[0].end(), - std::back_inserter(aFirstCategories)); - + if (!m_aCategoriesColumnOrientation.empty()) + { + std::copy(m_aCategoriesColumnOrientation[0].begin(), + m_aCategoriesColumnOrientation[0].end(), + std::back_inserter(aFirstCategories)); + } uno::Reference<chart2::data::XLabeledDataSequence> xResult = newLabeledDataSequence(); setLabeledDataSequenceValues(xResult, "categories", "Categories", aFirstCategories); aLabeledSequences.push_back(xResult); |