Kaydet (Commit) 97857c25 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

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
üst 8583bcca
......@@ -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;
......
......@@ -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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment