diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-03 12:30:45 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-03 12:32:00 -0400 |
commit | 97857c258178ffc79dd2799cd2d79047a863fb22 (patch) | |
tree | fd8fefeb9dc2bb4e8e4ce4851b51b5222e024e47 /chart2 | |
parent | 8583bccaac0832f3488d7fefefb80109e535b46e (diff) |
Test the import of data series values as well.
There was a bug in there earlier that none of the tests didn't catch.
Change-Id: I1f4ed1ba5e08e7842899a140163f9e165705569b
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/qa/extras/chart2export.cxx | 39 | ||||
-rw-r--r-- | chart2/qa/extras/charttest.hxx | 46 |
2 files changed, 85 insertions, 0 deletions
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index 30b2a35a7e0d..68f6091aa4bb 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -521,6 +521,45 @@ void Chart2ExportTest::testCrosses() void Chart2ExportTest::testScatterChartTextXValues() { load("/chart2/qa/extras/data/docx/", "scatter-chart-text-x-values.docx"); + + Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + + Reference<chart2::XChartType> xCT = getChartTypeFromDoc(xChartDoc, 0, 0); + CPPUNIT_ASSERT(xCT.is()); + + // Make sure we have exactly 3 data series. + std::vector<uno::Sequence<uno::Any> > aLabels = getDataSeriesLabelsFromChartType(xCT); + CPPUNIT_ASSERT_EQUAL(size_t(3), aLabels.size()); + CPPUNIT_ASSERT_EQUAL(OUString("Series 1"), aLabels[0][0].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(OUString("Series 2"), aLabels[1][0].get<OUString>()); + CPPUNIT_ASSERT_EQUAL(OUString("Series 3"), aLabels[2][0].get<OUString>()); + + std::vector<std::vector<double> > aYValues = getDataSeriesYValuesFromChartType(xCT); + CPPUNIT_ASSERT_EQUAL(size_t(3), aYValues.size()); + + // Check the Y values of "Series 1". + CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[0].size()); + CPPUNIT_ASSERT_EQUAL(4.3, aYValues[0][0]); + CPPUNIT_ASSERT_EQUAL(2.5, aYValues[0][1]); + CPPUNIT_ASSERT_EQUAL(3.5, aYValues[0][2]); + CPPUNIT_ASSERT_EQUAL(4.5, aYValues[0][3]); + + // And "Series 2". + CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[1].size()); + CPPUNIT_ASSERT_EQUAL(2.4, aYValues[1][0]); + CPPUNIT_ASSERT_EQUAL(4.4, aYValues[1][1]); + CPPUNIT_ASSERT_EQUAL(1.8, aYValues[1][2]); + CPPUNIT_ASSERT_EQUAL(2.8, aYValues[1][3]); + + // And "Series 3". + CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[2].size()); + CPPUNIT_ASSERT_EQUAL(2.0, aYValues[2][0]); + CPPUNIT_ASSERT_EQUAL(2.0, aYValues[2][1]); + CPPUNIT_ASSERT_EQUAL(3.0, aYValues[2][2]); + CPPUNIT_ASSERT_EQUAL(5.0, aYValues[2][3]); + + // Test the export. xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text"); if (!pXmlDoc) return; diff --git a/chart2/qa/extras/charttest.hxx b/chart2/qa/extras/charttest.hxx index 4ac6db3f730e..f3d199179a49 100644 --- a/chart2/qa/extras/charttest.hxx +++ b/chart2/qa/extras/charttest.hxx @@ -324,6 +324,52 @@ uno::Sequence < OUString > getWriterChartColumnDescriptions( Reference< lang::XC return seriesList; } +std::vector<std::vector<double> > getDataSeriesYValuesFromChartType( const Reference<chart2::XChartType>& xCT ) +{ + Reference<chart2::XDataSeriesContainer> xDSCont(xCT, uno::UNO_QUERY); + CPPUNIT_ASSERT(xDSCont.is()); + Sequence<uno::Reference<chart2::XDataSeries> > aDataSeriesSeq = xDSCont->getDataSeries(); + + double fNan; + rtl::math::setNan(&fNan); + + std::vector<std::vector<double> > aRet; + for (sal_Int32 i = 0; i < aDataSeriesSeq.getLength(); ++i) + { + uno::Reference<chart2::data::XDataSource> xDSrc(aDataSeriesSeq[i], uno::UNO_QUERY); + CPPUNIT_ASSERT(xDSrc.is()); + uno::Sequence<Reference<chart2::data::XLabeledDataSequence> > aDataSeqs = xDSrc->getDataSequences(); + for (sal_Int32 j = 0; j < aDataSeqs.getLength(); ++j) + { + Reference<chart2::data::XDataSequence> xValues = aDataSeqs[j]->getValues(); + CPPUNIT_ASSERT(xValues.is()); + Reference<beans::XPropertySet> xPropSet(xValues, uno::UNO_QUERY); + if (!xPropSet.is()) + continue; + + OUString aRoleName; + xPropSet->getPropertyValue("Role") >>= aRoleName; + if (aRoleName == "values-y") + { + uno::Sequence<uno::Any> aData = xValues->getData(); + std::vector<double> aValues; + aValues.reserve(aData.getLength()); + for (sal_Int32 nVal = 0; nVal < aData.getLength(); ++nVal) + { + double fVal; + if (aData[nVal] >>= fVal) + aValues.push_back(fVal); + else + aValues.push_back(fNan); + } + aRet.push_back(aValues); + } + } + } + + return aRet; +} + std::vector<uno::Sequence<uno::Any> > getDataSeriesLabelsFromChartType( const Reference<chart2::XChartType>& xCT ) { OUString aLabelRole = xCT->getRoleOfSequenceForSeriesLabel(); |