xref: /AOO41X/test/testuno/source/fvt/uno/sd/chart/ChartData.java (revision eba4d44a33e5be0b2528d5a9a6f0dcbf65adaa0d)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 package fvt.uno.sd.chart;
22 
23 import static org.junit.Assert.assertEquals;
24 
25 import org.junit.After;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.openoffice.test.common.FileUtil;
29 import org.openoffice.test.common.Testspace;
30 import org.openoffice.test.uno.UnoApp;
31 
32 import testlib.uno.ChartUtil;
33 import testlib.uno.PageUtil;
34 import testlib.uno.ShapeUtil;
35 import testlib.uno.TestUtil;
36 
37 import com.sun.star.awt.FontRelief;
38 import com.sun.star.awt.FontUnderline;
39 import com.sun.star.awt.FontWeight;
40 import com.sun.star.awt.Gradient;
41 import com.sun.star.awt.GradientStyle;
42 import com.sun.star.awt.Point;
43 import com.sun.star.awt.Size;
44 import com.sun.star.beans.PropertyValue;
45 import com.sun.star.beans.XPropertySet;
46 import com.sun.star.chart.ChartDataCaption;
47 import com.sun.star.chart.ChartLegendPosition;
48 import com.sun.star.chart.XAxisYSupplier;
49 import com.sun.star.chart.XChartData;
50 import com.sun.star.chart.XChartDataArray;
51 import com.sun.star.chart.XChartDocument;
52 import com.sun.star.chart.XDiagram;
53 import com.sun.star.chart2.data.XDataSource;
54 import com.sun.star.chart2.data.XLabeledDataSequence;
55 import com.sun.star.drawing.DashStyle;
56 import com.sun.star.drawing.FillStyle;
57 import com.sun.star.drawing.LineDash;
58 import com.sun.star.drawing.LineStyle;
59 import com.sun.star.drawing.XDrawPage;
60 import com.sun.star.drawing.XDrawPages;
61 import com.sun.star.drawing.XDrawPagesSupplier;
62 import com.sun.star.drawing.XShape;
63 import com.sun.star.drawing.XShapes;
64 import com.sun.star.frame.XStorable;
65 import com.sun.star.lang.XComponent;
66 import com.sun.star.presentation.XPresentation;
67 import com.sun.star.presentation.XPresentationSupplier;
68 import com.sun.star.uno.AnyConverter;
69 import com.sun.star.uno.UnoRuntime;
70 import com.sun.star.util.XCloseable;
71 import com.sun.star.util.XModifiable;
72 
73 public class ChartData {
74     UnoApp unoApp = new UnoApp();
75     XPresentationSupplier sdDocument = null;
76     XPresentation pre = null;
77     XComponent precomp = null;
78     XComponent impressDocument = null;
79     XComponent reLoadFile = null;
80     XDrawPagesSupplier drawsupplier = null;
81     XDrawPages drawpages = null;
82     XShapes xShapes = null;
83     XDrawPage xpage = null;
84     String filePath = null;
85     XChartDocument xChartDoc = null;
86     com.sun.star.chart2.XChartDocument xChart2Doc = null;
87 
88     @Before
setUp()89     public void setUp() throws Exception {
90         unoApp.start();
91         createDocumentAndSlide();
92     }
93 
94     @After
tearDown()95     public void tearDown() throws Exception {
96         unoApp.closeDocument(impressDocument);
97         unoApp.closeDocument(reLoadFile);
98         unoApp.close();
99          if (filePath != null)
100          FileUtil.deleteFile(filePath);
101     }
102 
103     /**
104      * create a new presentation document and insert a new slide.
105      *
106      * @throws Exception
107      */
createDocumentAndSlide()108     public void createDocumentAndSlide() throws Exception {
109         impressDocument = (XComponent) UnoRuntime.queryInterface(
110                 XComponent.class, unoApp.newDocument("simpress"));
111         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
112                 XDrawPagesSupplier.class, impressDocument);
113         drawpages = drawsupplier.getDrawPages();
114         drawpages.insertNewByIndex(1);
115         xpage = PageUtil.getDrawPageByIndex(impressDocument, 1);
116     }
117 
118     /**
119      * Insert default Column Chart to slide.
120      *
121      * @return
122      * @throws Exception
123      */
insertDefaultChart()124     public XChartDocument insertDefaultChart() throws Exception {
125         Point po = new Point(1000, 1000);
126         xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
127         XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
128                 15000, 9271), "com.sun.star.drawing.OLE2Shape");
129         xShapes.add(xShape);
130         xChartDoc = ChartUtil.retrieveChartDocument(xShape);
131         return xChartDoc;
132     }
133 
134     /**
135      * test data series
136      * @throws Exception
137      */
138     @Test
testDataSeries()139     public void testDataSeries() throws Exception {
140         XShape xShape = null;
141         insertDefaultChart();
142         // get the second data series.
143         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
144                 XPropertySet.class, xChartDoc.getDiagram()
145                         .getDataRowProperties(1));
146         aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID);
147         aDiaProp.setPropertyValue("FillColor", 0xffff00);
148         // --------------------------
149         xShape = saveAndLoadShape(1, 0);
150         xChartDoc = ChartUtil.getChartDocument(xShape);
151         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
152                 xChartDoc.getDiagram().getDataRowProperties(1));
153         assertEquals("the second DataSeries fill color isn't yellow", 0xffff00,
154                 aDiaProp.getPropertyValue("FillColor"));
155 
156     }
157     /**
158      * test data point
159      * @throws Exception
160      */
161     @Test
testDataPoint()162     public void testDataPoint() throws Exception {
163         XShape xShape = null;
164         insertDefaultChart();
165         // set data label to the fourth points, the second series.
166         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
167                 XPropertySet.class, xChartDoc.getDiagram()
168                         .getDataPointProperties(3, 1));
169         aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID);
170         aDiaProp.setPropertyValue("FillColor", 0xffff00);
171         // --------------------------
172         xShape = saveAndLoadShape(1, 0);
173         xChartDoc = ChartUtil.getChartDocument(xShape);
174         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
175                 xChartDoc.getDiagram().getDataPointProperties(3, 1));
176 
177         assertEquals(
178                 "the fourth point of the second series's fill color isn't yellow",
179                 0xffff00, aDiaProp.getPropertyValue("FillColor"));
180 
181     }
182     /**
183      * test data of chart, update it with chart
184      * @throws Exception
185      */
186     @Test
testDataTable()187     public void testDataTable() throws Exception {
188         XShape xShape = null;
189         insertDefaultChart();
190         // get data object from chart
191         XChartDataArray array = (XChartDataArray) UnoRuntime.queryInterface(
192                 XChartDataArray.class, xChartDoc.getData());
193 
194         // set new chart data
195         double[][] data = new double[][] { { 2, 2 }, { 2, 2 }, { 2, 2 } };
196         array.setData(data);
197         // update chart with data
198         xChartDoc.attachData(xChartDoc.getData());
199         // --------------------------
200         xShape = saveAndLoadShape(1, 0);
201         xChartDoc = ChartUtil.getChartDocument(xShape);
202         array = (XChartDataArray) UnoRuntime.queryInterface(
203                 XChartDataArray.class, xChartDoc.getData());
204         data = array.getData();
205         assertEquals(2, data[0][0], 0.0);
206 
207     }
208 
209     /**
210      * Save presentation and reLoad the presentation and shape in it.
211      *
212      * @param po
213      * @param shapeType
214      * @return
215      * @throws Exception
216      */
saveAndLoadShape(int pageIndex, int shapeIndex)217     public XShape saveAndLoadShape(int pageIndex, int shapeIndex)
218             throws Exception {
219         reLoadFile = saveAsAndReloadDoc(impressDocument, "impress8", "odp");
220         xShapes = ShapeUtil.getShapes(reLoadFile, pageIndex);
221         return (XShape) UnoRuntime.queryInterface(XShape.class,
222                 xShapes.getByIndex(shapeIndex));
223     }
224 
225     /**
226      * save and reload Presentation document.
227      *
228      * @param presentationDocument
229      * @param sFilter
230      * @param sExtension
231      * @return
232      * @throws Exception
233      */
saveAsAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)234     private XComponent saveAsAndReloadDoc(XComponent presentationDocument,
235             String sFilter, String sExtension) throws Exception {
236         filePath = Testspace.getPath("tmp/chartdata." + sExtension);
237         PropertyValue[] aStoreProperties = new PropertyValue[2];
238         aStoreProperties[0] = new PropertyValue();
239         aStoreProperties[1] = new PropertyValue();
240         aStoreProperties[0].Name = "Override";
241         aStoreProperties[0].Value = true;
242         aStoreProperties[1].Name = "FilterName";
243         aStoreProperties[1].Value = sFilter;
244         XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
245                 XStorable.class, presentationDocument);
246         xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
247 
248         return (XComponent) UnoRuntime.queryInterface(XComponent.class,
249                 unoApp.loadDocument(filePath));
250     }
251 
252 }
253