summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/qa/extras/chart2export.cxx39
-rw-r--r--chart2/qa/extras/charttest.hxx46
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();