Line data Source code
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 :
11 : #include "charttest.hxx"
12 : #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
13 : #include <com/sun/star/chart2/CurveStyle.hpp>
14 : #include <com/sun/star/chart/ErrorBarStyle.hpp>
15 : #include <com/sun/star/chart2/XChartDocument.hpp>
16 : #include <com/sun/star/chart/XChartDocument.hpp>
17 : #include <com/sun/star/chart/XChartData.hpp>
18 : #include <com/sun/star/chart2/XInternalDataProvider.hpp>
19 : #include <com/sun/star/chart/XChartDataArray.hpp>
20 :
21 42 : class Chart2ImportTest : public ChartTest
22 : {
23 : public:
24 : void Fdo60083();
25 : void testSteppedLines();
26 : void testErrorBarRange();
27 : void testODSChartSeries();
28 : void testXLSXChartSeries();
29 : void testXLSChartSeries();
30 : void testODTChartSeries();
31 : void testDOCChartSeries();
32 : void testDOCXChartSeries();
33 : void testPPTXChartSeries();
34 : void testPPTChartSeries();
35 : void testODPChartSeries();
36 : void testBnc864396();
37 : void testSimpleStrictXLSX();
38 :
39 2 : CPPUNIT_TEST_SUITE(Chart2ImportTest);
40 1 : CPPUNIT_TEST(Fdo60083);
41 1 : CPPUNIT_TEST(testSteppedLines);
42 1 : CPPUNIT_TEST(testErrorBarRange);
43 1 : CPPUNIT_TEST(testODSChartSeries);
44 1 : CPPUNIT_TEST(testXLSXChartSeries);
45 1 : CPPUNIT_TEST(testXLSChartSeries);
46 1 : CPPUNIT_TEST(testODTChartSeries);
47 1 : CPPUNIT_TEST(testDOCChartSeries);
48 1 : CPPUNIT_TEST(testDOCXChartSeries);
49 : /*
50 : * Disabling Impress Uts.
51 : * ChartTest::tearDown() calls dispose of mxComponent
52 : * this causes the UT to crash in sd.
53 : * sd::DrawView::Notify tries to reset by calling sd::DrawViewShell::ResetActualPage
54 : */
55 1 : CPPUNIT_TEST(testPPTChartSeries);
56 1 : CPPUNIT_TEST(testPPTXChartSeries);
57 1 : CPPUNIT_TEST(testODPChartSeries);
58 1 : CPPUNIT_TEST(testBnc864396);
59 1 : CPPUNIT_TEST(testSimpleStrictXLSX);
60 2 : CPPUNIT_TEST_SUITE_END();
61 :
62 : private:
63 :
64 : };
65 :
66 : // error bar import
67 : // split method up into smaller chunks for more detailed tests
68 1 : void Chart2ImportTest::Fdo60083()
69 : {
70 1 : load("/chart2/qa/extras/data/ods/", "fdo60083.ods");
71 1 : uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
72 1 : CPPUNIT_ASSERT(xChartDoc.is());
73 :
74 2 : Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
75 1 : CPPUNIT_ASSERT( xDataSeries.is() );
76 :
77 2 : Reference< beans::XPropertySet > xPropSet( xDataSeries, UNO_QUERY_THROW );
78 1 : CPPUNIT_ASSERT( xPropSet.is() );
79 :
80 : // test that y error bars are there
81 2 : Reference< beans::XPropertySet > xErrorBarYProps;
82 1 : xPropSet->getPropertyValue("ErrorBarY") >>= xErrorBarYProps;
83 1 : CPPUNIT_ASSERT(xErrorBarYProps.is());
84 : {
85 : sal_Int32 nErrorBarStyle;
86 2 : CPPUNIT_ASSERT(
87 : xErrorBarYProps->getPropertyValue("ErrorBarStyle")
88 1 : >>= nErrorBarStyle);
89 2 : CPPUNIT_ASSERT_EQUAL(
90 : static_cast<sal_Int32>(chart::ErrorBarStyle::RELATIVE),
91 1 : nErrorBarStyle);
92 :
93 1 : double nVal = 0.0;
94 2 : CPPUNIT_ASSERT(
95 1 : xErrorBarYProps->getPropertyValue("PositiveError") >>= nVal);
96 1 : CPPUNIT_ASSERT_DOUBLES_EQUAL(5.0, nVal, 1e-8);
97 :
98 2 : CPPUNIT_ASSERT(
99 1 : xErrorBarYProps->getPropertyValue("NegativeError") >>= nVal);
100 1 : CPPUNIT_ASSERT_DOUBLES_EQUAL(5.0, nVal, 1e-8);
101 :
102 : bool bVal;
103 2 : CPPUNIT_ASSERT(
104 1 : xErrorBarYProps->getPropertyValue("ShowPositiveError") >>= bVal);
105 1 : CPPUNIT_ASSERT_EQUAL(bVal, true);
106 :
107 2 : CPPUNIT_ASSERT(
108 1 : xErrorBarYProps->getPropertyValue("ShowNegativeError") >>= bVal);
109 1 : CPPUNIT_ASSERT_EQUAL(bVal, true);
110 : }
111 :
112 : // test that x error bars are not imported
113 2 : Reference< beans::XPropertySet > xErrorBarXProps;
114 1 : xPropSet->getPropertyValue("ErrorBarX") >>= xErrorBarXProps;
115 2 : CPPUNIT_ASSERT(!xErrorBarXProps.is());
116 1 : }
117 :
118 1 : void Chart2ImportTest::testErrorBarRange()
119 : {
120 1 : load("/chart2/qa/extras/data/ods/", "error_bar_range.ods");
121 1 : uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
122 1 : CPPUNIT_ASSERT(xChartDoc.is());
123 :
124 2 : Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
125 1 : CPPUNIT_ASSERT( xDataSeries.is() );
126 :
127 2 : Reference< beans::XPropertySet > xPropSet( xDataSeries, UNO_QUERY_THROW );
128 1 : CPPUNIT_ASSERT( xPropSet.is() );
129 :
130 : // test that y error bars are there
131 2 : Reference< beans::XPropertySet > xErrorBarYProps;
132 1 : xPropSet->getPropertyValue("ErrorBarY") >>= xErrorBarYProps;
133 1 : CPPUNIT_ASSERT(xErrorBarYProps.is());
134 :
135 : sal_Int32 nErrorBarStyle;
136 2 : CPPUNIT_ASSERT(
137 : xErrorBarYProps->getPropertyValue("ErrorBarStyle")
138 1 : >>= nErrorBarStyle);
139 2 : CPPUNIT_ASSERT_EQUAL(
140 : static_cast<sal_Int32>(chart::ErrorBarStyle::FROM_DATA),
141 1 : nErrorBarStyle);
142 :
143 2 : OUString aRangePos;
144 1 : CPPUNIT_ASSERT(xErrorBarYProps->getPropertyValue("ErrorBarRangePositive") >>= aRangePos);
145 2 : CPPUNIT_ASSERT_EQUAL(aRangePos, OUString("$Sheet1.$C$2:$C$4"));
146 1 : }
147 :
148 : // stepped line interpolation
149 1 : void Chart2ImportTest::testSteppedLines()
150 : {
151 1 : const sal_Int32 MAXSHEET = 14;
152 : chart2::CurveStyle curveStyle[] = {
153 : chart2::CurveStyle_LINES,
154 : chart2::CurveStyle_CUBIC_SPLINES,
155 : chart2::CurveStyle_B_SPLINES,
156 : chart2::CurveStyle_STEP_START,
157 : chart2::CurveStyle_STEP_END,
158 : chart2::CurveStyle_STEP_CENTER_X,
159 : chart2::CurveStyle_STEP_CENTER_Y,
160 : chart2::CurveStyle_LINES,
161 : chart2::CurveStyle_CUBIC_SPLINES,
162 : chart2::CurveStyle_B_SPLINES,
163 : chart2::CurveStyle_STEP_START,
164 : chart2::CurveStyle_STEP_END,
165 : chart2::CurveStyle_STEP_CENTER_X,
166 : chart2::CurveStyle_STEP_CENTER_Y
167 1 : };
168 :
169 1 : load("/chart2/qa/extras/data/ods/", "stepped_lines.ods");
170 15 : for(sal_Int32 nSheet = 0; nSheet < MAXSHEET; ++nSheet)
171 : {
172 14 : uno::Reference< chart2::XChartDocument > xChart2Doc = getChartDocFromSheet( nSheet, mxComponent );
173 14 : CPPUNIT_ASSERT(xChart2Doc.is());
174 :
175 28 : Reference< chart2::XChartType > xChartType = getChartTypeFromDoc( xChart2Doc, 0 );
176 14 : CPPUNIT_ASSERT(xChartType.is());
177 :
178 28 : Reference< beans::XPropertySet > xPropSet( xChartType, UNO_QUERY );
179 14 : CPPUNIT_ASSERT(xPropSet.is());
180 :
181 : chart2::CurveStyle eCurveStyle;
182 14 : xPropSet->getPropertyValue("CurveStyle") >>= eCurveStyle;
183 14 : CPPUNIT_ASSERT_EQUAL(eCurveStyle, curveStyle[nSheet]);
184 14 : }
185 1 : }
186 :
187 3 : uno::Sequence < OUString > getChartColumnDescriptions( uno::Reference< chart::XChartDocument > xChart1Doc)
188 : {
189 3 : CPPUNIT_ASSERT(xChart1Doc.is());
190 3 : uno::Reference< chart::XChartDataArray > xChartData ( xChart1Doc->getData(), UNO_QUERY_THROW);
191 3 : CPPUNIT_ASSERT(xChartData.is());
192 3 : uno::Sequence < OUString > seriesList = xChartData->getColumnDescriptions();
193 3 : return seriesList;
194 : }
195 :
196 1 : void Chart2ImportTest::testODSChartSeries()
197 : {
198 1 : load("/chart2/qa/extras/data/ods/", "chart.ods");
199 1 : uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW);
200 2 : uno::Sequence < OUString > seriesList = getChartColumnDescriptions( xChart1Doc);
201 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]);
202 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col2"), seriesList[1]);
203 2 : CPPUNIT_ASSERT_EQUAL(OUString("Col 33"), seriesList[2]);
204 :
205 1 : }
206 :
207 1 : void Chart2ImportTest::testXLSXChartSeries()
208 : {
209 1 : load("/chart2/qa/extras/data/xlsx/", "chart.xlsx");
210 1 : uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW);
211 2 : uno::Sequence < OUString > seriesList = getChartColumnDescriptions(xChart1Doc );
212 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]);
213 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col2"), seriesList[1]);
214 2 : CPPUNIT_ASSERT_EQUAL(OUString("Col 33"), seriesList[2]);
215 :
216 1 : }
217 :
218 1 : void Chart2ImportTest::testXLSChartSeries()
219 : {
220 1 : load("/chart2/qa/extras/data/xls/", "chart.xls");
221 1 : uno::Reference< chart::XChartDocument > xChart1Doc ( getChartCompFromSheet( 0, mxComponent ), UNO_QUERY_THROW);
222 2 : uno::Sequence < OUString > seriesList = getChartColumnDescriptions(xChart1Doc );
223 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col 1"), seriesList[0]);
224 1 : CPPUNIT_ASSERT_EQUAL(OUString("Col 2"), seriesList[1]);
225 2 : CPPUNIT_ASSERT_EQUAL(OUString("Col 3"), seriesList[2]);
226 :
227 1 : }
228 :
229 1 : void Chart2ImportTest::testODTChartSeries()
230 : {
231 1 : load("/chart2/qa/extras/data/odt/", "chart.odt");
232 1 : uno::Sequence< OUString > seriesList = getWriterChartColumnDescriptions(mxComponent);
233 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]);
234 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]);
235 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]);
236 :
237 1 : }
238 :
239 1 : void Chart2ImportTest::testDOCChartSeries()
240 : {
241 1 : load("/chart2/qa/extras/data/doc/", "chart.doc");
242 1 : uno::Sequence< OUString > seriesList = getWriterChartColumnDescriptions(mxComponent);
243 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]);
244 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]);
245 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]);
246 1 : }
247 :
248 1 : void Chart2ImportTest::testDOCXChartSeries()
249 : {
250 1 : load("/chart2/qa/extras/data/docx/", "chart.docx");
251 1 : uno::Sequence< OUString > seriesList = getWriterChartColumnDescriptions(mxComponent);
252 1 : CPPUNIT_ASSERT_EQUAL(OUString("Series 1"), seriesList[0]);
253 1 : CPPUNIT_ASSERT_EQUAL(OUString("Series 2"), seriesList[1]);
254 1 : CPPUNIT_ASSERT_EQUAL(OUString("Series 3"), seriesList[2]);
255 1 : }
256 :
257 1 : void Chart2ImportTest::testPPTChartSeries()
258 : {
259 : //test chart series names for ppt
260 1 : uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions("/chart2/qa/extras/data/ppt/", "chart.ppt");
261 :
262 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]);
263 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]);
264 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]);
265 :
266 1 : }
267 :
268 1 : void Chart2ImportTest::testPPTXChartSeries()
269 : {
270 : //test chart series names for pptx
271 1 : uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions("/chart2/qa/extras/data/pptx/", "chart.pptx");
272 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[1]);
273 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[2]);
274 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[3]);
275 :
276 1 : }
277 :
278 1 : void Chart2ImportTest::testODPChartSeries()
279 : {
280 : //test chart series names for odp
281 1 : uno::Sequence < OUString > seriesList = getImpressChartColumnDescriptions("/chart2/qa/extras/data/odp/", "chart.odp");
282 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 1"), seriesList[0]);
283 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 2"), seriesList[1]);
284 1 : CPPUNIT_ASSERT_EQUAL(OUString("Column 3"), seriesList[2]);
285 :
286 1 : }
287 :
288 1 : void Chart2ImportTest::testBnc864396()
289 : {
290 1 : uno::Reference< chart2::XChartDocument > xChartDoc(getChartDocFromImpress("/chart2/qa/extras/data/pptx/", "bnc864396.pptx"), uno::UNO_QUERY_THROW);
291 1 : CPPUNIT_ASSERT(xChartDoc->hasInternalDataProvider());
292 :
293 2 : uno::Reference< chart2::XInternalDataProvider > xDataProvider( xChartDoc->getDataProvider(), uno::UNO_QUERY_THROW );
294 2 : uno::Reference< chart::XChartDataArray > xChartDataArray(xDataProvider, uno::UNO_QUERY_THROW);
295 2 : uno::Sequence< OUString > aRowLabels = xChartDataArray->getRowDescriptions();
296 4 : for(sal_Int32 i = 0; i < aRowLabels.getLength(); ++i)
297 : {
298 3 : OUString aExpected = OUString("cat") + OUString::number(i+1);
299 3 : CPPUNIT_ASSERT_EQUAL(aExpected, aRowLabels[i]);
300 4 : }
301 1 : }
302 :
303 1 : void Chart2ImportTest::testSimpleStrictXLSX()
304 : {
305 1 : load("/chart2/qa/extras/data/xlsx/", "strict_chart.xlsx");
306 1 : uno::Reference< chart2::XChartDocument > xChartDoc = getChartDocFromSheet( 0, mxComponent );
307 1 : CPPUNIT_ASSERT(xChartDoc.is());
308 :
309 2 : Reference< chart2::XDataSeries > xDataSeries = getDataSeriesFromDoc( xChartDoc, 0 );
310 2 : CPPUNIT_ASSERT(xDataSeries.is());
311 :
312 1 : }
313 :
314 1 : CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest);
315 :
316 4 : CPPUNIT_PLUGIN_IMPLEMENT();
317 :
318 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|