1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
10 #include <charttest.hxx>
11 #include <com/sun/star/chart/XChartDocument.hpp>
13 #include <com/sun/star/qa/XDumper.hpp>
15 #include <test/xmldiff.hxx>
16 #include <test/xmltesttools.hxx>
19 #include <string_view>
21 class Chart2XShapeTest
: public ChartTest
25 : ChartTest("/chart2/qa/extras/xshape/data/")
33 void testPropertyMappingBarChart();
34 void testPieChartLabels1();
35 void testPieChartLabels2();
36 void testPieChartLabels3();
37 void testPieChartLabels4();
39 void testTdf76649TrendLineBug();
40 void testTdf88154LabelRotatedLayout();
42 CPPUNIT_TEST_SUITE(Chart2XShapeTest
);
43 CPPUNIT_TEST(testTdf150832
);
44 CPPUNIT_TEST(testTdf149204
);
45 CPPUNIT_TEST(testTdf151424
);
46 CPPUNIT_TEST(testFdo75075
);
47 CPPUNIT_TEST(testPropertyMappingBarChart
);
48 CPPUNIT_TEST(testPieChartLabels1
);
49 CPPUNIT_TEST(testPieChartLabels2
);
50 CPPUNIT_TEST(testPieChartLabels3
);
51 CPPUNIT_TEST(testPieChartLabels4
);
52 CPPUNIT_TEST(testChart
);
53 CPPUNIT_TEST(testTdf76649TrendLineBug
);
54 CPPUNIT_TEST(testTdf88154LabelRotatedLayout
);
56 CPPUNIT_TEST_SUITE_END();
59 void compareAgainstReference(std::u16string_view rDump
, std::u16string_view rReferenceFile
);
60 OUString
getXShapeDumpString();
61 xmlDocUniquePtr
getXShapeDumpXmlDoc();
66 OUString
getShapeDump(css::uno::Reference
<css::chart::XChartDocument
> const& doc
)
68 return css::uno::Reference
<css::qa::XDumper
>(doc
, css::uno::UNO_QUERY_THROW
)->dump("shapes");
71 bool checkDumpAgainstFile(std::u16string_view rDump
, std::u16string_view aFilePath
,
72 char const* toleranceFile
)
74 OString aOFile
= OUStringToOString(aFilePath
, RTL_TEXTENCODING_UTF8
);
76 CPPUNIT_ASSERT_MESSAGE("dump is empty", !rDump
.empty());
78 OString aDump
= OUStringToOString(rDump
, RTL_TEXTENCODING_UTF8
);
79 return doXMLDiff(aOFile
.getStr(), aDump
.getStr(), static_cast<int>(rDump
.size()),
84 OUString
Chart2XShapeTest::getXShapeDumpString()
86 uno::Reference
<chart::XChartDocument
> xChartDoc(getChartCompFromSheet(0, 0, mxComponent
),
88 return getShapeDump(xChartDoc
);
91 xmlDocUniquePtr
Chart2XShapeTest::getXShapeDumpXmlDoc()
93 OUString rDump
= getXShapeDumpString();
94 OString aXmlDump
= OUStringToOString(rDump
, RTL_TEXTENCODING_UTF8
);
95 return xmlDocUniquePtr(xmlParseDoc(reinterpret_cast<const xmlChar
*>(aXmlDump
.getStr())));
98 void Chart2XShapeTest::compareAgainstReference(std::u16string_view rDump
,
99 std::u16string_view rReferenceFile
)
101 checkDumpAgainstFile(
103 Concat2View(m_directories
.getPathFromSrc(u
"/chart2/qa/extras/xshape/data/reference/")
106 m_directories
.getPathFromSrc(u
"/chart2/qa/extras/xshape/data/reference/tolerance.xml"),
107 RTL_TEXTENCODING_UTF8
)
111 void Chart2XShapeTest::testTdf150832()
113 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
114 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
118 // Without the fix in place, this test would have failed with
121 loadFromFile(u
"xls/tdf150832.xls");
122 compareAgainstReference(getXShapeDumpString(), u
"tdf150832.xml");
125 void Chart2XShapeTest::testTdf149204()
127 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
128 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
132 // Without the fix in place, this test would have failed with
135 // - Node: /XShapes/XShape[2]
137 loadFromFile(u
"pptx/tdf149204.pptx");
138 uno::Reference
<chart::XChartDocument
> xChartDoc
= getChartDocFromDrawImpress(0, 0);
139 compareAgainstReference(getShapeDump(xChartDoc
), u
"tdf149204.xml");
142 void Chart2XShapeTest::testTdf151424()
144 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
145 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
149 // Without the fix in place, this test would have failed with
152 // - Node: /XShapes/XShape[2]/XShapes/XShape[1]
154 loadFromFile(u
"ods/tdf151424.ods");
155 compareAgainstReference(getXShapeDumpString(), u
"tdf151424.xml");
158 void Chart2XShapeTest::testFdo75075()
160 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
161 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
165 loadFromFile(u
"ods/fdo75075.ods");
166 compareAgainstReference(getXShapeDumpString(), u
"fdo75075.xml");
169 void Chart2XShapeTest::testPropertyMappingBarChart()
171 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
172 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
176 loadFromFile(u
"ods/property-mapping-bar.ods");
177 compareAgainstReference(getXShapeDumpString(), u
"property-mapping-bar.xml");
180 void Chart2XShapeTest::testPieChartLabels1()
182 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
183 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
187 // inside placement for the best fit case
188 loadFromFile(u
"xlsx/tdf90839-1.xlsx");
189 compareAgainstReference(getXShapeDumpString(), u
"tdf90839-1.xml");
192 void Chart2XShapeTest::testPieChartLabels2()
194 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
195 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
199 // text wrap: wrap all text labels except one
200 loadFromFile(u
"xlsx/tdf90839-2.xlsx");
201 compareAgainstReference(getXShapeDumpString(), u
"tdf90839-2.xml");
204 void Chart2XShapeTest::testPieChartLabels3()
206 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
207 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
211 // text wrap: wrap no text label except one
212 loadFromFile(u
"xlsx/tdf90839-3.xlsx");
213 compareAgainstReference(getXShapeDumpString(), u
"tdf90839-3.xml");
216 void Chart2XShapeTest::testPieChartLabels4()
218 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
219 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
223 // data value and percent value are centered horizontally
224 loadFromFile(u
"ods/tdf90839-4.ods");
225 compareAgainstReference(getXShapeDumpString(), u
"tdf90839-4.xml");
228 void Chart2XShapeTest::testChart()
230 // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
231 // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
235 loadFromFile(u
"ods/testChart.ods");
236 compareAgainstReference(getXShapeDumpString(), u
"testChart.xml");
239 void Chart2XShapeTest::testTdf76649TrendLineBug()
241 // This bug prevents that the trendline (regression curve) is drawn
242 // if the first cell is empty. See tdf#76649 for details.
244 loadFromFile(u
"ods/tdf76649_TrendLineBug.ods");
246 xmlDocUniquePtr pXmlDoc
= getXShapeDumpXmlDoc();
248 // Check if the regression curve exists (which means a XShape with a certain
249 // name should exist in the dump)
250 assertXPath(pXmlDoc
, "//XShape[@name='CID/D=0:CS=0:CT=0:Series=0:Curve=0']"_ostr
, 1);
253 void Chart2XShapeTest::testTdf88154LabelRotatedLayout()
255 loadFromFile(u
"pptx/tdf88154_LabelRotatedLayout.pptx");
256 uno::Reference
<chart::XChartDocument
> xChartDoc
= getChartDocFromDrawImpress(0, 5);
257 OUString rDump
= getShapeDump(xChartDoc
);
258 OString aXmlDump
= OUStringToOString(rDump
, RTL_TEXTENCODING_UTF8
);
259 xmlDocUniquePtr
pXmlDoc(xmlParseDoc(reinterpret_cast<const xmlChar
*>(aXmlDump
.getStr())));
262 OString
aPath("//XShape[@text='Oct-12']/Transformation"_ostr
);
263 assertXPath(pXmlDoc
, aPath
, 1);
264 double fT11
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column1"_ostr
).toDouble();
265 double fT12
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column2"_ostr
).toDouble();
266 double fT21
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column1"_ostr
).toDouble();
267 double fT22
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column2"_ostr
).toDouble();
269 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT11
, -fT21
, 1e-8);
270 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT12
, fT22
, 1e-8);
273 OString
aPath("//XShape[@text='Nov-12']/Transformation"_ostr
);
274 assertXPath(pXmlDoc
, aPath
, 1);
275 double fT11
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column1"_ostr
).toDouble();
276 double fT12
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column2"_ostr
).toDouble();
277 double fT21
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column1"_ostr
).toDouble();
278 double fT22
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column2"_ostr
).toDouble();
280 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT11
, -fT21
, 1e-8);
281 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT12
, fT22
, 1e-8);
284 OString
aPath("//XShape[@text='Dec-12']/Transformation"_ostr
);
285 assertXPath(pXmlDoc
, aPath
, 1);
286 double fT11
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column1"_ostr
).toDouble();
287 double fT12
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column2"_ostr
).toDouble();
288 double fT21
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column1"_ostr
).toDouble();
289 double fT22
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column2"_ostr
).toDouble();
291 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT11
, -fT21
, 1e-8);
292 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT12
, fT22
, 1e-8);
295 OString
aPath("//XShape[@text='May-13']/Transformation"_ostr
);
296 assertXPath(pXmlDoc
, aPath
, 1);
297 double fT11
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column1"_ostr
).toDouble();
298 double fT12
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column2"_ostr
).toDouble();
299 double fT21
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column1"_ostr
).toDouble();
300 double fT22
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column2"_ostr
).toDouble();
302 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT11
, -fT21
, 1e-8);
303 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT12
, fT22
, 1e-8);
306 OString
aPath("//XShape[@text='Jan-14']/Transformation"_ostr
);
307 assertXPath(pXmlDoc
, aPath
, 1);
308 double fT11
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column1"_ostr
).toDouble();
309 double fT12
= getXPath(pXmlDoc
, aPath
+ "/Line1", "column2"_ostr
).toDouble();
310 double fT21
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column1"_ostr
).toDouble();
311 double fT22
= getXPath(pXmlDoc
, aPath
+ "/Line2", "column2"_ostr
).toDouble();
313 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT11
, -fT21
, 1e-8);
314 CPPUNIT_ASSERT_DOUBLES_EQUAL(fT12
, fT22
, 1e-8);
318 CPPUNIT_TEST_SUITE_REGISTRATION(Chart2XShapeTest
);
320 CPPUNIT_PLUGIN_IMPLEMENT();
322 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */