1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
9
10 #include "charttest.hxx"
11
12 #include <test/xmltesttools.hxx>
13
14 #include <com/sun/star/chart/ErrorBarStyle.hpp>
15 #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
16 #include <com/sun/star/chart2/XDataPointCustomLabelField.hpp>
17 #include <com/sun/star/chart2/DataPointCustomLabelFieldType.hpp>
18 #include <com/sun/star/lang/XServiceName.hpp>
19 #include <com/sun/star/packages/zip/ZipFileAccess.hpp>
20 #include <com/sun/star/text/XTextDocument.hpp>
21 #include <com/sun/star/drawing/LineStyle.hpp>
22 #include <com/sun/star/drawing/FillStyle.hpp>
23 #include <com/sun/star/chart2/DataPointLabel.hpp>
24 #include <com/sun/star/chart/DataLabelPlacement.hpp>
25
26 #include <unotools/ucbstreamhelper.hxx>
27
28 #include <libxml/xpathInternals.h>
29
30 #include <algorithm>
31
32 using uno::Reference;
33 using beans::XPropertySet;
34
35 class Chart2ExportTest : public ChartTest, public XmlTestTools
36 {
37 protected:
38
39 virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override;
40 public:
Chart2ExportTest()41 Chart2ExportTest() : ChartTest() {}
42 void testErrorBarXLSX();
43 void testErrorBarPropXLSX();
44 void testTrendline();
45 void testTrendlineOOXML();
46 void testTrendlineXLS();
47 void testStockChart();
48 void testBarChart();
49 void testCrosses();
50 void testScatterChartTextXValues();
51 void testScatterXAxisValues();
52 void testChartDataTable();
53 void testChartExternalData();
54 void testEmbeddingsGrabBag();
55 void testAreaChartLoad();
56 void testUpDownBars();
57 void testDoughnutChart();
58 void testDisplayUnits();
59 // void testFdo74115WallGradientFill();
60 void testFdo74115WallBitmapFill();
61 void testPieChartWallLineStyle();
62 void testBarChartRotation();
63 void testShapeFollowedByChart();
64 void testPieChartDataLabels();
65 void testSeriesIdxOrder();
66 void testScatterPlotLabels();
67 void testErrorBarDataRangeODS();
68 void testChartCrash();
69 void testPieChartRotation();
70 void testEmbeddingsOleObjectGrabBag();
71 void testGapWidthXLSX();
72 void testSmoothedLines();
73 void testLabelStringODS();
74 void testFdo78290LineChartMarkerX();
75 void testFdo78290ScatterChartMarkerX();
76 void testFdo78290CombinationChartMarkerX();
77 void testTdf126115IndividualMarker();
78 void testAxisNumberFormatODS();
79 void testAxisNumberFormatXLS();
80 void testDataLabelBordersDOCX();
81 void testDataLabel3DChartDOCX();
82 void testDataLabelBarChartDOCX();
83 void testDataLabelClusteredBarChartDOCX();
84 void testDataLabelRadarChartDOCX();
85 void testDataLabelDoughnutChartDOCX();
86 void testDataLabelAreaChartDOCX();
87 void testDataLabelDefaultLineChartDOCX();
88 void testIndividualDataLabelProps();
89 void testChartTitlePropertiesColorFillDOCX();
90 void testChartTitlePropertiesGradientFillDOCX();
91 void testChartTitlePropertiesBitmapFillDOCX();
92 void testColorGradientWithTransparancyDOCX();
93 void testColorGradientWithTransparancyODS();
94 void testColorGradientStopXLSX();
95 void testBarChartDataPointPropDOCX();
96 void testFdo83058dlblPos();
97 void testAutoTitleDelXLSX();
98 void testDispBlanksAsXLSX();
99 void testMarkerColorXLSX();
100 void testRoundedCornersXLSX();
101 void testAxisNumberFormatXLSX();
102 void testDataPointLabelNumberFormatXLSX();
103 void testDataLabelDefaultValuesXLSX();
104 void testTitleOverlayXLSX();
105 void testInvertIfNegativeXLSX();
106 void testBubble3DXLSX();
107 void testNoMarkerXLSX();
108 void testTitleManualLayoutXLSX();
109 void testPlotAreaManualLayoutXLSX();
110 void testLegendManualLayoutXLSX();
111 void testChartSubTitle();
112 void testChartMainWithSubTitle();
113 void testAutoTitleDeleted();
114 void testChartTitlePropertiesColorFillXLSX();
115 void testChartTitlePropertiesGradientFillXLSX();
116 void testChartTitlePropertiesBitmapFillXLSX();
117 void testBarChartDataPointPropXLSX();
118 void testDataseriesOverlapStackedChartXLSX();
119 void testAxisCharacterPropertiesXLSX();
120 void testTitleCharacterPropertiesXLSX();
121 void testPlotVisOnlyXLSX();
122 void testBarChartVaryColorsXLSX();
123 void testMultipleAxisXLSX();
124 void testSecondaryAxisXLSX();
125 void testSetSeriesToSecondaryAxisXLSX();
126 void testCombinedChartSecondaryAxisXLSX();
127 void testCombinedChartSecondaryAxisODS();
128 void testCrossBetweenXLSX();
129 void testCrossBetweenWithDeletedAxis();
130 void testCrossBetweenODS();
131 void testAxisTitleRotationXLSX();
132 void testAxisTitlePositionDOCX();
133 void testAxisCrossBetweenXSLX();
134 void testPieChartDataPointExplosionXLSX();
135 void testCustomDataLabel();
136 void testCustomDataLabelMultipleSeries();
137 void testNumberFormatExportPPTX();
138 void testLabelSeparatorExportDOCX();
139 void testChartTitlePropertiesColorFillPPTX();
140 void testChartTitlePropertiesGradientFillPPTX();
141 void testChartTitlePropertiesBitmapFillPPTX();
142 void testxAxisLabelsRotation();
143 void testMultipleCategoryAxisLablesXLSX();
144 void testMultipleCategoryAxisLablesDOCX();
145 void testTdf116163();
146 void testTdf111824();
147 void testTdf119029();
148 void testTdf108022();
149 void testTdf121744();
150 void testTdf122031();
151 void testTdf115012();
152 void testTdf123206_customLabelText();
153 void testCustomLabelText();
154 void testTdf131979();
155 void testTdf132594();
156
157 CPPUNIT_TEST_SUITE(Chart2ExportTest);
158 CPPUNIT_TEST(testErrorBarXLSX);
159 CPPUNIT_TEST(testErrorBarPropXLSX);
160 CPPUNIT_TEST(testTrendline);
161 CPPUNIT_TEST(testTrendlineOOXML);
162 CPPUNIT_TEST(testTrendlineXLS);
163 CPPUNIT_TEST(testStockChart);
164 CPPUNIT_TEST(testBarChart);
165 CPPUNIT_TEST(testCrosses);
166 CPPUNIT_TEST(testScatterChartTextXValues);
167 CPPUNIT_TEST(testScatterXAxisValues);
168 CPPUNIT_TEST(testChartDataTable);
169 CPPUNIT_TEST(testChartExternalData);
170 CPPUNIT_TEST(testEmbeddingsGrabBag);
171 CPPUNIT_TEST(testAreaChartLoad);
172 CPPUNIT_TEST(testUpDownBars);
173 CPPUNIT_TEST(testDoughnutChart);
174 CPPUNIT_TEST(testDisplayUnits);
175 // CPPUNIT_TEST(testFdo74115WallGradientFill);
176 CPPUNIT_TEST(testFdo74115WallBitmapFill);
177 CPPUNIT_TEST(testPieChartWallLineStyle);
178 CPPUNIT_TEST(testBarChartRotation);
179 CPPUNIT_TEST(testShapeFollowedByChart);
180 CPPUNIT_TEST(testPieChartDataLabels);
181 CPPUNIT_TEST(testSeriesIdxOrder);
182 CPPUNIT_TEST(testScatterPlotLabels);
183 CPPUNIT_TEST(testErrorBarDataRangeODS);
184 CPPUNIT_TEST(testChartCrash);
185 CPPUNIT_TEST(testPieChartRotation);
186 CPPUNIT_TEST(testEmbeddingsOleObjectGrabBag);
187 CPPUNIT_TEST(testGapWidthXLSX);
188 CPPUNIT_TEST(testSmoothedLines);
189 CPPUNIT_TEST(testLabelStringODS);
190 CPPUNIT_TEST(testFdo78290LineChartMarkerX);
191 CPPUNIT_TEST(testFdo78290ScatterChartMarkerX);
192 CPPUNIT_TEST(testFdo78290CombinationChartMarkerX);
193 CPPUNIT_TEST(testTdf126115IndividualMarker);
194 CPPUNIT_TEST(testAxisNumberFormatODS);
195 CPPUNIT_TEST(testAxisNumberFormatXLS);
196 CPPUNIT_TEST(testDataLabelBordersDOCX);
197 CPPUNIT_TEST(testDataLabel3DChartDOCX);
198 CPPUNIT_TEST(testDataLabelBarChartDOCX);
199 CPPUNIT_TEST(testDataLabelClusteredBarChartDOCX);
200 CPPUNIT_TEST(testDataLabelRadarChartDOCX);
201 CPPUNIT_TEST(testDataLabelDoughnutChartDOCX);
202 CPPUNIT_TEST(testDataLabelAreaChartDOCX);
203 CPPUNIT_TEST(testDataLabelDefaultLineChartDOCX);
204 CPPUNIT_TEST(testIndividualDataLabelProps);
205 CPPUNIT_TEST(testChartTitlePropertiesColorFillDOCX);
206 CPPUNIT_TEST(testChartTitlePropertiesGradientFillDOCX);
207 CPPUNIT_TEST(testChartTitlePropertiesBitmapFillDOCX);
208 CPPUNIT_TEST(testColorGradientWithTransparancyDOCX);
209 CPPUNIT_TEST(testColorGradientWithTransparancyODS);
210 CPPUNIT_TEST(testColorGradientStopXLSX);
211 CPPUNIT_TEST(testBarChartDataPointPropDOCX);
212 CPPUNIT_TEST(testFdo83058dlblPos);
213 CPPUNIT_TEST(testAutoTitleDelXLSX);
214 CPPUNIT_TEST(testDispBlanksAsXLSX);
215 CPPUNIT_TEST(testMarkerColorXLSX);
216 CPPUNIT_TEST(testRoundedCornersXLSX);
217 CPPUNIT_TEST(testAxisNumberFormatXLSX);
218 CPPUNIT_TEST(testDataPointLabelNumberFormatXLSX);
219 CPPUNIT_TEST(testDataLabelDefaultValuesXLSX);
220 CPPUNIT_TEST(testTitleOverlayXLSX);
221 CPPUNIT_TEST(testInvertIfNegativeXLSX);
222 CPPUNIT_TEST(testBubble3DXLSX);
223 CPPUNIT_TEST(testNoMarkerXLSX);
224 CPPUNIT_TEST(testTitleManualLayoutXLSX);
225 CPPUNIT_TEST(testPlotAreaManualLayoutXLSX);
226 CPPUNIT_TEST(testLegendManualLayoutXLSX);
227 CPPUNIT_TEST(testChartSubTitle);
228 CPPUNIT_TEST(testChartMainWithSubTitle);
229 CPPUNIT_TEST(testAutoTitleDeleted);
230 CPPUNIT_TEST(testChartTitlePropertiesColorFillXLSX);
231 CPPUNIT_TEST(testChartTitlePropertiesGradientFillXLSX);
232 CPPUNIT_TEST(testChartTitlePropertiesBitmapFillXLSX);
233 CPPUNIT_TEST(testBarChartDataPointPropXLSX);
234 CPPUNIT_TEST(testDataseriesOverlapStackedChartXLSX);
235 CPPUNIT_TEST(testAxisCharacterPropertiesXLSX);
236 CPPUNIT_TEST(testTitleCharacterPropertiesXLSX);
237 CPPUNIT_TEST(testPlotVisOnlyXLSX);
238 CPPUNIT_TEST(testBarChartVaryColorsXLSX);
239 CPPUNIT_TEST(testMultipleAxisXLSX);
240 CPPUNIT_TEST(testSecondaryAxisXLSX);
241 CPPUNIT_TEST(testSetSeriesToSecondaryAxisXLSX);
242 CPPUNIT_TEST(testCombinedChartSecondaryAxisXLSX);
243 CPPUNIT_TEST(testCombinedChartSecondaryAxisODS);
244 CPPUNIT_TEST(testCrossBetweenXLSX);
245 CPPUNIT_TEST(testCrossBetweenWithDeletedAxis);
246 CPPUNIT_TEST(testCrossBetweenODS);
247 CPPUNIT_TEST(testAxisTitleRotationXLSX);
248 CPPUNIT_TEST(testAxisTitlePositionDOCX);
249 CPPUNIT_TEST(testAxisCrossBetweenXSLX);
250 CPPUNIT_TEST(testPieChartDataPointExplosionXLSX);
251 CPPUNIT_TEST(testCustomDataLabel);
252 CPPUNIT_TEST(testCustomDataLabelMultipleSeries);
253 CPPUNIT_TEST(testNumberFormatExportPPTX);
254 CPPUNIT_TEST(testLabelSeparatorExportDOCX);
255 CPPUNIT_TEST(testChartTitlePropertiesColorFillPPTX);
256 CPPUNIT_TEST(testChartTitlePropertiesGradientFillPPTX);
257 CPPUNIT_TEST(testChartTitlePropertiesBitmapFillPPTX);
258 CPPUNIT_TEST(testxAxisLabelsRotation);
259 CPPUNIT_TEST(testMultipleCategoryAxisLablesXLSX);
260 CPPUNIT_TEST(testMultipleCategoryAxisLablesDOCX);
261 CPPUNIT_TEST(testTdf116163);
262 CPPUNIT_TEST(testTdf111824);
263 CPPUNIT_TEST(testTdf119029);
264 CPPUNIT_TEST(testTdf108022);
265 CPPUNIT_TEST(testTdf121744);
266 CPPUNIT_TEST(testTdf122031);
267 CPPUNIT_TEST(testTdf115012);
268 CPPUNIT_TEST(testTdf123206_customLabelText);
269 CPPUNIT_TEST(testCustomLabelText);
270 CPPUNIT_TEST(testTdf131979);
271 CPPUNIT_TEST(testTdf132594);
272
273 CPPUNIT_TEST_SUITE_END();
274
275 protected:
276 /**
277 * Given that some problem doesn't affect the result in the importer, we
278 * test the resulting file directly, by opening the zip file, parsing an
279 * xml stream, and asserting an XPath expression. This method returns the
280 * xml stream, so that you can do the asserting.
281 */
282 xmlDocPtr parseExport(const OUString& rDir, const OUString& rFilterFormat);
283
284 };
285
286 namespace {
287
288 struct CheckForChartName
289 {
290 private:
291 OUString aDir;
292
293 public:
CheckForChartName__anon2b64bac60111::CheckForChartName294 explicit CheckForChartName( const OUString& rDir ):
295 aDir(rDir) {}
296
operator ()__anon2b64bac60111::CheckForChartName297 bool operator()(const OUString& rName)
298 {
299 if(!rName.startsWith(aDir))
300 return false;
301
302 if(!rName.endsWith(".xml"))
303 return false;
304
305 return true;
306 }
307 };
308
findChartFile(const OUString & rDir,uno::Reference<container::XNameAccess> const & xNames)309 OUString findChartFile(const OUString& rDir, uno::Reference< container::XNameAccess > const & xNames )
310 {
311 uno::Sequence<OUString> aNames = xNames->getElementNames();
312 OUString* pElement = std::find_if(aNames.begin(), aNames.end(), CheckForChartName(rDir));
313
314 CPPUNIT_ASSERT(pElement != aNames.end());
315 return *pElement;
316 }
317
318 }
319
parseExport(const OUString & rDir,const OUString & rFilterFormat)320 xmlDocPtr Chart2ExportTest::parseExport(const OUString& rDir, const OUString& rFilterFormat)
321 {
322 std::shared_ptr<utl::TempFile> pTempFile = save(rFilterFormat);
323
324 // Read the XML stream we're interested in.
325 uno::Reference<packages::zip::XZipFileAccess2> xNameAccess = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), pTempFile->GetURL());
326 uno::Reference<io::XInputStream> xInputStream(xNameAccess->getByName(findChartFile(rDir, xNameAccess)), uno::UNO_QUERY);
327 CPPUNIT_ASSERT(xInputStream.is());
328 std::shared_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(xInputStream, true));
329
330 return parseXmlStream(pStream.get());
331 }
332
registerNamespaces(xmlXPathContextPtr & pXmlXPathCtx)333 void Chart2ExportTest::registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx)
334 {
335 static struct { char const * pPrefix; char const * pURI; } const aNamespaces[] =
336 {
337 { "w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main" },
338 { "v", "urn:schemas-microsoft-com:vml" },
339 { "c", "http://schemas.openxmlformats.org/drawingml/2006/chart" },
340 { "a", "http://schemas.openxmlformats.org/drawingml/2006/main" },
341 { "mc", "http://schemas.openxmlformats.org/markup-compatibility/2006" },
342 { "wps", "http://schemas.microsoft.com/office/word/2010/wordprocessingShape" },
343 { "wpg", "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" },
344 { "wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" },
345 { "office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" },
346 { "table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0" },
347 { "text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" },
348 { "xlink", "http://www.w3c.org/1999/xlink" }
349 };
350 for(size_t i = 0; i < SAL_N_ELEMENTS(aNamespaces); ++i)
351 {
352 xmlXPathRegisterNs(
353 pXmlXPathCtx,
354 reinterpret_cast<xmlChar const *>(aNamespaces[i].pPrefix),
355 reinterpret_cast<xmlChar const *>(aNamespaces[i].pURI));
356 }
357 }
358
359 namespace {
360
testErrorBar(Reference<XPropertySet> const & xErrorBar)361 void testErrorBar( Reference< XPropertySet > const & xErrorBar )
362 {
363 sal_Int32 nErrorBarStyle;
364 CPPUNIT_ASSERT(
365 xErrorBar->getPropertyValue("ErrorBarStyle") >>= nErrorBarStyle);
366 CPPUNIT_ASSERT_EQUAL(chart::ErrorBarStyle::RELATIVE, nErrorBarStyle);
367 bool bShowPositive = bool(), bShowNegative = bool();
368 CPPUNIT_ASSERT(
369 xErrorBar->getPropertyValue("ShowPositiveError") >>= bShowPositive);
370 CPPUNIT_ASSERT(bShowPositive);
371 CPPUNIT_ASSERT(
372 xErrorBar->getPropertyValue("ShowNegativeError") >>= bShowNegative);
373 CPPUNIT_ASSERT(bShowNegative);
374 double nVal = 0.0;
375 CPPUNIT_ASSERT(xErrorBar->getPropertyValue("PositiveError") >>= nVal);
376 CPPUNIT_ASSERT_DOUBLES_EQUAL(10.0, nVal, 1e-10);
377 }
378
checkCommonTrendline(Reference<chart2::XRegressionCurve> const & xCurve,double aExpectedExtrapolateForward,double aExpectedExtrapolateBackward,bool aExpectedForceIntercept,double aExpectedInterceptValue,bool aExpectedShowEquation,bool aExpectedR2)379 void checkCommonTrendline(
380 Reference<chart2::XRegressionCurve> const & xCurve,
381 double aExpectedExtrapolateForward, double aExpectedExtrapolateBackward,
382 bool aExpectedForceIntercept, double aExpectedInterceptValue,
383 bool aExpectedShowEquation, bool aExpectedR2)
384 {
385 Reference<XPropertySet> xProperties( xCurve , uno::UNO_QUERY );
386 CPPUNIT_ASSERT(xProperties.is());
387
388 double aExtrapolateForward = 0.0;
389 CPPUNIT_ASSERT(xProperties->getPropertyValue("ExtrapolateForward") >>= aExtrapolateForward);
390 CPPUNIT_ASSERT_EQUAL(aExpectedExtrapolateForward, aExtrapolateForward);
391
392 double aExtrapolateBackward = 0.0;
393 CPPUNIT_ASSERT(xProperties->getPropertyValue("ExtrapolateBackward") >>= aExtrapolateBackward);
394 CPPUNIT_ASSERT_EQUAL(aExpectedExtrapolateBackward, aExtrapolateBackward);
395
396 bool bForceIntercept = false;
397 CPPUNIT_ASSERT(xProperties->getPropertyValue("ForceIntercept") >>= bForceIntercept);
398 CPPUNIT_ASSERT_EQUAL(aExpectedForceIntercept, bForceIntercept);
399
400 if (bForceIntercept)
401 {
402 double aInterceptValue = 0.0;
403 CPPUNIT_ASSERT(xProperties->getPropertyValue("InterceptValue") >>= aInterceptValue);
404 CPPUNIT_ASSERT_EQUAL(aExpectedInterceptValue, aInterceptValue);
405 }
406
407 Reference< XPropertySet > xEquationProperties( xCurve->getEquationProperties() );
408 CPPUNIT_ASSERT(xEquationProperties.is());
409
410 bool bShowEquation = false;
411 CPPUNIT_ASSERT(xEquationProperties->getPropertyValue("ShowEquation") >>= bShowEquation);
412 CPPUNIT_ASSERT_EQUAL(aExpectedShowEquation, bShowEquation);
413
414 bool bShowCorrelationCoefficient = false;
415 CPPUNIT_ASSERT(xEquationProperties->getPropertyValue("ShowCorrelationCoefficient") >>= bShowCorrelationCoefficient);
416 CPPUNIT_ASSERT_EQUAL(aExpectedR2, bShowCorrelationCoefficient);
417 }
418
checkNameAndType(Reference<XPropertySet> const & xProperties,const OUString & aExpectedName,const OUString & aExpectedServiceName)419 void checkNameAndType(Reference<XPropertySet> const & xProperties, const OUString& aExpectedName, const OUString& aExpectedServiceName)
420 {
421 Reference< lang::XServiceName > xServiceName( xProperties, UNO_QUERY );
422 CPPUNIT_ASSERT(xServiceName.is());
423
424 OUString aServiceName = xServiceName->getServiceName();
425 CPPUNIT_ASSERT_EQUAL(aExpectedServiceName, aServiceName);
426
427 OUString aCurveName;
428 CPPUNIT_ASSERT(xProperties->getPropertyValue("CurveName") >>= aCurveName);
429 CPPUNIT_ASSERT_EQUAL(aExpectedName, aCurveName);
430 }
431
checkLinearTrendline(Reference<chart2::XRegressionCurve> const & xCurve,const OUString & aExpectedName,double aExpectedExtrapolateForward,double aExpectedExtrapolateBackward,double aExpectedInterceptValue)432 void checkLinearTrendline(
433 Reference<chart2::XRegressionCurve> const & xCurve, const OUString& aExpectedName,
434 double aExpectedExtrapolateForward, double aExpectedExtrapolateBackward,
435 double aExpectedInterceptValue)
436 {
437 Reference<XPropertySet> xProperties( xCurve , uno::UNO_QUERY );
438 CPPUNIT_ASSERT(xProperties.is());
439
440 checkNameAndType(xProperties, aExpectedName, "com.sun.star.chart2.LinearRegressionCurve");
441
442 checkCommonTrendline(
443 xCurve,
444 aExpectedExtrapolateForward, aExpectedExtrapolateBackward,
445 /*aExpectedForceIntercept*/false, aExpectedInterceptValue,
446 /*aExpectedShowEquation*/true, /*aExpectedR2*/false);
447 }
448
checkPolynomialTrendline(Reference<chart2::XRegressionCurve> const & xCurve,const OUString & aExpectedName,sal_Int32 aExpectedDegree,double aExpectedExtrapolateForward,double aExpectedExtrapolateBackward,double aExpectedInterceptValue)449 void checkPolynomialTrendline(
450 Reference<chart2::XRegressionCurve> const & xCurve, const OUString& aExpectedName,
451 sal_Int32 aExpectedDegree,
452 double aExpectedExtrapolateForward, double aExpectedExtrapolateBackward,
453 double aExpectedInterceptValue)
454 {
455 Reference<XPropertySet> xProperties( xCurve , uno::UNO_QUERY );
456 CPPUNIT_ASSERT(xProperties.is());
457
458 checkNameAndType(xProperties, aExpectedName, "com.sun.star.chart2.PolynomialRegressionCurve");
459
460 sal_Int32 aDegree = 2;
461 CPPUNIT_ASSERT(xProperties->getPropertyValue("PolynomialDegree") >>= aDegree);
462 CPPUNIT_ASSERT_EQUAL(aExpectedDegree, aDegree);
463
464 checkCommonTrendline(
465 xCurve,
466 aExpectedExtrapolateForward, aExpectedExtrapolateBackward,
467 /*aExpectedForceIntercept*/true, aExpectedInterceptValue,
468 /*aExpectedShowEquation*/true, /*aExpectedR2*/true);
469 }
470
checkMovingAverageTrendline(Reference<chart2::XRegressionCurve> const & xCurve,const OUString & aExpectedName,sal_Int32 aExpectedPeriod)471 void checkMovingAverageTrendline(
472 Reference<chart2::XRegressionCurve> const & xCurve, const OUString& aExpectedName, sal_Int32 aExpectedPeriod)
473 {
474 Reference<XPropertySet> xProperties( xCurve , uno::UNO_QUERY );
475 CPPUNIT_ASSERT(xProperties.is());
476
477 checkNameAndType(xProperties, aExpectedName, "com.sun.star.chart2.MovingAverageRegressionCurve");
478
479 sal_Int32 aPeriod = 2;
480 CPPUNIT_ASSERT(xProperties->getPropertyValue("MovingAveragePeriod") >>= aPeriod);
481 CPPUNIT_ASSERT_EQUAL(aExpectedPeriod, aPeriod);
482 }
483
checkTrendlinesInChart(uno::Reference<chart2::XChartDocument> const & xChartDoc)484 void checkTrendlinesInChart(uno::Reference< chart2::XChartDocument > const & xChartDoc)
485 {
486 CPPUNIT_ASSERT(xChartDoc.is());
487
488 Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
489 CPPUNIT_ASSERT( xDataSeries.is() );
490
491 Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( xDataSeries, UNO_QUERY );
492 CPPUNIT_ASSERT( xRegressionCurveContainer.is() );
493
494 Sequence< Reference< chart2::XRegressionCurve > > xRegressionCurveSequence = xRegressionCurveContainer->getRegressionCurves();
495 CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xRegressionCurveSequence.getLength());
496
497 Reference<chart2::XRegressionCurve> xCurve;
498
499 xCurve = xRegressionCurveSequence[0];
500 CPPUNIT_ASSERT(xCurve.is());
501 checkPolynomialTrendline(xCurve, "col2_poly", 3, 0.1, -0.1, -1.0);
502
503 xCurve = xRegressionCurveSequence[1];
504 CPPUNIT_ASSERT(xCurve.is());
505 checkLinearTrendline(xCurve, "col2_linear", -0.5, -0.5, 0.0);
506
507 xCurve = xRegressionCurveSequence[2];
508 CPPUNIT_ASSERT(xCurve.is());
509 checkMovingAverageTrendline(xCurve, "col2_moving_avg", 3);
510 }
511
512 }
513
514 // improve the test
testErrorBarXLSX()515 void Chart2ExportTest::testErrorBarXLSX()
516 {
517 load("/chart2/qa/extras/data/ods/", "error_bar.ods");
518 {
519 // make sure the ODS import was successful
520 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
521 CPPUNIT_ASSERT(xChartDoc.is());
522
523 Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
524 CPPUNIT_ASSERT( xDataSeries.is() );
525
526 Reference< beans::XPropertySet > xPropSet( xDataSeries, UNO_QUERY_THROW );
527
528 // test that y error bars are there
529 Reference< beans::XPropertySet > xErrorBarYProps;
530 xPropSet->getPropertyValue(CHART_UNONAME_ERRORBAR_Y) >>= xErrorBarYProps;
531 testErrorBar(xErrorBarYProps);
532 }
533
534 reload("Calc Office Open XML");
535 {
536 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
537 CPPUNIT_ASSERT(xChartDoc.is());
538
539 Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
540 CPPUNIT_ASSERT( xDataSeries.is() );
541
542 Reference< beans::XPropertySet > xPropSet( xDataSeries, UNO_QUERY_THROW );
543
544 // test that y error bars are there
545 Reference< beans::XPropertySet > xErrorBarYProps;
546 xPropSet->getPropertyValue(CHART_UNONAME_ERRORBAR_Y) >>= xErrorBarYProps;
547 testErrorBar(xErrorBarYProps);
548 }
549 }
550
testErrorBarPropXLSX()551 void Chart2ExportTest::testErrorBarPropXLSX()
552 {
553 load("/chart2/qa/extras/data/xlsx/", "testErrorBarProp.xlsx");
554 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
555 CPPUNIT_ASSERT(pXmlDoc);
556
557 // test y error bars property
558 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[1]/c:errDir", "val", "y");
559 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[1]/c:spPr/a:ln", "w", "12600");
560 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "ff0000");
561
562 // test x error bars property
563 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[2]/c:errDir", "val", "x");
564 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[2]/c:spPr/a:ln", "w", "9360");
565 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:errBars[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "595959");
566 }
567
568 // This method tests the preservation of properties for trendlines / regression curves
569 // in an export -> import cycle using different file formats - ODS, XLS and XLSX.
testTrendline()570 void Chart2ExportTest::testTrendline()
571 {
572 mbSkipValidation = true;
573 load("/chart2/qa/extras/data/ods/", "trendline.ods");
574 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
575 reload("calc8");
576 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
577 }
578
testTrendlineOOXML()579 void Chart2ExportTest::testTrendlineOOXML()
580 {
581 load("/chart2/qa/extras/data/ods/", "trendline.ods");
582 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
583 reload("Calc Office Open XML");
584 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
585 }
586
testTrendlineXLS()587 void Chart2ExportTest::testTrendlineXLS()
588 {
589 mbSkipValidation = true;
590 load("/chart2/qa/extras/data/ods/", "trendline.ods");
591 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
592 reload("MS Excel 97");
593 checkTrendlinesInChart(getChartDocFromSheet( 0, mxComponent));
594 }
595
testStockChart()596 void Chart2ExportTest::testStockChart()
597 {
598 /* For attached file Stock_Chart.docx, in chart1.xml,
599 * <c:stockChart>, there are four types of series as
600 * Open,Low,High and Close.
601 * For Open series, in <c:idx val="0" />
602 * an attribute val of index should start from 1 and not from 0.
603 * Which was problem area.
604 */
605 load("/chart2/qa/extras/data/docx/", "testStockChart.docx");
606
607 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
608 if (!pXmlDoc)
609 return;
610
611 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:stockChart/c:ser[1]/c:idx", "val", "1");
612 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:stockChart/c:ser[1]/c:order", "val", "1");
613 assertXPathContent(
614 pXmlDoc,
615 "/c:chartSpace/c:chart/c:plotArea/c:stockChart/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v",
616 "Open");
617 }
618
testBarChart()619 void Chart2ExportTest::testBarChart()
620 {
621 load("/chart2/qa/extras/data/docx/", "testBarChart.docx");
622 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
623 if (!pXmlDoc)
624 return;
625
626 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:barDir", "val", "col");
627 }
628
testCrosses()629 void Chart2ExportTest::testCrosses()
630 {
631 load("/chart2/qa/extras/data/docx/", "Bar_horizontal_cone.docx");
632 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
633
634 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:crosses", "val", "autoZero");
635 }
636
testScatterChartTextXValues()637 void Chart2ExportTest::testScatterChartTextXValues()
638 {
639 load("/chart2/qa/extras/data/docx/", "scatter-chart-text-x-values.docx");
640
641 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
642 CPPUNIT_ASSERT(xChartDoc.is());
643
644 Reference<chart2::XChartType> xCT = getChartTypeFromDoc(xChartDoc, 0);
645 CPPUNIT_ASSERT(xCT.is());
646
647 // Make sure we have exactly 3 data series.
648 std::vector<uno::Sequence<uno::Any> > aLabels = getDataSeriesLabelsFromChartType(xCT);
649 CPPUNIT_ASSERT_EQUAL(size_t(3), aLabels.size());
650 CPPUNIT_ASSERT_EQUAL(OUString("Series 1"), aLabels[0][0].get<OUString>());
651 CPPUNIT_ASSERT_EQUAL(OUString("Series 2"), aLabels[1][0].get<OUString>());
652 CPPUNIT_ASSERT_EQUAL(OUString("Series 3"), aLabels[2][0].get<OUString>());
653
654 std::vector<std::vector<double> > aYValues = getDataSeriesYValuesFromChartType(xCT);
655 CPPUNIT_ASSERT_EQUAL(size_t(3), aYValues.size());
656
657 // Check the Y values of "Series 1".
658 CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[0].size());
659 CPPUNIT_ASSERT_EQUAL(4.3, aYValues[0][0]);
660 CPPUNIT_ASSERT_EQUAL(2.5, aYValues[0][1]);
661 CPPUNIT_ASSERT_EQUAL(3.5, aYValues[0][2]);
662 CPPUNIT_ASSERT_EQUAL(4.5, aYValues[0][3]);
663
664 // And "Series 2".
665 CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[1].size());
666 CPPUNIT_ASSERT_EQUAL(2.4, aYValues[1][0]);
667 CPPUNIT_ASSERT_EQUAL(4.4, aYValues[1][1]);
668 CPPUNIT_ASSERT_EQUAL(1.8, aYValues[1][2]);
669 CPPUNIT_ASSERT_EQUAL(2.8, aYValues[1][3]);
670
671 // And "Series 3".
672 CPPUNIT_ASSERT_EQUAL(size_t(4), aYValues[2].size());
673 CPPUNIT_ASSERT_EQUAL(2.0, aYValues[2][0]);
674 CPPUNIT_ASSERT_EQUAL(2.0, aYValues[2][1]);
675 CPPUNIT_ASSERT_EQUAL(3.0, aYValues[2][2]);
676 CPPUNIT_ASSERT_EQUAL(5.0, aYValues[2][3]);
677
678 // Test the export.
679 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
680 if (!pXmlDoc)
681 return;
682
683 assertXPathContent(pXmlDoc, "//c:scatterChart/c:ser[1]/c:xVal[1]/c:numRef[1]/c:numCache[1]/c:pt[1]/c:v[1]", "1");
684 }
685
testScatterXAxisValues()686 void Chart2ExportTest::testScatterXAxisValues()
687 {
688 load("/chart2/qa/extras/data/odt/", "tdf114657.odt");
689
690 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
691 CPPUNIT_ASSERT(pXmlDoc);
692
693 assertXPath(pXmlDoc, "//c:scatterChart/c:ser/c:xVal/c:numRef/c:numCache/c:ptCount", "val", "5");
694 assertXPathContent(pXmlDoc, "//c:scatterChart/c:ser/c:xVal/c:numRef/c:numCache/c:pt[1]/c:v", "15");
695 assertXPathContent(pXmlDoc, "//c:scatterChart/c:ser/c:xVal/c:numRef/c:numCache/c:pt[2]/c:v", "11");
696 assertXPathContent(pXmlDoc, "//c:scatterChart/c:ser/c:xVal/c:numRef/c:numCache/c:pt[3]/c:v", "20");
697 assertXPathContent(pXmlDoc, "//c:scatterChart/c:ser/c:xVal/c:numRef/c:numCache/c:pt[4]/c:v", "16");
698 }
699
testChartDataTable()700 void Chart2ExportTest::testChartDataTable()
701 {
702 load("/chart2/qa/extras/data/docx/", "testChartDataTable.docx");
703
704 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
705 CPPUNIT_ASSERT(pXmlDoc);
706 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:dTable/c:showHorzBorder", "val", "1");
707 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:dTable/c:showVertBorder", "val", "1");
708 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:dTable/c:showOutline", "val", "1");
709 }
710
testChartExternalData()711 void Chart2ExportTest::testChartExternalData()
712 {
713 load("/chart2/qa/extras/data/docx/", "testMultipleChart.docx");
714
715 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
716 CPPUNIT_ASSERT(pXmlDoc);
717 xmlXPathObjectPtr pXmlPathObj = getXPathNode(pXmlDoc, "/c:chartSpace/c:externalData");
718 xmlNodeSetPtr pXmlNodes = pXmlPathObj->nodesetval;
719 CPPUNIT_ASSERT(pXmlNodes);
720 }
721
testEmbeddingsGrabBag()722 void Chart2ExportTest::testEmbeddingsGrabBag()
723 {
724 // The problem was that .xlsx files were missing from docx file from embeddings folder
725 // after saving file.
726 // This test case tests whether embeddings files grabbagged properly in correct object.
727
728 load("/chart2/qa/extras/data/docx/", "testMultiplechartembeddings.docx" );
729 uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
730 uno::Reference<beans::XPropertySet> xTextDocumentPropertySet(xTextDocument, uno::UNO_QUERY);
731 uno::Sequence<beans::PropertyValue> aGrabBag(0);
732 xTextDocumentPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag;
733 CPPUNIT_ASSERT(aGrabBag.hasElements()); // Grab Bag not empty
734 bool bEmbeddings = false;
735 const char* const testEmbeddedFileNames[] {"word/embeddings/Microsoft_Excel_Worksheet3.xlsx",
736 "word/embeddings/Microsoft_Excel_Worksheet2.xlsx",
737 "word/embeddings/Microsoft_Excel_Worksheet1.xlsx"};
738 for(int i = 0; i < aGrabBag.getLength(); ++i)
739 {
740 if (aGrabBag[i].Name == "OOXEmbeddings")
741 {
742 bEmbeddings = true;
743 uno::Sequence<beans::PropertyValue> aEmbeddingsList(0);
744 uno::Reference<io::XInputStream> aEmbeddingXlsxStream;
745 OUString aEmbeddedfileName;
746 CPPUNIT_ASSERT(aGrabBag[i].Value >>= aEmbeddingsList); // PropertyValue of proper type
747 sal_Int32 length = aEmbeddingsList.getLength();
748 CPPUNIT_ASSERT_EQUAL(sal_Int32(3), length);
749 for(int j = 0; j < length; ++j)
750 {
751 aEmbeddingsList[j].Value >>= aEmbeddingXlsxStream;
752 aEmbeddedfileName = aEmbeddingsList[j].Name;
753 CPPUNIT_ASSERT(aEmbeddingXlsxStream.get()); // Reference not empty
754 CPPUNIT_ASSERT_EQUAL(OUString::createFromAscii(testEmbeddedFileNames[j]),aEmbeddedfileName);
755 }
756 }
757 }
758 CPPUNIT_ASSERT(bEmbeddings); // Grab Bag has all the expected elements
759 }
760
testAreaChartLoad()761 void Chart2ExportTest::testAreaChartLoad()
762 {
763 load ("/chart2/qa/extras/data/docx/", "testAreaChartLoad.docx");
764 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
765 CPPUNIT_ASSERT(pXmlDoc);
766 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:areaChart/c:ser/c:dLbls/c:showVal", "val", "1");
767 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:areaChart/c:ser/c:dLbls/c:dLbl", 0);
768 }
769
testUpDownBars()770 void Chart2ExportTest::testUpDownBars()
771 {
772 /*
773 load("/chart2/qa/extras/data/docx/", "UpDownBars.docx");
774 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
775 CPPUNIT_ASSERT(pXmlDoc);
776 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:upDownBars");
777 */
778 }
779
testDoughnutChart()780 void Chart2ExportTest::testDoughnutChart()
781 {
782 load("/chart2/qa/extras/data/docx/", "doughnutChart.docx");
783 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
784 CPPUNIT_ASSERT(pXmlDoc);
785
786 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:doughnutChart");
787 }
788
testDisplayUnits()789 void Chart2ExportTest::testDisplayUnits()
790 {
791 load("/chart2/qa/extras/data/docx/", "DisplayUnits.docx");
792 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
793 CPPUNIT_ASSERT(pXmlDoc);
794
795 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:dispUnits/c:builtInUnit", "val", "billions");
796 }
797
798 // void Chart2ExportTest::testFdo74115WallGradientFill()
799 // {
800 // load("/chart2/qa/extras/data/docx/", "fdo74115_WallGradientFill.docx");
801 // xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
802 // CPPUNIT_ASSERT(pXmlDoc);
803 //
804 // assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill");
805 // }
806
testFdo74115WallBitmapFill()807 void Chart2ExportTest::testFdo74115WallBitmapFill()
808 {
809 load("/chart2/qa/extras/data/docx/", "fdo74115_WallBitmapFill.docx");
810 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
811 CPPUNIT_ASSERT(pXmlDoc);
812 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:blipFill");
813 }
814
testPieChartWallLineStyle()815 void Chart2ExportTest::testPieChartWallLineStyle()
816 {
817 load("/chart2/qa/extras/data/odt/", "testPieChartWallLineStyle.odt");
818 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
819 CPPUNIT_ASSERT(pXmlDoc);
820 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:ln/a:noFill");
821 }
822
823 //The below test case tests the built in marker 'x' for Office 2010 in Line charts
824
testFdo78290LineChartMarkerX()825 void Chart2ExportTest::testFdo78290LineChartMarkerX()
826 {
827 load("/chart2/qa/extras/data/docx/", "fdo78290_Line_Chart_Marker_x.docx");
828 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
829 CPPUNIT_ASSERT(pXmlDoc);
830 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:marker[1]/c:symbol[1]","val","x");
831 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:marker[1]/c:size[1]","val","7");
832 }
833
834 // We can also use the built in marker 'x' in scatter chart, hence writing the test case for the same.
835
testFdo78290ScatterChartMarkerX()836 void Chart2ExportTest::testFdo78290ScatterChartMarkerX()
837 {
838 load("/chart2/qa/extras/data/docx/", "fdo78290_Scatter_Chart_Marker_x.docx");
839 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
840 CPPUNIT_ASSERT(pXmlDoc);
841 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:scatterChart[1]/c:ser[1]/c:marker[1]/c:symbol[1]","val","x");
842 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:scatterChart[1]/c:ser[1]/c:marker[1]/c:size[1]","val","7");
843 }
844
845 // Also in a combination of charts like a column chart and line chart, we can use the built in marker 'x'
846 // for the line chart too. hence put a test case for the combination chart also.
847
testFdo78290CombinationChartMarkerX()848 void Chart2ExportTest::testFdo78290CombinationChartMarkerX()
849 {
850 load("/chart2/qa/extras/data/docx/", "fdo78290_Combination_Chart_Marker_x.docx");
851 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
852 CPPUNIT_ASSERT(pXmlDoc);
853 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:marker[1]/c:symbol[1]","val","x");
854 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:marker[1]/c:size[1]","val","7");
855 }
856
testTdf126115IndividualMarker()857 void Chart2ExportTest::testTdf126115IndividualMarker()
858 {
859 // Check individual marker properties.
860 load("/chart2/qa/extras/data/xlsx/", "tdf126115.xlsx");
861 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
862 CPPUNIT_ASSERT(pXmlDoc);
863 // 1. series
864 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[1]/c:dPt/c:marker/c:symbol", "val", "square");
865 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[1]/c:dPt/c:marker/c:size", "val", "8");
866 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[1]/c:dPt/c:marker/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
867 // 2. series
868 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[2]/c:dPt/c:marker/c:symbol", "val", "x");
869 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[2]/c:dPt/c:marker/c:size", "val", "15");
870 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[2]/c:dPt/c:marker/c:spPr/a:solidFill/a:srgbClr", "val", "7030a0");
871 }
872
testAxisNumberFormatODS()873 void Chart2ExportTest::testAxisNumberFormatODS()
874 {
875 struct
876 {
877 void check( const Reference<chart2::XChartDocument>& xChartDoc )
878 {
879 Reference<chart2::XAxis> xAxisX = getAxisFromDoc(xChartDoc, 0, 0, 0);
880 Reference<chart2::XTitled> xTitle(xAxisX, UNO_QUERY_THROW);
881 OUString aTitleText = getTitleString(xTitle);
882 CPPUNIT_ASSERT_EQUAL(OUString("Linked To Source"), aTitleText);
883
884 sal_Int32 nNumFmt = getNumberFormatFromAxis(xAxisX);
885 sal_Int16 nType = getNumberFormatType(xChartDoc, nNumFmt);
886 CPPUNIT_ASSERT_MESSAGE("X axis should be percentage format.", (nType & util::NumberFormat::PERCENT));
887
888 bool bNumFmtLinked = false;
889 Reference<beans::XPropertySet> xPS(xAxisX, uno::UNO_QUERY_THROW);
890 xPS->getPropertyValue("LinkNumberFormatToSource") >>= bNumFmtLinked;
891 CPPUNIT_ASSERT_MESSAGE("X axis should have its number format linked to source.", bNumFmtLinked);
892
893 Reference<chart2::XAxis> xAxisY = getAxisFromDoc(xChartDoc, 0, 1, 0);
894 xTitle.set(xAxisY, UNO_QUERY_THROW);
895 aTitleText = getTitleString(xTitle);
896 CPPUNIT_ASSERT_EQUAL(OUString("Not Linked"), aTitleText);
897
898 nNumFmt = getNumberFormatFromAxis(xAxisY);
899 nType = getNumberFormatType(xChartDoc, nNumFmt);
900 CPPUNIT_ASSERT_MESSAGE("Y axis should be a normal number format.", (nType & util::NumberFormat::NUMBER));
901
902 bNumFmtLinked = true;
903 xPS.set(xAxisY, uno::UNO_QUERY_THROW);
904 xPS->getPropertyValue("LinkNumberFormatToSource") >>= bNumFmtLinked;
905 CPPUNIT_ASSERT_MESSAGE("Y axis should not have its number format linked to source.", !bNumFmtLinked);
906 }
907
908 } aTest;
909
910 load("/chart2/qa/extras/data/ods/", "axis-numformats-linked.ods");
911
912 Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent);
913 aTest.check(xChartDoc);
914
915 // Reload the document and make sure everything remains intact.
916 reload("calc8");
917 xChartDoc = getChartDocFromSheet(0, mxComponent);
918 aTest.check(xChartDoc);
919 }
920
testAxisNumberFormatXLS()921 void Chart2ExportTest::testAxisNumberFormatXLS()
922 {
923 struct
924 {
925 void check( const Reference<chart2::XChartDocument>& xChartDoc, bool bNumFmtLinkedActual, sal_Int16 nNumFmtTypeFlag ) const
926 {
927 Reference<chart2::XAxis> xAxisY = getAxisFromDoc( xChartDoc, 0, 1, 0 );
928 bool bNumFmtLinked = false;
929 Reference<beans::XPropertySet> xPS( xAxisY, uno::UNO_QUERY_THROW );
930 xPS->getPropertyValue( "LinkNumberFormatToSource" ) >>= bNumFmtLinked;
931
932 if ( bNumFmtLinkedActual )
933 CPPUNIT_ASSERT_MESSAGE( "Y axis should have its number format linked to source.", bNumFmtLinked );
934 else
935 {
936 CPPUNIT_ASSERT_MESSAGE( "Y axis should not have its number format linked to source.", !bNumFmtLinked );
937
938 sal_Int32 nNumFmt = getNumberFormatFromAxis( xAxisY );
939 sal_Int16 nType = getNumberFormatType( xChartDoc, nNumFmt );
940 if ( nNumFmtTypeFlag == util::NumberFormat::PERCENT )
941 CPPUNIT_ASSERT_MESSAGE( "Y axis should be percentage format.", ( nType & util::NumberFormat::PERCENT ) );
942 else
943 CPPUNIT_ASSERT_MESSAGE( "Y axis should be number format.", ( nType & util::NumberFormat::NUMBER ) );
944 }
945 }
946
947 void change( const Reference<chart2::XChartDocument>& xChartDoc, sal_Int16 nNumFmtTypeFlag )
948 {
949 Reference<chart2::XAxis> xAxisY = getAxisFromDoc( xChartDoc, 0, 1, 0 );
950 Reference<beans::XPropertySet> xPS( xAxisY, uno::UNO_QUERY_THROW );
951 Any aAny( false );
952 xPS->setPropertyValue( "LinkNumberFormatToSource", aAny );
953
954 Reference<util::XNumberFormatsSupplier> xNFS( xChartDoc, uno::UNO_QUERY_THROW );
955 Reference<util::XNumberFormats> xNumberFormats = xNFS->getNumberFormats();
956 CPPUNIT_ASSERT( xNumberFormats.is() );
957 lang::Locale aLocale{ "en", "US", "" };
958 Sequence<sal_Int32> aNumFmts = xNumberFormats->queryKeys( nNumFmtTypeFlag, aLocale, false );
959 CPPUNIT_ASSERT( aNumFmts.hasElements() );
960 aAny <<= aNumFmts[0];
961 xPS->setPropertyValue( CHART_UNONAME_NUMFMT, aAny );
962 }
963
964 } aTest;
965
966 load( "/chart2/qa/extras/data/xls/", "axis_sourceformatting.xls" );
967
968 Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet( 0, mxComponent );
969 aTest.check( xChartDoc, true, util::NumberFormat::PERCENT );
970
971 aTest.change( xChartDoc, util::NumberFormat::NUMBER );
972 // Write the document(xls) with changes made close it, load it and check if changes are intact
973 reload( "MS Excel 97" );
974 xChartDoc = getChartDocFromSheet( 0, mxComponent );
975 aTest.check( xChartDoc, false, util::NumberFormat::NUMBER );
976 }
977
testDataLabelBordersDOCX()978 void Chart2ExportTest::testDataLabelBordersDOCX()
979 {
980 struct Check
981 {
982 sal_Int32 mnIndex;
983 css::drawing::LineStyle meStyle;
984 sal_Int32 mnColor;
985 };
986
987 struct
988 {
989 /**
990 * Chart 1 has 4 bars of which 1st and 3rd have labels with borders
991 * around them.
992 */
993 void checkObject1( const Reference<chart2::XChartDocument>& xChartDoc )
994 {
995 CPPUNIT_ASSERT(xChartDoc.is());
996
997 Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0);
998 CPPUNIT_ASSERT(xDataSeries.is());
999
1000 // Check to make sure that data points 0 and 2 have local properties.
1001 Reference<beans::XPropertySet> xPropSet(xDataSeries, uno::UNO_QUERY);
1002 CPPUNIT_ASSERT(xPropSet.is());
1003
1004 Sequence<sal_Int32> aIndices;
1005 xPropSet->getPropertyValue("AttributedDataPoints") >>= aIndices;
1006 /*
1007 CPPUNIT_ASSERT_EQUAL_MESSAGE("There should be 2 data points with local properties.", sal_Int32(2), aIndices.getLength());
1008 CPPUNIT_ASSERT_EQUAL(sal_Int32(0), aIndices[0]);
1009 CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aIndices[1]);
1010 */
1011
1012 static const Check aDataPoints[] =
1013 {
1014 { 0, css::drawing::LineStyle_SOLID, 0x00FFFF00 }, // solid yellow
1015 { 2, css::drawing::LineStyle_SOLID, 0x00FF0000 } // solid red
1016 };
1017
1018 for (size_t i = 0; i < SAL_N_ELEMENTS(aDataPoints); ++i)
1019 {
1020 xPropSet = xDataSeries->getDataPointByIndex(aDataPoints[i].mnIndex);
1021 CPPUNIT_ASSERT(xPropSet.is());
1022
1023 css::drawing::LineStyle eLineStyle = css::drawing::LineStyle_NONE;
1024 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_STYLE) >>= eLineStyle;
1025 CPPUNIT_ASSERT_EQUAL(aDataPoints[i].meStyle, eLineStyle);
1026
1027 sal_Int32 nWidth = -1;
1028 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_WIDTH) >>= nWidth;
1029 CPPUNIT_ASSERT(nWidth > 0);
1030
1031 sal_Int32 nColor = -1;
1032 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_COLOR) >>= nColor;
1033 CPPUNIT_ASSERT_EQUAL_MESSAGE("Border color is wrong.", aDataPoints[i].mnColor, nColor);
1034 }
1035 }
1036
1037 /**
1038 * Chart 2 has all its data labels with identical borders.
1039 */
1040 void checkObject2( const Reference<chart2::XChartDocument>& xChartDoc )
1041 {
1042 CPPUNIT_ASSERT(xChartDoc.is());
1043
1044 Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0);
1045 CPPUNIT_ASSERT(xDataSeries.is());
1046
1047 Reference<beans::XPropertySet> xPropSet(xDataSeries, uno::UNO_QUERY);
1048 CPPUNIT_ASSERT(xPropSet.is());
1049
1050 css::drawing::LineStyle eLineStyle = css::drawing::LineStyle_NONE;
1051 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_STYLE) >>= eLineStyle;
1052 CPPUNIT_ASSERT_EQUAL(css::drawing::LineStyle_SOLID, eLineStyle);
1053
1054 sal_Int32 nWidth = -1;
1055 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_WIDTH) >>= nWidth;
1056 CPPUNIT_ASSERT(nWidth > 0);
1057
1058 sal_Int32 nColor = -1;
1059 xPropSet->getPropertyValue(CHART_UNONAME_LABEL_BORDER_COLOR) >>= nColor;
1060 CPPUNIT_ASSERT_EQUAL_MESSAGE("Border color should be green.", sal_Int32(0x0000FF00), nColor);
1061 }
1062
1063 } aTest;
1064
1065 load("/chart2/qa/extras/data/docx/", "data-label-borders.docx");
1066
1067 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1068
1069 // "Automatic" chart background fill in docx should be loaded as solid white.
1070 Reference<beans::XPropertySet> xPropSet = xChartDoc->getPageBackground();
1071 CPPUNIT_ASSERT(xPropSet.is());
1072 drawing::FillStyle eStyle = xPropSet->getPropertyValue("FillStyle").get<drawing::FillStyle>();
1073 sal_Int32 nColor = xPropSet->getPropertyValue("FillColor").get<sal_Int32>();
1074 CPPUNIT_ASSERT_EQUAL_MESSAGE("'Automatic' chart background fill in docx should be loaded as solid fill.",
1075 drawing::FillStyle_SOLID, eStyle);
1076 CPPUNIT_ASSERT_EQUAL_MESSAGE("'Automatic' chart background fill in docx should be loaded as solid white.",
1077 sal_Int32(0x00FFFFFF), sal_Int32(nColor & 0x00FFFFFF)); // highest 2 bytes are transparency which we ignore here.
1078
1079 aTest.checkObject1(xChartDoc);
1080 xChartDoc.set(getChartDocFromWriter(1), uno::UNO_QUERY);
1081 aTest.checkObject2(xChartDoc);
1082
1083 reload("Office Open XML Text");
1084
1085 xChartDoc.set(getChartDocFromWriter(0), uno::UNO_QUERY);
1086 aTest.checkObject1(xChartDoc);
1087 xChartDoc.set(getChartDocFromWriter(1), uno::UNO_QUERY);
1088 aTest.checkObject2(xChartDoc);
1089 }
1090
testDataLabel3DChartDOCX()1091 void Chart2ExportTest::testDataLabel3DChartDOCX()
1092 {
1093 load("/chart2/qa/extras/data/docx/", "3d-bar-label.docx");
1094
1095 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1096 CPPUNIT_ASSERT(xChartDoc.is());
1097
1098 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1099 CPPUNIT_ASSERT(pXmlDoc);
1100
1101 // We must not export label position attributes for 3D bar charts. The
1102 // same rule also applies to several other 3D charts, apparently.
1103 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bar3DChart/c:ser/c:dLbls/c:dLblPos", 0);
1104 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bar3DChart/c:ser/c:dLbls/c:dLbl/c:dLblPos", 0);
1105 }
1106
testDataLabelBarChartDOCX()1107 void Chart2ExportTest::testDataLabelBarChartDOCX()
1108 {
1109 load("/chart2/qa/extras/data/docx/", "bar-chart-labels.docx");
1110
1111 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1112 CPPUNIT_ASSERT(xChartDoc.is());
1113
1114 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1115 CPPUNIT_ASSERT(pXmlDoc);
1116
1117 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls/c:dLblPos", "val", "ctr");
1118 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[2]/c:dLbls/c:dLblPos", "val", "inEnd");
1119 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[3]/c:dLbls/c:dLblPos", "val", "inBase");
1120 }
1121
testDataLabelClusteredBarChartDOCX()1122 void Chart2ExportTest::testDataLabelClusteredBarChartDOCX()
1123 {
1124 load("/chart2/qa/extras/data/docx/", "clustered-bar-chart-labels.docx");
1125
1126 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1127 CPPUNIT_ASSERT(xChartDoc.is());
1128
1129 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1130 CPPUNIT_ASSERT(pXmlDoc);
1131
1132 // This was "t", should be one of the allowed values.
1133 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls/c:dLbl[2]/c:dLblPos", "val", "outEnd");
1134 }
1135
testDataLabelRadarChartDOCX()1136 void Chart2ExportTest::testDataLabelRadarChartDOCX()
1137 {
1138 load("/chart2/qa/extras/data/docx/", "radar-chart-labels.docx");
1139
1140 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1141 CPPUNIT_ASSERT(xChartDoc.is());
1142
1143 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1144 CPPUNIT_ASSERT(pXmlDoc);
1145
1146 // We must not export label position attributes for radar charts.
1147 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:radarChart/c:ser/c:dLbls/c:dLblPos", 0);
1148 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:radarChart/c:ser/c:dLbls/c:dLbl/c:dLblPos", 0);
1149 }
1150
testDataLabelDoughnutChartDOCX()1151 void Chart2ExportTest::testDataLabelDoughnutChartDOCX()
1152 {
1153 load("/chart2/qa/extras/data/docx/", "doughnut-chart-labels.docx");
1154
1155 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1156 CPPUNIT_ASSERT(xChartDoc.is());
1157
1158 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1159 CPPUNIT_ASSERT(pXmlDoc);
1160
1161 // We must not export label position attributes for doughnut charts.
1162 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:doughnutChart/c:ser/c:dLbls/c:dLblPos", 0);
1163 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:doughnutChart/c:ser/c:dLbls/c:dLbl/c:dLblPos", 0);
1164 }
1165
testDataLabelAreaChartDOCX()1166 void Chart2ExportTest::testDataLabelAreaChartDOCX()
1167 {
1168 load("/chart2/qa/extras/data/docx/", "area-chart-labels.docx");
1169
1170 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1171 CPPUNIT_ASSERT(xChartDoc.is());
1172
1173 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1174 CPPUNIT_ASSERT(pXmlDoc);
1175
1176 // We must not export label position attributes for area charts.
1177 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:areaChart/c:ser/c:dLbls/c:dLblPos", 0);
1178 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:areaChart/c:ser/c:dLbls/c:dLbl/c:dLblPos", 0);
1179 }
1180
testDataLabelDefaultLineChartDOCX()1181 void Chart2ExportTest::testDataLabelDefaultLineChartDOCX()
1182 {
1183 // This file was created by Word 2007, which doesn't provide default data
1184 // label position (2010 does). Make sure its default data label position
1185 // is RIGHT when exporting.
1186
1187 load("/chart2/qa/extras/data/docx/", "line-chart-label-default-placement.docx");
1188
1189 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1190 CPPUNIT_ASSERT(xChartDoc.is());
1191
1192 reload("Office Open XML Text");
1193
1194 xChartDoc.set(getChartDocFromWriter(0), uno::UNO_QUERY);
1195 Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0);
1196 Reference<beans::XPropertySet> xPropSet(xDataSeries, uno::UNO_QUERY);
1197 CPPUNIT_ASSERT(xPropSet.is());
1198 sal_Int32 nLabelPlacement = -1;
1199 if (xPropSet->getPropertyValue("LabelPlacement") >>= nLabelPlacement)
1200 // This option may not be set. Check its value only when it's set.
1201 CPPUNIT_ASSERT_EQUAL_MESSAGE("Line chart's default label placement should be 'right'.", chart::DataLabelPlacement::RIGHT, nLabelPlacement );
1202 }
1203
testIndividualDataLabelProps()1204 void Chart2ExportTest::testIndividualDataLabelProps()
1205 {
1206 load("/chart2/qa/extras/data/xlsx/", "tdf122915.xlsx");
1207 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
1208 CPPUNIT_ASSERT(pXmlDoc);
1209 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[3]/c:dLbls/c:dLbl/c:txPr/a:p/a:pPr/a:defRPr", "b", "1");
1210 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[3]/c:dLbls/c:dLbl/c:txPr/a:p/a:pPr/a:defRPr", "sz", "1600");
1211 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[3]/c:dLbls/c:dLbl/c:txPr/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", "ff0000");
1212 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser[3]/c:dLbls/c:dLbl/c:txPr/a:p/a:pPr/a:defRPr/a:latin", "typeface", "Times New Roman");
1213 }
1214
testChartTitlePropertiesColorFillDOCX()1215 void Chart2ExportTest::testChartTitlePropertiesColorFillDOCX()
1216 {
1217 load("/chart2/qa/extras/data/docx/", "testChartTitlePropertiesColorFill.docx");
1218 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1219 CPPUNIT_ASSERT(pXmlDoc);
1220 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
1221 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1222 }
1223
testChartTitlePropertiesGradientFillDOCX()1224 void Chart2ExportTest::testChartTitlePropertiesGradientFillDOCX()
1225 {
1226 load("/chart2/qa/extras/data/docx/", "testChartTitlePropertiesGradientFill.docx");
1227 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1228 CPPUNIT_ASSERT(pXmlDoc);
1229 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", "cccccc");
1230 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", "666666");
1231 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1232 }
1233
testChartTitlePropertiesBitmapFillDOCX()1234 void Chart2ExportTest::testChartTitlePropertiesBitmapFillDOCX()
1235 {
1236 load("/chart2/qa/extras/data/docx/", "testChartTitlePropertiesBitmapFill.docx");
1237 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1238 CPPUNIT_ASSERT(pXmlDoc);
1239 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:blipFill/a:blip", "embed", "rId1");
1240 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1241 }
1242
testColorGradientWithTransparancyDOCX()1243 void Chart2ExportTest::testColorGradientWithTransparancyDOCX()
1244 {
1245 // Test color gradient (two color) with gradient transparency
1246 load("/chart2/qa/extras/data/docx/", "testColorGradientWithTransparancy.docx");
1247 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
1248 CPPUNIT_ASSERT(pXmlDoc);
1249 // Test the transparency of the first color
1250 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", "val", "60000");
1251 // Test the transparency of the second color
1252 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", "90196");
1253 }
1254
testColorGradientWithTransparancyODS()1255 void Chart2ExportTest::testColorGradientWithTransparancyODS()
1256 {
1257 // Test color gradient (two color) with simple transparency
1258 load("/chart2/qa/extras/data/ods/", "testColorGradientWithTransparancy.ods");
1259 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1260 CPPUNIT_ASSERT(pXmlDoc);
1261 // Test the transparency of the first color
1262 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr/a:alpha", "val", "60000");
1263 // Test the transparency of the second color
1264 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr/a:alpha", "val", "60000");
1265 }
1266
testColorGradientStopXLSX()1267 void Chart2ExportTest::testColorGradientStopXLSX()
1268 {
1269 // Test color gradient (two color) stop of the first color
1270 load("/chart2/qa/extras/data/xlsx/", "tdf128619.xlsx");
1271 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1272 CPPUNIT_ASSERT(pXmlDoc);
1273 // Test the position of the first color
1274 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[1]", "pos", "45000");
1275 // Test the position of the second color
1276 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:spPr/a:gradFill/a:gsLst/a:gs[2]", "pos", "100000");
1277 }
1278
testBarChartDataPointPropDOCX()1279 void Chart2ExportTest::testBarChartDataPointPropDOCX()
1280 {
1281 load("/chart2/qa/extras/data/docx/", "testBarChartDataPointPropDOCX.docx");
1282 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
1283 CPPUNIT_ASSERT(pXmlDoc);
1284
1285 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", "0");
1286
1287 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:idx", "val", "1");
1288 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", "f6f8fc");
1289 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", "c7d5ed");
1290 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "70ad47");
1291
1292 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:idx", "val", "2");
1293 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
1294 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "000000");
1295 }
1296
testBarChartRotation()1297 void Chart2ExportTest::testBarChartRotation()
1298 {
1299 load ("/chart2/qa/extras/data/docx/", "barChartRotation.docx");
1300 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1301 CPPUNIT_ASSERT(pXmlDoc);
1302
1303 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:view3D/c:rotX", "val", "30");
1304 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:view3D/c:rotY", "val", "50");
1305 }
1306
testShapeFollowedByChart()1307 void Chart2ExportTest::testShapeFollowedByChart()
1308 {
1309 /* If there is a scenario where a chart is followed by a shape
1310 which is being exported as an alternate content then, the
1311 docPr Id is being repeated, ECMA 20.4.2.5 says that the
1312 docPr Id should be unique, ensuring the same here.
1313 */
1314 load("/chart2/qa/extras/data/docx/", "FDO74430.docx");
1315 xmlDocPtr pXmlDoc = parseExport("word/document", "Office Open XML Text" );
1316 CPPUNIT_ASSERT(pXmlDoc);
1317
1318 OUString aValueOfFirstDocPR = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[1]/w:drawing[1]/wp:inline[1]/wp:docPr[1]", "id");
1319 OUString aValueOfSecondDocPR = getXPath(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[1]/mc:AlternateContent[1]/mc:Choice[1]/w:drawing[1]/wp:anchor[1]/wp:docPr[1]", "id");
1320
1321 CPPUNIT_ASSERT( aValueOfFirstDocPR != aValueOfSecondDocPR );
1322 }
1323
testPieChartDataLabels()1324 void Chart2ExportTest::testPieChartDataLabels()
1325 {
1326 load("/chart2/qa/extras/data/docx/", "PieChartDataLabels.docx");
1327 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
1328 CPPUNIT_ASSERT(pXmlDoc);
1329 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pie3DChart/c:ser[1]/c:dLbls/c:dLbl[1]/c:dLblPos", "val", "bestFit");
1330 }
1331
testSeriesIdxOrder()1332 void Chart2ExportTest::testSeriesIdxOrder()
1333 {
1334 load("/chart2/qa/extras/data/docx/", "testSeriesIdxOrder.docx");
1335 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
1336 CPPUNIT_ASSERT(pXmlDoc);
1337 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:idx[1]", "val", "1");
1338 assertXPath(pXmlDoc, "/c:chartSpace[1]/c:chart[1]/c:plotArea[1]/c:lineChart[1]/c:ser[1]/c:order[1]", "val", "1");
1339 }
1340
testScatterPlotLabels()1341 void Chart2ExportTest::testScatterPlotLabels()
1342 {
1343 load("/chart2/qa/extras/data/odt/", "scatter-plot-labels.odt");
1344 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
1345 CPPUNIT_ASSERT(xChartDoc.is());
1346
1347 Reference<chart2::XChartType> xCT = getChartTypeFromDoc(xChartDoc, 0);
1348 CPPUNIT_ASSERT(xCT.is());
1349
1350 // Make sure the original chart has 'a', 'b', 'c' as its data labels.
1351 std::vector<uno::Sequence<uno::Any> > aLabels = getDataSeriesLabelsFromChartType(xCT);
1352 CPPUNIT_ASSERT_EQUAL(size_t(3), aLabels.size());
1353 CPPUNIT_ASSERT_EQUAL(OUString("a"), aLabels[0][0].get<OUString>());
1354 CPPUNIT_ASSERT_EQUAL(OUString("b"), aLabels[1][0].get<OUString>());
1355 CPPUNIT_ASSERT_EQUAL(OUString("c"), aLabels[2][0].get<OUString>());
1356
1357 // Reload the doc and check again. The labels should not change.
1358 reload("writer8");
1359
1360 xChartDoc.set(getChartDocFromWriter(0), uno::UNO_QUERY);
1361 CPPUNIT_ASSERT(xChartDoc.is());
1362
1363 xCT = getChartTypeFromDoc(xChartDoc, 0);
1364 CPPUNIT_ASSERT(xCT.is());
1365
1366 aLabels = getDataSeriesLabelsFromChartType(xCT);
1367 CPPUNIT_ASSERT_EQUAL(size_t(3), aLabels.size());
1368 CPPUNIT_ASSERT_EQUAL(OUString("a"), aLabels[0][0].get<OUString>());
1369 CPPUNIT_ASSERT_EQUAL(OUString("b"), aLabels[1][0].get<OUString>());
1370 CPPUNIT_ASSERT_EQUAL(OUString("c"), aLabels[2][0].get<OUString>());
1371 }
1372
testErrorBarDataRangeODS()1373 void Chart2ExportTest::testErrorBarDataRangeODS()
1374 {
1375 load("/chart2/qa/extras/data/ods/", "ErrorBarRange.ods");
1376 reload("calc8");
1377
1378 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
1379 CPPUNIT_ASSERT(xChartDoc.is());
1380
1381 Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
1382 CPPUNIT_ASSERT( xDataSeries.is() );
1383
1384 Reference< beans::XPropertySet > xPropSet( xDataSeries, UNO_QUERY_THROW );
1385
1386 // test that y error bars are there
1387 Reference< beans::XPropertySet > xErrorBarYProps;
1388 xPropSet->getPropertyValue(CHART_UNONAME_ERRORBAR_Y) >>= xErrorBarYProps;
1389 uno::Any aAny = xErrorBarYProps->getPropertyValue("ErrorBarRangePositive");
1390 CPPUNIT_ASSERT(aAny.hasValue());
1391 OUString aPosRange;
1392 aAny >>= aPosRange;
1393 CPPUNIT_ASSERT_EQUAL(OUString("$Sheet1.$B$1:$B$3"), aPosRange);
1394
1395 aAny = xErrorBarYProps->getPropertyValue("ErrorBarRangeNegative");
1396 CPPUNIT_ASSERT(aAny.hasValue());
1397 OUString aNegRange;
1398 aAny >>= aNegRange;
1399 CPPUNIT_ASSERT_EQUAL(OUString("$Sheet1.$C$1:$C$3"), aNegRange);
1400 }
1401
testChartCrash()1402 void Chart2ExportTest::testChartCrash()
1403 {
1404 load("/chart2/qa/extras/data/docx/", "FDO75975.docx");
1405 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
1406 CPPUNIT_ASSERT(pXmlDoc);
1407 }
1408
testPieChartRotation()1409 void Chart2ExportTest::testPieChartRotation()
1410 {
1411 load ("/chart2/qa/extras/data/docx/", "pieChartRotation.docx");
1412 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1413 CPPUNIT_ASSERT(pXmlDoc);
1414 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:view3D/c:rotX", "val", "40");
1415 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:view3D/c:rotY", "val", "30");
1416 }
1417
testEmbeddingsOleObjectGrabBag()1418 void Chart2ExportTest::testEmbeddingsOleObjectGrabBag()
1419 {
1420 // The problem was that .bin files were missing from docx file from embeddings folder
1421 // after saving file.
1422 // This test case tests whether embeddings files grabbagged properly in correct object.
1423
1424 load("/chart2/qa/extras/data/docx/", "testchartoleobjectembeddings.docx" );
1425 uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
1426 uno::Reference<beans::XPropertySet> xTextDocumentPropertySet(xTextDocument, uno::UNO_QUERY);
1427 uno::Sequence<beans::PropertyValue> aGrabBag(0);
1428 xTextDocumentPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag;
1429 CPPUNIT_ASSERT(aGrabBag.hasElements()); // Grab Bag not empty
1430 bool bEmbeddings = false;
1431 const char* const testEmbeddedFileNames[] = {"word/embeddings/oleObject1.bin"};
1432 for(int i = 0; i < aGrabBag.getLength(); ++i)
1433 {
1434 if (aGrabBag[i].Name == "OOXEmbeddings")
1435 {
1436 bEmbeddings = true;
1437 uno::Sequence<beans::PropertyValue> aEmbeddingsList(0);
1438 uno::Reference<io::XInputStream> aEmbeddingXlsxStream;
1439 OUString aEmbeddedfileName;
1440 CPPUNIT_ASSERT(aGrabBag[i].Value >>= aEmbeddingsList); // PropertyValue of proper type
1441 sal_Int32 length = aEmbeddingsList.getLength();
1442 CPPUNIT_ASSERT_EQUAL(sal_Int32(1), length);
1443 for(int j = 0; j < length; ++j)
1444 {
1445 aEmbeddingsList[j].Value >>= aEmbeddingXlsxStream;
1446 aEmbeddedfileName = aEmbeddingsList[j].Name;
1447 CPPUNIT_ASSERT(aEmbeddingXlsxStream.get()); // Reference not empty
1448 CPPUNIT_ASSERT_EQUAL(OUString::createFromAscii(testEmbeddedFileNames[j]),aEmbeddedfileName);
1449 }
1450 }
1451 }
1452 CPPUNIT_ASSERT(bEmbeddings); // Grab Bag has all the expected elements
1453 }
1454
1455 namespace {
1456
checkGapWidth(Reference<beans::XPropertySet> const & xPropSet,sal_Int32 nValue)1457 void checkGapWidth(Reference<beans::XPropertySet> const & xPropSet, sal_Int32 nValue)
1458 {
1459 uno::Any aAny = xPropSet->getPropertyValue("GapwidthSequence");
1460 CPPUNIT_ASSERT(aAny.hasValue());
1461 uno::Sequence< sal_Int32 > aSequence;
1462 aAny >>= aSequence;
1463 CPPUNIT_ASSERT(aSequence.hasElements());
1464 CPPUNIT_ASSERT_EQUAL(nValue, aSequence[0]);
1465 }
1466
checkOverlap(Reference<beans::XPropertySet> const & xPropSet,sal_Int32 nValue)1467 void checkOverlap(Reference<beans::XPropertySet> const & xPropSet, sal_Int32 nValue)
1468 {
1469 uno::Any aAny = xPropSet->getPropertyValue("OverlapSequence");
1470 CPPUNIT_ASSERT(aAny.hasValue());
1471 uno::Sequence< sal_Int32 > aSequence;
1472 aAny >>= aSequence;
1473 CPPUNIT_ASSERT(aSequence.hasElements());
1474 CPPUNIT_ASSERT_EQUAL(nValue, aSequence[0]);
1475 }
1476
checkSheetForGapWidthAndOverlap(uno::Reference<chart2::XChartDocument> const & xChartDoc,sal_Int32 nExpectedGapWidth,sal_Int32 nExpectedOverlap)1477 void checkSheetForGapWidthAndOverlap(uno::Reference< chart2::XChartDocument > const & xChartDoc,
1478 sal_Int32 nExpectedGapWidth, sal_Int32 nExpectedOverlap)
1479 {
1480 CPPUNIT_ASSERT(xChartDoc.is());
1481
1482 Reference< chart2::XChartType > xChartType = getChartTypeFromDoc( xChartDoc, 0 );
1483 CPPUNIT_ASSERT(xChartType.is());
1484
1485 Reference< beans::XPropertySet > xPropSet( xChartType, uno::UNO_QUERY_THROW );
1486 checkGapWidth(xPropSet, nExpectedGapWidth);
1487 checkOverlap(xPropSet, nExpectedOverlap);
1488
1489 }
1490
1491 }
1492
testGapWidthXLSX()1493 void Chart2ExportTest::testGapWidthXLSX()
1494 {
1495 load("/chart2/qa/extras/data/xlsx/", "gapWidth.xlsx");
1496
1497 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
1498 checkSheetForGapWidthAndOverlap(xChartDoc, 120, -60);
1499
1500 xChartDoc = getChartDocFromSheet( 1, mxComponent );
1501 checkSheetForGapWidthAndOverlap(xChartDoc, 50, 30);
1502
1503 reload("Calc Office Open XML");
1504
1505 xChartDoc = getChartDocFromSheet( 0, mxComponent );
1506 checkSheetForGapWidthAndOverlap(xChartDoc, 120, -60);
1507
1508 xChartDoc = getChartDocFromSheet( 1, mxComponent );
1509 checkSheetForGapWidthAndOverlap(xChartDoc, 50, 30);
1510 }
1511
testSmoothedLines()1512 void Chart2ExportTest::testSmoothedLines()
1513 {
1514 load("/chart2/qa/extras/data/ods/", "smoothedLines.ods");
1515 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1516 CPPUNIT_ASSERT(pXmlDoc);
1517 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[1]/c:smooth", "val", "0");
1518 }
1519
testLabelStringODS()1520 void Chart2ExportTest::testLabelStringODS()
1521 {
1522 load("/chart2/qa/extras/data/ods/", "labelString.ods");
1523
1524 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
1525 Reference< chart2::data::XDataSequence > xLabelSeq =
1526 getLabelDataSequenceFromDoc(xChartDoc);
1527 CPPUNIT_ASSERT(xLabelSeq.is());
1528
1529 OUString aLabelString = xLabelSeq->getSourceRangeRepresentation();
1530 CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString);
1531
1532 reload("calc8");
1533
1534 xChartDoc = getChartDocFromSheet( 0, mxComponent );
1535 xLabelSeq = getLabelDataSequenceFromDoc(xChartDoc);
1536 CPPUNIT_ASSERT(xLabelSeq.is());
1537
1538 aLabelString = xLabelSeq->getSourceRangeRepresentation();
1539 CPPUNIT_ASSERT_EQUAL(OUString("\"LabelName\""), aLabelString);
1540 }
1541
testFdo83058dlblPos()1542 void Chart2ExportTest::testFdo83058dlblPos()
1543 {
1544 load ("/chart2/qa/extras/data/docx/", "fdo83058_dlblPos.docx");
1545 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
1546 CPPUNIT_ASSERT(pXmlDoc);
1547 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[2]/c:dLblPos", "val", "outEnd");
1548 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[3]/c:dLblPos", "val", "outEnd");
1549 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[4]/c:dLblPos", "val", "outEnd");
1550 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls[1]/c:dLbl[5]/c:dLblPos", "val", "outEnd");
1551 }
1552
testAutoTitleDelXLSX()1553 void Chart2ExportTest::testAutoTitleDelXLSX()
1554 {
1555 load("/chart2/qa/extras/data/xlsx/", "autotitledel_2007.xlsx");
1556 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
1557 CPPUNIT_ASSERT(pXmlDoc);
1558 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:autoTitleDeleted", "val", "0");
1559 }
1560
testDispBlanksAsXLSX()1561 void Chart2ExportTest::testDispBlanksAsXLSX()
1562 {
1563 load("/chart2/qa/extras/data/xlsx/", "dispBlanksAs_2007.xlsx");
1564 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
1565 CPPUNIT_ASSERT(pXmlDoc);
1566 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:dispBlanksAs", "val", "gap");
1567 }
1568
testMarkerColorXLSX()1569 void Chart2ExportTest::testMarkerColorXLSX()
1570 {
1571 load("/chart2/qa/extras/data/xlsx/", "markerColor.xlsx");
1572 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1573 CPPUNIT_ASSERT(pXmlDoc);
1574 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:marker/c:spPr/a:solidFill/a:srgbClr", "val", "92d050");
1575 }
1576
testRoundedCornersXLSX()1577 void Chart2ExportTest::testRoundedCornersXLSX()
1578 {
1579 load("/chart2/qa/extras/data/xlsx/", "markerColor.xlsx");
1580 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1581 CPPUNIT_ASSERT(pXmlDoc);
1582 assertXPath(pXmlDoc, "/c:chartSpace/c:roundedCorners", "val", "0");
1583 }
1584
testAxisNumberFormatXLSX()1585 void Chart2ExportTest::testAxisNumberFormatXLSX()
1586 {
1587 load("/chart2/qa/extras/data/ods/", "axis_number_format.ods");
1588 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1589 CPPUNIT_ASSERT(pXmlDoc);
1590 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx", 2);
1591 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:numFmt", "formatCode", "0.00E+000");
1592 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:numFmt", "sourceLinked", "0");
1593
1594 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:numFmt", "formatCode", "[$$-409]#,##0;\\-[$$-409]#,##0");
1595 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:numFmt", "sourceLinked", "1");
1596 }
1597
testDataPointLabelNumberFormatXLSX()1598 void Chart2ExportTest::testDataPointLabelNumberFormatXLSX()
1599 {
1600 load("/chart2/qa/extras/data/ods/", "tdf123774.ods");
1601 {
1602 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1603 CPPUNIT_ASSERT(pXmlDoc);
1604 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "formatCode", "[$-40E]0.00%");
1605 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "sourceLinked", "0");
1606
1607 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "formatCode", "[$-40E]0.00%");
1608 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "sourceLinked", "0");
1609 }
1610
1611 load("/chart2/qa/extras/data/xlsx/", "tdf130986.xlsx");
1612 {
1613 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1614 CPPUNIT_ASSERT(pXmlDoc);
1615 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:idx", "val", "1");
1616 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:numFmt", "formatCode", "0.00E+00");
1617 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl/c:numFmt", "sourceLinked", "0");
1618 }
1619 }
1620
testDataLabelDefaultValuesXLSX()1621 void Chart2ExportTest::testDataLabelDefaultValuesXLSX()
1622 {
1623 load("/chart2/qa/extras/data/xlsx/", "data_label.xlsx");
1624 Reference< chart2::XChartDocument> xDoc = getChartDocFromSheet(0, mxComponent);
1625 Reference<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xDoc, 0);
1626 Reference<beans::XPropertySet> xPropSet(xSeries, uno::UNO_QUERY_THROW);
1627 uno::Any aAny = xPropSet->getPropertyValue("Label");
1628 chart2::DataPointLabel aLabel;
1629 CPPUNIT_ASSERT(aAny >>= aLabel);
1630 CPPUNIT_ASSERT(aLabel.ShowNumber);
1631
1632 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1633 CPPUNIT_ASSERT(pXmlDoc);
1634 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:showVal", "val", "1");
1635 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLblPos", "val", "outEnd");
1636 }
1637
testTitleOverlayXLSX()1638 void Chart2ExportTest::testTitleOverlayXLSX()
1639 {
1640 load("/chart2/qa/extras/data/xlsx/", "chart_title.xlsx");
1641 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1642 CPPUNIT_ASSERT(pXmlDoc);
1643 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:overlay", "val", "0");
1644 }
1645
testInvertIfNegativeXLSX()1646 void Chart2ExportTest::testInvertIfNegativeXLSX()
1647 {
1648 load("/chart2/qa/extras/data/xlsx/", "bar_chart_simple.xlsx");
1649 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1650 CPPUNIT_ASSERT(pXmlDoc);
1651 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:invertIfNegative", "val", "0");
1652 }
1653
testBubble3DXLSX()1654 void Chart2ExportTest::testBubble3DXLSX()
1655 {
1656 load("/chart2/qa/extras/data/xlsx/", "bubble_chart_simple.xlsx");
1657 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1658 CPPUNIT_ASSERT(pXmlDoc);
1659 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[1]/c:bubble3D", "val", "0");
1660 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[2]/c:bubble3D", "val", "0");
1661 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bubbleChart/c:ser[3]/c:bubble3D", "val", "0");
1662 }
1663
testNoMarkerXLSX()1664 void Chart2ExportTest::testNoMarkerXLSX()
1665 {
1666 load("/chart2/qa/extras/data/xlsx/", "no_marker.xlsx");
1667 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1668 CPPUNIT_ASSERT(pXmlDoc);
1669 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[1]/c:marker/c:symbol", "val", "none");
1670 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser[2]/c:marker/c:symbol", "val", "none");
1671 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:marker", "val", "0");
1672 }
1673
testTitleManualLayoutXLSX()1674 void Chart2ExportTest::testTitleManualLayoutXLSX()
1675 {
1676 load("/chart2/qa/extras/data/xlsx/", "title_manual_layout.xlsx");
1677 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1678 CPPUNIT_ASSERT(pXmlDoc);
1679 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:layoutTarget", 0);
1680 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:xMode", "val", "edge");
1681 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:yMode", "val", "edge");
1682
1683 OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:x", "val");
1684 double nX = aXVal.toDouble();
1685 CPPUNIT_ASSERT(nX > 0 && nX < 1);
1686
1687 OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:layout/c:manualLayout/c:y", "val");
1688 double nY = aYVal.toDouble();
1689 CPPUNIT_ASSERT(nY > 0 && nY < 1);
1690 CPPUNIT_ASSERT(nX != nY);
1691
1692 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:bodyPr", "rot", "1200000");
1693 }
1694
testPlotAreaManualLayoutXLSX()1695 void Chart2ExportTest::testPlotAreaManualLayoutXLSX()
1696 {
1697 load("/chart2/qa/extras/data/xlsx/", "plot_area_manual_layout.xlsx");
1698 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1699 CPPUNIT_ASSERT(pXmlDoc);
1700
1701 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", "val", "inner");
1702 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:xMode", "val", "edge");
1703 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:yMode", "val", "edge");
1704
1705 OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:x", "val");
1706 double nX = aXVal.toDouble();
1707 CPPUNIT_ASSERT(nX > 0 && nX < 1);
1708
1709 OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:y", "val");
1710 double nY = aYVal.toDouble();
1711 CPPUNIT_ASSERT(nY > 0 && nY < 1);
1712 CPPUNIT_ASSERT(nX != nY);
1713
1714 OUString aWVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:w", "val");
1715 double nW = aWVal.toDouble();
1716 CPPUNIT_ASSERT(nW > 0 && nW < 1);
1717
1718 OUString aHVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:h", "val");
1719 double nH = aHVal.toDouble();
1720 CPPUNIT_ASSERT(nH > 0 && nH < 1);
1721 CPPUNIT_ASSERT(nH != nW);
1722 }
1723
testLegendManualLayoutXLSX()1724 void Chart2ExportTest::testLegendManualLayoutXLSX()
1725 {
1726 load("/chart2/qa/extras/data/xlsx/", "legend_manual_layout.xlsx");
1727 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1728 CPPUNIT_ASSERT(pXmlDoc);
1729
1730 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:layout/c:manualLayout/c:layoutTarget", 0);
1731 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:xMode", "val", "edge");
1732 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:yMode", "val", "edge");
1733
1734 OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:x", "val");
1735 double nX = aXVal.toDouble();
1736 CPPUNIT_ASSERT(nX > 0 && nX < 1);
1737
1738 OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:y", "val");
1739 double nY = aYVal.toDouble();
1740 CPPUNIT_ASSERT(nY > 0 && nY < 1);
1741 CPPUNIT_ASSERT(nX != nY);
1742
1743 OUString aWVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:w", "val");
1744 double nW = aWVal.toDouble();
1745 CPPUNIT_ASSERT(nW > 0 && nW < 1);
1746
1747 OUString aHVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:layout/c:manualLayout/c:h", "val");
1748 double nH = aHVal.toDouble();
1749 CPPUNIT_ASSERT(nH > 0 && nH < 1);
1750 CPPUNIT_ASSERT(nH != nW);
1751
1752 // Make sure that default text font size is preserved after export
1753 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:legend/c:txPr/a:p/a:pPr/a:defRPr", "sz", "900");
1754 }
1755
testChartSubTitle()1756 void Chart2ExportTest::testChartSubTitle()
1757 {
1758 load("/chart2/qa/extras/data/ods/", "testChartSubTitle.ods");
1759 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1760 CPPUNIT_ASSERT(pXmlDoc);
1761 // test properties of subtitle
1762 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "sz", "1100");
1763 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "b", "1");
1764 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", "00a933");
1765 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr/a:latin", "typeface", "Times New Roman");
1766 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:t", "It is a Subtitle");
1767 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", "b2b2b2");
1768 }
1769
testChartMainWithSubTitle()1770 void Chart2ExportTest::testChartMainWithSubTitle()
1771 {
1772 load("/chart2/qa/extras/data/ods/", "testChartMainWithSubTitle.ods");
1773 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1774 CPPUNIT_ASSERT(pXmlDoc);
1775 // test properties of title
1776 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "sz", "1300");
1777 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "b", "0");
1778 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "i", "1");
1779 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", "f10d0c");
1780 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr/a:latin", "typeface", "Arial");
1781 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:t", "It is a Maintitle\nIt is a Subtitle");
1782 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", "81d41a");
1783 }
1784
testAutoTitleDeleted()1785 void Chart2ExportTest::testAutoTitleDeleted()
1786 {
1787 load("/chart2/qa/extras/data/xlsx/", "testAutoTitleDeleted.xlsx");
1788 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1789 CPPUNIT_ASSERT(pXmlDoc);
1790 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:autoTitleDeleted", "val", "1");
1791 }
1792
testChartTitlePropertiesColorFillXLSX()1793 void Chart2ExportTest::testChartTitlePropertiesColorFillXLSX()
1794 {
1795 load("/chart2/qa/extras/data/xlsx/", "testChartTitlePropertiesColorFill.xlsx");
1796 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1797 CPPUNIT_ASSERT(pXmlDoc);
1798 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
1799 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1800 }
1801
testChartTitlePropertiesGradientFillXLSX()1802 void Chart2ExportTest::testChartTitlePropertiesGradientFillXLSX()
1803 {
1804 load("/chart2/qa/extras/data/xlsx/", "testChartTitlePropertiesGradientFill.xlsx");
1805 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1806 CPPUNIT_ASSERT(pXmlDoc);
1807 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", "cccccc");
1808 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", "666666");
1809 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1810 }
1811
testChartTitlePropertiesBitmapFillXLSX()1812 void Chart2ExportTest::testChartTitlePropertiesBitmapFillXLSX()
1813 {
1814 load("/chart2/qa/extras/data/xlsx/", "testChartTitlePropertiesBitmapFill.xlsx");
1815 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1816 CPPUNIT_ASSERT(pXmlDoc);
1817 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:blipFill/a:blip", "embed", "rId1");
1818 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
1819 }
1820
testBarChartDataPointPropXLSX()1821 void Chart2ExportTest::testBarChartDataPointPropXLSX()
1822 {
1823 load("/chart2/qa/extras/data/xlsx/", "testBarChartDataPointPropXLSX.xlsx");
1824 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1825 CPPUNIT_ASSERT(pXmlDoc);
1826
1827 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", "0");
1828
1829 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:idx", "val", "1");
1830 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
1831 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[1]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "000000");
1832
1833 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:idx", "val", "2");
1834 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", "f6f8fc");
1835 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", "c7d5ed");
1836 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt[2]/c:spPr/a:ln/a:solidFill/a:srgbClr", "val", "70ad47");
1837 }
1838
testDataseriesOverlapStackedChartXLSX()1839 void Chart2ExportTest::testDataseriesOverlapStackedChartXLSX()
1840 {
1841 load("/chart2/qa/extras/data/xlsx/", "testDataseriesOverlapStackedChart.xlsx");
1842
1843 // test the overlap value of a simple Stacked Column Chart
1844 uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
1845 checkSheetForGapWidthAndOverlap(xChartDoc, 100, 0);
1846
1847 // test the overlap value of a Percent Stacked Bar Chart
1848 xChartDoc = getChartDocFromSheet( 1, mxComponent );
1849 checkSheetForGapWidthAndOverlap(xChartDoc, 100, 35);
1850
1851 reload("Calc Office Open XML");
1852
1853 xChartDoc = getChartDocFromSheet( 0, mxComponent );
1854 checkSheetForGapWidthAndOverlap(xChartDoc, 100, 100);
1855
1856 xChartDoc = getChartDocFromSheet( 1, mxComponent );
1857 checkSheetForGapWidthAndOverlap(xChartDoc, 100, 100);
1858 }
1859
testAxisCharacterPropertiesXLSX()1860 void Chart2ExportTest::testAxisCharacterPropertiesXLSX()
1861 {
1862 load("/chart2/qa/extras/data/xlsx/", "axis_character_properties.xlsx");
1863 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1864 CPPUNIT_ASSERT(pXmlDoc);
1865
1866 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "sz", "1000");
1867 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "b", "1");
1868 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "i", "1");
1869 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:p/a:pPr/a:defRPr", "u", "sng");
1870
1871 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "sz", "900");
1872 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "b", "1");
1873 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr", "strike", "sngStrike");
1874 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:txPr/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", "ff0000");
1875 }
1876
testTitleCharacterPropertiesXLSX()1877 void Chart2ExportTest::testTitleCharacterPropertiesXLSX()
1878 {
1879 load("/chart2/qa/extras/data/xlsx/", "title_character_properties.xlsx");
1880 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1881 CPPUNIT_ASSERT(pXmlDoc);
1882
1883 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "sz", "2400");
1884 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", "b", "1");
1885
1886 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "sz", "2400");
1887 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:r/a:rPr", "b", "1");
1888 }
1889
testPlotVisOnlyXLSX()1890 void Chart2ExportTest::testPlotVisOnlyXLSX()
1891 {
1892 load("/chart2/qa/extras/data/xlsx/", "hidden_cells.xlsx");
1893 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1894 CPPUNIT_ASSERT(pXmlDoc);
1895
1896 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotVisOnly", "val", "0");
1897 }
1898
testBarChartVaryColorsXLSX()1899 void Chart2ExportTest::testBarChartVaryColorsXLSX()
1900 {
1901 load("/chart2/qa/extras/data/xlsx/", "tdf90876.xlsx");
1902 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1903 CPPUNIT_ASSERT(pXmlDoc);
1904
1905 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:varyColors", "val", "0");
1906 }
1907
testMultipleAxisXLSX()1908 void Chart2ExportTest::testMultipleAxisXLSX()
1909 {
1910 load("/chart2/qa/extras/data/ods/", "multiple_axis.ods");
1911 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1912 CPPUNIT_ASSERT(pXmlDoc);
1913
1914 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart", 2);
1915 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart[1]/c:ser", 1);
1916 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:scatterChart[2]/c:ser", 1);
1917 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx", 4);
1918 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:delete[@val='1']", 1);
1919 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:axPos[@val='l']", 1);
1920 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:axPos[@val='r']", 1);
1921 }
1922
testSecondaryAxisXLSX()1923 void Chart2ExportTest::testSecondaryAxisXLSX()
1924 {
1925 load("/chart2/qa/extras/data/ods/", "secondary_axis.ods");
1926 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1927 CPPUNIT_ASSERT(pXmlDoc);
1928
1929 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart", 2);
1930 // test there is just those series in the first <lineChart> tag which are attached to the primary axis
1931 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser", 2);
1932 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", "b");
1933 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[1]/c:ser[2]/c:tx/c:strRef/c:strCache/c:pt/c:v", "c");
1934 // test there is just those series in the second <lineChart> tag which are attached to the secondary axis
1935 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser", 1);
1936 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart[2]/c:ser[1]/c:tx/c:strRef/c:strCache/c:pt/c:v", "a");
1937 }
1938
testSetSeriesToSecondaryAxisXLSX()1939 void Chart2ExportTest::testSetSeriesToSecondaryAxisXLSX()
1940 {
1941 load("/chart2/qa/extras/data/xlsx/", "add_series_secondary_axis.xlsx");
1942 Reference< chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent);
1943 // Second series
1944 Reference<chart2::XDataSeries> xSeries = getDataSeriesFromDoc(xChartDoc, 1);
1945 CPPUNIT_ASSERT(xSeries.is());
1946
1947 Reference<beans::XPropertySet> xPropSet(xSeries, uno::UNO_QUERY_THROW);
1948 sal_Int32 AxisIndex = 1;
1949 // Attach the second series to the secondary axis. (The third series is already attached.)
1950 xPropSet->setPropertyValue("AttachedAxisIndex", uno::Any(AxisIndex));
1951
1952 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1953 CPPUNIT_ASSERT(pXmlDoc);
1954 // Check there are only two <lineChart> tag in the XML, one for the primary and one for the secondary axis.
1955 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart", 2);
1956 }
1957
testCombinedChartSecondaryAxisXLSX()1958 void Chart2ExportTest::testCombinedChartSecondaryAxisXLSX()
1959 {
1960 // Original file was created with MS Office
1961 load("/chart2/qa/extras/data/xlsx/", "combined_chart_secondary_axis.xlsx");
1962 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1963 CPPUNIT_ASSERT(pXmlDoc);
1964 // Collect barchart axID on secondary Axis
1965 OUString XValueIdOfBarchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[1]", "val");
1966 OUString YValueIdOfBarchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[2]", "val");
1967 // Collect linechart axID on primary Axis
1968 OUString XValueIdOfLinechart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[1]", "val");
1969 OUString YValueIdOfLinechart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[2]", "val");
1970 // Check which c:catAx and c:valAx contain the AxisId of charttypes
1971 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[1]/c:axId", "val", XValueIdOfLinechart);
1972 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:axId", "val", YValueIdOfLinechart);
1973 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[2]/c:axId", "val", XValueIdOfBarchart);
1974 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:axId", "val", YValueIdOfBarchart);
1975 }
1976
testCombinedChartSecondaryAxisODS()1977 void Chart2ExportTest::testCombinedChartSecondaryAxisODS()
1978 {
1979 // Original file was created with LibreOffice
1980 load("/chart2/qa/extras/data/ods/", "combined_chart_secondary_axis.ods");
1981 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
1982 CPPUNIT_ASSERT(pXmlDoc);
1983 // Collect barchart axID on secondary Axis
1984 OUString XValueIdOfBarchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[1]", "val");
1985 OUString YValueIdOfBarchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[2]", "val");
1986 // Collect linechart axID on primary Axis
1987 OUString XValueIdOfLinechart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[1]", "val");
1988 OUString YValueIdOfLinechart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[2]", "val");
1989 // Check which c:catAx and c:valAx contain the AxisId of charttypes
1990 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[1]/c:axId", "val", XValueIdOfLinechart);
1991 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[1]/c:axId", "val", YValueIdOfLinechart);
1992 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[2]/c:axId", "val", XValueIdOfBarchart);
1993 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx[2]/c:axId", "val", YValueIdOfBarchart);
1994 // do not need CT_crosses tag if the actual axis is deleted, so we need to make sure it is not saved
1995 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx[2]/c:crosses", 0);
1996 }
1997
testCrossBetweenXLSX()1998 void Chart2ExportTest::testCrossBetweenXLSX()
1999 {
2000 // Original file was created with MS Office
2001 load("/chart2/qa/extras/data/xlsx/", "tdf127777.xlsx");
2002 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2003 CPPUNIT_ASSERT(pXmlDoc);
2004 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:crossBetween", "val", "between");
2005 }
2006
testCrossBetweenWithDeletedAxis()2007 void Chart2ExportTest::testCrossBetweenWithDeletedAxis()
2008 {
2009 // Original file was created with MS Office (the category axis is deleted in the file)
2010 load("/chart2/qa/extras/data/xlsx/", "tdf128633.xlsx");
2011 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2012 CPPUNIT_ASSERT(pXmlDoc);
2013 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:crossBetween", "val", "between");
2014 }
2015
testCrossBetweenODS()2016 void Chart2ExportTest::testCrossBetweenODS()
2017 {
2018 // Original file was created with LibreOffice
2019 load("/chart2/qa/extras/data/ods/", "test_CrossBetween.ods");
2020 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2021 CPPUNIT_ASSERT(pXmlDoc);
2022 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:crossBetween", "val", "between");
2023 }
2024
testAxisTitleRotationXLSX()2025 void Chart2ExportTest::testAxisTitleRotationXLSX()
2026 {
2027 load("/chart2/qa/extras/data/xlsx/", "axis_title_rotation.xlsx");
2028 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2029 CPPUNIT_ASSERT(pXmlDoc);
2030
2031 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:title/c:tx/c:rich/a:bodyPr", "rot", "0");
2032 }
2033
testAxisTitlePositionDOCX()2034 void Chart2ExportTest::testAxisTitlePositionDOCX()
2035 {
2036 load("/chart2/qa/extras/data/docx/", "testAxisTitlePosition.docx");
2037 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
2038 CPPUNIT_ASSERT(pXmlDoc);
2039
2040 // test X Axis title position
2041 OUString aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:title/c:layout/c:manualLayout/c:x", "val");
2042 double nX = aXVal.toDouble();
2043 CPPUNIT_ASSERT(nX > 0.698208 && nX < 0.698209);
2044 OUString aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:title/c:layout/c:manualLayout/c:y", "val");
2045 double nY = aYVal.toDouble();
2046 CPPUNIT_ASSERT(nY > 0.805152 && nY < 0.805153);
2047
2048 // test Y Axis title position
2049 aXVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:title/c:layout/c:manualLayout/c:x", "val");
2050 nX = aXVal.toDouble();
2051 CPPUNIT_ASSERT(nX > 0.025395 && nX < 0.025396);
2052 aYVal = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:valAx/c:title/c:layout/c:manualLayout/c:y", "val");
2053 nY = aYVal.toDouble();
2054 CPPUNIT_ASSERT(nY > 0.384407 && nY < 0.384408);
2055 }
2056
testAxisCrossBetweenXSLX()2057 void Chart2ExportTest::testAxisCrossBetweenXSLX()
2058 {
2059 load("/chart2/qa/extras/data/odt/", "axis-position.odt");
2060 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
2061 assertXPath(pXmlDoc, "(//c:crossBetween)[1]", "val", "midCat");
2062 }
2063
testPieChartDataPointExplosionXLSX()2064 void Chart2ExportTest::testPieChartDataPointExplosionXLSX()
2065 {
2066 load("/chart2/qa/extras/data/xlsx/", "pie_chart_datapoint_explosion.xlsx");
2067 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2068 CPPUNIT_ASSERT(pXmlDoc);
2069
2070 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dPt/c:explosion", "val", "28");
2071 }
2072
testCustomDataLabel()2073 void Chart2ExportTest::testCustomDataLabel()
2074 {
2075 load("/chart2/qa/extras/data/pptx/", "tdf115107.pptx");
2076 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart1", "Impress MS PowerPoint 2007 XML");
2077 CPPUNIT_ASSERT(pXmlDoc);
2078 // Check the data labels font color for the complete data series
2079 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:txPr/a:p/a:pPr/a:defRPr/a:solidFill/a:srgbClr", "val", "404040");
2080
2081 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY);
2082 CPPUNIT_ASSERT(xChartDoc.is());
2083
2084 uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0));
2085 CPPUNIT_ASSERT(xDataSeries.is());
2086 float nFontSize;
2087 sal_Int64 nFontColor;
2088 sal_Int32 nCharUnderline;
2089 uno::Reference<beans::XPropertySet> xPropertySet;
2090 uno::Sequence<uno::Reference<chart2::XDataPointCustomLabelField>> aFields;
2091
2092 // 1
2093 xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW);
2094 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2095 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), aFields.getLength());
2096
2097 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[0]->getFieldType());
2098 CPPUNIT_ASSERT_EQUAL(OUString("90.0 = "), aFields[0]->getString());
2099 aFields[0]->getPropertyValue("CharHeight") >>= nFontSize;
2100 aFields[0]->getPropertyValue("CharColor") >>= nFontColor;
2101 CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize);
2102 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xed7d31), nFontColor);
2103
2104 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[1]->getFieldType());
2105 CPPUNIT_ASSERT_EQUAL(OUString("90"), aFields[1]->getString());
2106 CPPUNIT_ASSERT_EQUAL(OUString("{0C576297-5A9F-4B4E-A675-B6BA406B7D87}"), aFields[1]->getGuid());
2107
2108 // 2
2109 xPropertySet.set(xDataSeries->getDataPointByIndex(1), uno::UNO_SET_THROW);
2110 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2111 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(8), aFields.getLength());
2112
2113 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[0]->getFieldType());
2114 CPPUNIT_ASSERT_EQUAL(OUString("Text"), aFields[0]->getString());
2115
2116 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType());
2117 CPPUNIT_ASSERT_EQUAL(OUString(" : "), aFields[1]->getString());
2118
2119 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_CATEGORYNAME, aFields[2]->getFieldType());
2120 CPPUNIT_ASSERT_EQUAL(OUString("B"), aFields[2]->getString());
2121 CPPUNIT_ASSERT_EQUAL(OUString("{0CCAAACD-B393-42CE-8DBD-82F9F9ADC852}"), aFields[2]->getGuid());
2122 aFields[2]->getPropertyValue("CharHeight") >>= nFontSize;
2123 aFields[2]->getPropertyValue("CharColor") >>= nFontColor;
2124 CPPUNIT_ASSERT_EQUAL(static_cast<float>(16), nFontSize);
2125 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xed7d31), nFontColor);
2126
2127 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_NEWLINE, aFields[3]->getFieldType());
2128
2129 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[4]->getFieldType());
2130 CPPUNIT_ASSERT_EQUAL(OUString("Multi"), aFields[4]->getString());
2131
2132 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[5]->getFieldType());
2133 CPPUNIT_ASSERT_EQUAL(OUString("line"), aFields[5]->getString());
2134 aFields[5]->getPropertyValue("CharHeight") >>= nFontSize;
2135 aFields[5]->getPropertyValue("CharColor") >>= nFontColor;
2136 CPPUNIT_ASSERT_EQUAL(static_cast<float>(13), nFontSize);
2137 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xbf9000), nFontColor);
2138
2139 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_NEWLINE, aFields[6]->getFieldType());
2140
2141 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[7]->getFieldType());
2142 CPPUNIT_ASSERT_EQUAL(OUString("Abc"), aFields[7]->getString());
2143 aFields[7]->getPropertyValue("CharHeight") >>= nFontSize;
2144 aFields[7]->getPropertyValue("CharColor") >>= nFontColor;
2145 aFields[7]->getPropertyValue("CharUnderline") >>= nCharUnderline;
2146 CPPUNIT_ASSERT_EQUAL(static_cast<float>(12), nFontSize);
2147 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xa9d18e), nFontColor);
2148 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nCharUnderline);
2149
2150 // 3
2151 xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW);
2152 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2153 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), aFields.getLength());
2154
2155 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[0]->getFieldType());
2156 CPPUNIT_ASSERT_EQUAL(OUString("DATA"), aFields[0]->getString());
2157 CPPUNIT_ASSERT_EQUAL(OUString("{C8F3EB90-8960-4F9A-A3AD-B4FAC4FE4566}"), aFields[0]->getGuid());
2158
2159 // 4
2160 xPropertySet.set(xDataSeries->getDataPointByIndex(3), uno::UNO_SET_THROW);
2161 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2162 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), aFields.getLength());
2163
2164 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_CELLREF, aFields[0]->getFieldType());
2165 //CPPUNIT_ASSERT_EQUAL(OUString("70"), aFields[0]->getString()); TODO: Not implemented yet
2166
2167 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType());
2168 CPPUNIT_ASSERT_EQUAL(OUString(" <CELLREF"), aFields[1]->getString());
2169 }
2170
testCustomDataLabelMultipleSeries()2171 void Chart2ExportTest::testCustomDataLabelMultipleSeries()
2172 {
2173 load("/chart2/qa/extras/data/pptx/", "tdf115107-2.pptx");
2174 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart2", "Impress MS PowerPoint 2007 XML");
2175 CPPUNIT_ASSERT(pXmlDoc);
2176
2177 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromDrawImpress(0, 0), uno::UNO_QUERY);
2178 CPPUNIT_ASSERT(xChartDoc.is());
2179
2180 uno::Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0));
2181 CPPUNIT_ASSERT(xDataSeries.is());
2182 float nFontSize;
2183 sal_Int64 nFontColor;
2184 uno::Reference<beans::XPropertySet> xPropertySet;
2185 uno::Sequence<uno::Reference<chart2::XDataPointCustomLabelField>> aFields;
2186
2187 // First series
2188 xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW);
2189 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2190 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), aFields.getLength());
2191
2192 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[0]->getFieldType());
2193 CPPUNIT_ASSERT_EQUAL(OUString("4.3"), aFields[0]->getString());
2194 aFields[0]->getPropertyValue("CharHeight") >>= nFontSize;
2195 aFields[0]->getPropertyValue("CharColor") >>= nFontColor;
2196 CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize);
2197 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xc00000), nFontColor);
2198
2199 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType());
2200 CPPUNIT_ASSERT_EQUAL(OUString(" "), aFields[1]->getString());
2201
2202 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[2]->getFieldType());
2203 CPPUNIT_ASSERT_EQUAL(OUString("Bars"), aFields[2]->getString());
2204
2205 // Second series
2206 xDataSeries = getDataSeriesFromDoc(xChartDoc, 0, 1);
2207 CPPUNIT_ASSERT(xDataSeries.is());
2208
2209 xPropertySet.set(xDataSeries->getDataPointByIndex(0), uno::UNO_SET_THROW);
2210 xPropertySet->getPropertyValue("CustomLabelFields") >>= aFields;
2211 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), aFields.getLength());
2212
2213 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_VALUE, aFields[0]->getFieldType());
2214 CPPUNIT_ASSERT_EQUAL(OUString("2"), aFields[0]->getString());
2215 aFields[0]->getPropertyValue("CharHeight") >>= nFontSize;
2216 aFields[0]->getPropertyValue("CharColor") >>= nFontColor;
2217 CPPUNIT_ASSERT_EQUAL(static_cast<float>(18), nFontSize);
2218 CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int64>(0xffd966), nFontColor);
2219
2220 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT, aFields[1]->getFieldType());
2221 CPPUNIT_ASSERT_EQUAL(OUString(" "), aFields[1]->getString());
2222
2223 CPPUNIT_ASSERT_EQUAL(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_SERIESNAME, aFields[2]->getFieldType());
2224 CPPUNIT_ASSERT_EQUAL(OUString("Line"), aFields[2]->getString());
2225
2226 }
2227
testNumberFormatExportPPTX()2228 void Chart2ExportTest::testNumberFormatExportPPTX()
2229 {
2230 load("/chart2/qa/extras/data/pptx/", "tdf115859.pptx");
2231 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2232 CPPUNIT_ASSERT(pXmlDoc);
2233
2234 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:numFmt", "formatCode", "#,##0.00,\\K");
2235 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:numFmt", "sourceLinked", "0");
2236 }
2237
testLabelSeparatorExportDOCX()2238 void Chart2ExportTest::testLabelSeparatorExportDOCX()
2239 {
2240 load("/chart2/qa/extras/data/docx/", "testLabelSeparator.docx");
2241
2242 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
2243 CPPUNIT_ASSERT(xChartDoc.is());
2244
2245 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
2246 CPPUNIT_ASSERT(pXmlDoc);
2247
2248 // The text separator should be a new line
2249 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:dLbls/c:separator", "\n");
2250 // The text separator should be a comma
2251 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[2]/c:dLbls/c:separator", ", ");
2252 // The text separator should be a semicolon
2253 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[3]/c:dLbls/c:separator", "; ");
2254 }
2255
testChartTitlePropertiesColorFillPPTX()2256 void Chart2ExportTest::testChartTitlePropertiesColorFillPPTX()
2257 {
2258 load("/chart2/qa/extras/data/pptx/", "testChartTitlePropertiesColorFill.pptx");
2259 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2260 CPPUNIT_ASSERT(pXmlDoc);
2261 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:solidFill/a:srgbClr", "val", "ff0000");
2262 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
2263 }
2264
testChartTitlePropertiesGradientFillPPTX()2265 void Chart2ExportTest::testChartTitlePropertiesGradientFillPPTX()
2266 {
2267 load("/chart2/qa/extras/data/pptx/", "testChartTitlePropertiesGradientFill.pptx");
2268 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2269 CPPUNIT_ASSERT(pXmlDoc);
2270 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[1]/a:srgbClr", "val", "f6f8fc");
2271 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:gradFill/a:gsLst/a:gs[2]/a:srgbClr", "val", "c7d5ed");
2272 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
2273 }
2274
testChartTitlePropertiesBitmapFillPPTX()2275 void Chart2ExportTest::testChartTitlePropertiesBitmapFillPPTX()
2276 {
2277 load("/chart2/qa/extras/data/pptx/", "testChartTitlePropertiesBitmapFill.pptx");
2278 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2279 CPPUNIT_ASSERT(pXmlDoc);
2280 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:blipFill/a:blip", "embed", "rId1");
2281 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:title/c:spPr/a:ln/a:noFill", 1);
2282 }
2283
testxAxisLabelsRotation()2284 void Chart2ExportTest::testxAxisLabelsRotation()
2285 {
2286 load ("/chart2/qa/extras/data/xlsx/", "xAxisLabelsRotation.xlsx");
2287 xmlDocPtr pXmlDoc1 = parseExport("xl/charts/chart","Calc Office Open XML");
2288 CPPUNIT_ASSERT(pXmlDoc1);
2289
2290 // Chart1 xAxis labels should be 45 degree
2291 assertXPath(pXmlDoc1, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:bodyPr", "rot", "2700000");
2292 }
2293
testMultipleCategoryAxisLablesXLSX()2294 void Chart2ExportTest::testMultipleCategoryAxisLablesXLSX()
2295 {
2296 load("/chart2/qa/extras/data/ods/", "multilevelcat.ods");
2297 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2298 CPPUNIT_ASSERT(pXmlDoc);
2299 // check category axis labels number of first level
2300 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:ptCount", "val", "6");
2301 // check category axis labels text of first level
2302 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[1]/c:pt[1]/c:v", "Categoria 1");
2303 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[1]/c:pt[6]/c:v", "Categoria 6");
2304 // check category axis labels text of second level
2305 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[2]/c:pt[1]/c:v", "2011");
2306 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[2]/c:pt[3]/c:v", "2013");
2307 // check the 'noMultiLvlLbl' tag - ChartExport.cxx:2950 FIXME: seems not support, so check the default noMultiLvlLbl value.
2308 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:noMultiLvlLbl", "val", "0");
2309 }
2310
testMultipleCategoryAxisLablesDOCX()2311 void Chart2ExportTest::testMultipleCategoryAxisLablesDOCX()
2312 {
2313 load("/chart2/qa/extras/data/odt/", "multilevelcat.odt");
2314 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
2315 CPPUNIT_ASSERT(pXmlDoc);
2316 // check category axis labels number of first level
2317 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:ptCount", "val", "4");
2318 // check category axis labels text of first level
2319 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[1]/c:pt[1]/c:v", "Categoria 1");
2320 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[1]/c:pt[4]/c:v", "Categoria 4");
2321 // check category axis labels text of second level
2322 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[2]/c:pt[1]/c:v", "2011");
2323 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[1]/c:cat/c:multiLvlStrRef/c:multiLvlStrCache/c:lvl[2]/c:pt[2]/c:v", "2012");
2324 // check the 'noMultiLvlLbl' tag - ChartExport.cxx:2950 FIXME: seems not support, so check the default noMultiLvlLbl value.
2325 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:noMultiLvlLbl", "val", "0");
2326 }
2327
testTdf116163()2328 void Chart2ExportTest::testTdf116163()
2329 {
2330 load("/chart2/qa/extras/data/pptx/", "tdf116163.pptx");
2331 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2332 CPPUNIT_ASSERT(pXmlDoc);
2333
2334 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:catAx/c:txPr/a:bodyPr", "rot", "-5400000");
2335 }
2336
testTdf111824()2337 void Chart2ExportTest::testTdf111824()
2338 {
2339 load("/chart2/qa/extras/data/xlsx/", "tdf111824.xlsx");
2340 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2341 CPPUNIT_ASSERT(pXmlDoc);
2342
2343 // Collect 3D barchart Z axID
2344 OUString zAxisIdOf3DBarchart = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:bar3DChart/c:axId[3]", "val");
2345 // 3D barchart Z axis properties should be in a serAx OOXML tag instead of catAx
2346 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:serAx/c:axId", "val", zAxisIdOf3DBarchart);
2347 }
2348
testTdf119029()2349 void Chart2ExportTest::testTdf119029()
2350 {
2351 load("/chart2/qa/extras/data/odp/", "tdf119029.odp");
2352 // Only use "chart", without number, because the number depends on the previous tests
2353 xmlDocPtr pXmlDoc = parseExport("ppt/charts/chart", "Impress MS PowerPoint 2007 XML");
2354 CPPUNIT_ASSERT(pXmlDoc);
2355
2356 assertXPath(pXmlDoc,
2357 "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:txPr/a:bodyPr", "rot",
2358 "-5400000");
2359 }
2360
testTdf108022()2361 void Chart2ExportTest::testTdf108022()
2362 {
2363 load("/chart2/qa/extras/data/odt/", "tdf108022.odt");
2364 reload("Office Open XML Text");
2365
2366 // assert we really have two charts
2367 Reference<chart2::XChartDocument> xChartDoc1(getChartDocFromWriter(0), uno::UNO_QUERY);
2368 CPPUNIT_ASSERT(xChartDoc1.is());
2369 Reference<chart2::XChartDocument> xChartDoc2(getChartDocFromWriter(1), uno::UNO_QUERY);
2370 CPPUNIT_ASSERT(xChartDoc2.is());
2371 }
2372
testTdf121744()2373 void Chart2ExportTest::testTdf121744()
2374 {
2375 load("/chart2/qa/extras/data/docx/", "tdf121744.docx");
2376 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
2377 CPPUNIT_ASSERT(pXmlDoc);
2378
2379 OUString XValueId = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[1]", "val");
2380 OUString YValueId = getXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:axId[2]", "val");
2381
2382 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[1]", "val", XValueId );
2383 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:axId[2]", "val", YValueId );
2384 }
2385
testTdf122031()2386 void Chart2ExportTest::testTdf122031()
2387 {
2388 //Checks pie chart data label format.
2389
2390 load("/chart2/qa/extras/data/xlsx/", "tdf122031.xlsx");
2391 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart", "Calc Office Open XML");
2392 CPPUNIT_ASSERT(pXmlDoc);
2393
2394 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:numFmt", "formatCode", "0.000%");
2395 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[1]/c:numFmt", "formatCode", "0.000%");
2396 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[2]/c:numFmt", "formatCode", "0.000%");
2397 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[3]/c:numFmt", "formatCode", "0.000%");
2398 }
2399
testTdf115012()2400 void Chart2ExportTest::testTdf115012()
2401 {
2402 load("/chart2/qa/extras/data/xlsx/", "tdf115012.xlsx");
2403 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
2404 CPPUNIT_ASSERT(pXmlDoc);
2405 // workaround: use-zero instead of leave-gap to show the original line chart
2406 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:dispBlanksAs", "val", "zero");
2407 }
2408
testTdf123206_customLabelText()2409 void Chart2ExportTest::testTdf123206_customLabelText()
2410 {
2411 load("/chart2/qa/extras/data/docx/", "tdf123206.docx");
2412
2413 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
2414 CPPUNIT_ASSERT(xChartDoc.is());
2415
2416 xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text");
2417 CPPUNIT_ASSERT(pXmlDoc);
2418
2419 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r/a:t", "kiscica");
2420 }
2421
testCustomLabelText()2422 void Chart2ExportTest::testCustomLabelText()
2423 {
2424 load("/chart2/qa/extras/data/docx/", "testCustomlabeltext.docx");
2425
2426 Reference<chart2::XChartDocument> xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY);
2427 CPPUNIT_ASSERT(xChartDoc.is());
2428
2429 xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
2430 CPPUNIT_ASSERT(pXmlDoc);
2431
2432 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[1]/c:idx", "val", "2");
2433 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[1]/c:tx/c:rich/a:p/a:r[1]/a:t", "3.5");
2434 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[1]/c:tx/c:rich/a:p/a:r[3]/a:t", "CustomLabel 1");
2435
2436 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[2]/c:idx", "val", "3");
2437 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r[1]/a:t", "4.5");
2438 assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r[3]/a:t", "CustomLabel 2");
2439 }
2440
testTdf131979()2441 void Chart2ExportTest::testTdf131979()
2442 {
2443 load("/chart2/qa/extras/data/ods/", "tdf131115.ods");
2444 {
2445 reload("calc8");
2446 Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent);
2447 CPPUNIT_ASSERT(xChartDoc.is());
2448 Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0));
2449 CPPUNIT_ASSERT(xDataSeries.is());
2450 Reference<beans::XPropertySet> xPropertySet;
2451 xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW);
2452 bool blinknumberformattosource = true;
2453 CPPUNIT_ASSERT(xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= blinknumberformattosource);
2454 CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to false.", !blinknumberformattosource);
2455 }
2456
2457 load("/chart2/qa/extras/data/ods/", "tdf131979.ods");
2458 {
2459 reload("calc8");
2460 Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(0, mxComponent);
2461 CPPUNIT_ASSERT(xChartDoc.is());
2462 Reference<chart2::XDataSeries> xDataSeries(getDataSeriesFromDoc(xChartDoc, 0));
2463 CPPUNIT_ASSERT(xDataSeries.is());
2464 Reference<beans::XPropertySet> xPropertySet;
2465 xPropertySet.set(xDataSeries->getDataPointByIndex(2), uno::UNO_SET_THROW);
2466 bool blinknumberformattosource = true;
2467 CPPUNIT_ASSERT(xPropertySet->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= blinknumberformattosource);
2468 CPPUNIT_ASSERT_MESSAGE("\"LinkNumberFormatToSource\" should be set to true.", blinknumberformattosource);
2469 }
2470 }
2471
testTdf132594()2472 void Chart2ExportTest::testTdf132594()
2473 {
2474 load("/chart2/qa/extras/data/xlsx/", "chart_pie2007.xlsx");
2475 xmlDocPtr pXmlDoc = parseExport("xl/charts/chart","Calc Office Open XML");
2476 CPPUNIT_ASSERT(pXmlDoc);
2477
2478 assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:cat", 1);
2479 }
2480
2481 CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest);
2482
2483 CPPUNIT_PLUGIN_IMPLEMENT();
2484
2485 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
2486