xref: /AOO41X/test/testuno/source/fvt/uno/sd/chart/ChartProperties.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.Point;
41 import com.sun.star.awt.Size;
42 import com.sun.star.beans.PropertyValue;
43 import com.sun.star.beans.XPropertySet;
44 import com.sun.star.chart.ChartDataCaption;
45 import com.sun.star.chart.ChartLegendPosition;
46 import com.sun.star.chart.XAxisYSupplier;
47 import com.sun.star.chart.XChartDocument;
48 import com.sun.star.chart.XDiagram;
49 import com.sun.star.drawing.FillStyle;
50 import com.sun.star.drawing.LineStyle;
51 import com.sun.star.drawing.XDrawPage;
52 import com.sun.star.drawing.XDrawPages;
53 import com.sun.star.drawing.XDrawPagesSupplier;
54 import com.sun.star.drawing.XShape;
55 import com.sun.star.drawing.XShapes;
56 import com.sun.star.frame.XStorable;
57 import com.sun.star.lang.XComponent;
58 import com.sun.star.presentation.XPresentation;
59 import com.sun.star.presentation.XPresentationSupplier;
60 import com.sun.star.uno.UnoRuntime;
61 import com.sun.star.util.XCloseable;
62 import com.sun.star.util.XModifiable;
63 
64 public class ChartProperties {
65     UnoApp unoApp = new UnoApp();
66     XPresentationSupplier sdDocument = null;
67     XPresentation pre = null;
68     XComponent precomp = null;
69     XComponent impressDocument = null;
70     XComponent reLoadFile = null;
71     XDrawPagesSupplier drawsupplier = null;
72     XDrawPages drawpages = null;
73     XShapes xShapes = null;
74     XDrawPage xpage = null;
75     String filePath = null;
76     XChartDocument xChartDoc = null;
77     com.sun.star.chart2.XChartDocument xChart2Doc = null;
78 
79     @Before
setUp()80     public void setUp() throws Exception {
81         unoApp.start();
82         createDocumentAndSlide();
83     }
84 
85     @After
tearDown()86     public void tearDown() throws Exception {
87         unoApp.closeDocument(impressDocument);
88         unoApp.closeDocument(reLoadFile);
89         unoApp.close();
90          if (filePath != null)
91          FileUtil.deleteFile(filePath);
92     }
93 
94     /**
95      * create a new presentation document and insert a new slide.
96      *
97      * @throws Exception
98      */
createDocumentAndSlide()99     public void createDocumentAndSlide() throws Exception {
100         impressDocument = (XComponent) UnoRuntime.queryInterface(
101                 XComponent.class, unoApp.newDocument("simpress"));
102         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
103                 XDrawPagesSupplier.class, impressDocument);
104         drawpages = drawsupplier.getDrawPages();
105         drawpages.insertNewByIndex(1);
106         xpage = PageUtil.getDrawPageByIndex(impressDocument, 1);
107     }
108 
109     /**
110      * Insert default Column Chart to slide.
111      *
112      * @return
113      * @throws Exception
114      */
insertDefaultChart()115     public XChartDocument insertDefaultChart() throws Exception {
116         Point po = new Point(1000, 1000);
117         xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
118         XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
119                 15000, 9271), "com.sun.star.drawing.OLE2Shape");
120         xShapes.add(xShape);
121         xChartDoc = ChartUtil.retrieveChartDocument(xShape);
122         return xChartDoc;
123     }
124 
125     /**
126      * Insert default Column Chart2 to slide.
127      *
128      * @return
129      * @throws Exception
130      */
insertDefaultChart2()131     public com.sun.star.chart2.XChartDocument insertDefaultChart2()
132             throws Exception {
133         Point po = new Point(1000, 1000);
134         xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
135         XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
136                 15000, 9271), "com.sun.star.drawing.OLE2Shape");
137         xShapes.add(xShape);
138         xChart2Doc = ChartUtil.retrieveChart2Document(xShape);
139         return xChart2Doc;
140     }
141 
142     // --------------Chart Area----------------------
143     /**
144      * test Chart Area properties about Border Line
145      *
146      * @throws Exception
147      */
148     @Test
testAreaBordersProperties()149     public void testAreaBordersProperties() throws Exception {
150         XShape xShape = null;
151         insertDefaultChart();
152         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
153                 XPropertySet.class, xChartDoc.getArea());
154         aDiaProp.setPropertyValue("LineStyle", LineStyle.DASH);
155         aDiaProp.setPropertyValue("LineColor", 0x00ff00);
156 
157         // --------------------------
158         xShape = saveAndLoadShape(1, 0);
159         xChartDoc = ChartUtil.getChartDocument(xShape);
160         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
161                 xChartDoc.getArea());
162         // ----------------------------
163         assertEquals("Not Dash Line Style", LineStyle.DASH,
164                 aDiaProp.getPropertyValue("LineStyle"));
165         assertEquals("Not Yellow Line", 0x00ff00,
166                 aDiaProp.getPropertyValue("LineColor"));
167 
168     }
169 
170     /**
171      * test Area Properties about Gradient Fill
172      * @throws Exception
173      */
174     @Test
testAreaFillProperties()175     public void testAreaFillProperties() throws Exception {
176         XShape xShape = null;
177         insertDefaultChart();
178         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
179                 XPropertySet.class, xChartDoc.getArea());
180         aDiaProp.setPropertyValue("FillStyle", FillStyle.GRADIENT);
181         aDiaProp.setPropertyValue("FillGradientName", "Radial red/yellow");
182         // --------------------------
183         xShape = saveAndLoadShape(1, 0);
184         xChartDoc = ChartUtil.getChartDocument(xShape);
185         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
186                 xChartDoc.getArea());
187         // ----------------------------
188         assertEquals("Not Gradient Fill Style", FillStyle.GRADIENT,
189                 aDiaProp.getPropertyValue("FillStyle"));
190         assertEquals("Not Radial red/yellow Gradient", "Radial red/yellow",
191                 aDiaProp.getPropertyValue("FillGradientName"));
192 
193     }
194 
195     /**
196      * test Area properties about Transparency
197      * @throws Exception
198      */
199     @Test
testAreaTransparencyProperties()200     public void testAreaTransparencyProperties() throws Exception {
201         XShape xShape = null;
202         insertDefaultChart();
203         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
204                 XPropertySet.class, xChartDoc.getArea());
205         aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID);
206         aDiaProp.setPropertyValue("FillColor", 0xffff00);
207         aDiaProp.setPropertyValue("FillTransparence", 50);
208         // --------------------------
209         xShape = saveAndLoadShape(1, 0);
210         xChartDoc = ChartUtil.getChartDocument(xShape);
211         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
212                 xChartDoc.getArea());
213         // ----------------------------
214         assertEquals("Area Fill Transparency is not 50%", new Short("50"),
215                 aDiaProp.getPropertyValue("FillTransparence"));
216 
217     }
218 
219     // ------------Chart Legend-------------------
220     /**
221      * test Legend Border Line Properties
222      * @throws Exception
223      */
224     @Test
testLegendBorderProperties()225     public void testLegendBorderProperties() throws Exception {
226         XShape xShape = null;
227         insertDefaultChart();
228         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
229                 XPropertySet.class, xChartDoc.getLegend());
230         aDiaProp.setPropertyValue("LineStyle", LineStyle.DASH);
231         aDiaProp.setPropertyValue("LineColor", 0x00ff00);
232         // --------------------------
233         xShape = saveAndLoadShape(1, 0);
234         xChartDoc = ChartUtil.getChartDocument(xShape);
235         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
236                 xChartDoc.getLegend());
237         // ----------------------------
238         assertEquals("Not Dash Line Style", LineStyle.DASH,
239                 aDiaProp.getPropertyValue("LineStyle"));
240         assertEquals("Not Yellow Line", 0x00ff00,
241                 aDiaProp.getPropertyValue("LineColor"));
242 
243     }
244 
245     /**
246      * test Legend Fill and transparence properties
247      * @throws Exception
248      */
249     @Test
testLegendFillAndTransparence()250     public void testLegendFillAndTransparence() throws Exception {
251         XShape xShape = null;
252         insertDefaultChart();
253         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
254                 XPropertySet.class, xChartDoc.getLegend());
255         aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID);
256         aDiaProp.setPropertyValue("FillColor", 0xffff00);
257         aDiaProp.setPropertyValue("FillTransparence", 50);
258         // --------------------------
259         xShape = saveAndLoadShape(1, 0);
260         xChartDoc = ChartUtil.getChartDocument(xShape);
261         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
262                 xChartDoc.getLegend());
263         // ----------------------------
264 
265         assertEquals("Area Fill Transparency is not 50%", new Short("50"),
266                 aDiaProp.getPropertyValue("FillTransparence"));
267 
268     }
269 
270     /**
271      * test Legend Char Font
272      * @throws Exception
273      */
274     @Test
testLegendCharFont()275     public void testLegendCharFont() throws Exception {
276         XShape xShape = null;
277         insertDefaultChart();
278         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
279                 XPropertySet.class, xChartDoc.getLegend());
280         aDiaProp.setPropertyValue("CharFontName", "Arial");
281         aDiaProp.setPropertyValue("CharWeight", FontWeight.BOLD);
282         // --------------------------
283         xShape = saveAndLoadShape(1, 0);
284         xChartDoc = ChartUtil.getChartDocument(xShape);
285         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
286                 xChartDoc.getLegend());
287         // ----------------------------
288         assertEquals("Legend font name is not Arial", "Arial",
289                 aDiaProp.getPropertyValue("CharFontName"));
290         assertEquals("Legend font weight is not BOLD", FontWeight.BOLD,
291                 aDiaProp.getPropertyValue("CharWeight"));
292 
293     }
294 
295     /**
296      * test Legend Char Font Effects
297      * @throws Exception
298      */
299     @Test
testLegendCharFontEffects()300     public void testLegendCharFontEffects() throws Exception {
301         XShape xShape = null;
302         insertDefaultChart();
303         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
304                 XPropertySet.class, xChartDoc.getLegend());
305         aDiaProp.setPropertyValue("CharColor", 0xffff00);
306         aDiaProp.setPropertyValue("CharUnderline", FontUnderline.DOUBLE);
307         aDiaProp.setPropertyValue("CharUnderlineColor", 0xffff00);
308         aDiaProp.setPropertyValue("CharRelief", FontRelief.ENGRAVED);
309 
310         // --------------------------
311         xShape = saveAndLoadShape(1, 0);
312         xChartDoc = ChartUtil.getChartDocument(xShape);
313         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
314                 xChartDoc.getLegend());
315         // ----------------------------
316         assertEquals("Legend font color is not yellow", 0xffff00,
317                 aDiaProp.getPropertyValue("CharColor"));
318         assertEquals("Legend font underline is not DOUBLE",
319                 FontUnderline.DOUBLE,
320                 aDiaProp.getPropertyValue("CharUnderline"));
321         assertEquals("Legend font underline color is not yellow", 0xffff00,
322                 aDiaProp.getPropertyValue("CharUnderlineColor"));
323         assertEquals("Legend font relief is not engraved", FontRelief.ENGRAVED,
324                 aDiaProp.getPropertyValue("CharRelief"));
325 
326     }
327 
328     /**
329      * test Legend Position in Chart
330      * @throws Exception
331      */
332     @Test
testLegendposition()333     public void testLegendposition() throws Exception {
334         XShape xShape = null;
335         insertDefaultChart();
336         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
337                 XPropertySet.class, xChartDoc.getLegend());
338         aDiaProp.setPropertyValue("Alignment", ChartLegendPosition.LEFT);
339 
340         // --------------------------
341         xShape = saveAndLoadShape(1, 0);
342         xChartDoc = ChartUtil.getChartDocument(xShape);
343         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
344                 xChartDoc.getLegend());
345         // ----------------------------
346         assertEquals("Legend position is not left", ChartLegendPosition.LEFT,
347                 aDiaProp.getPropertyValue("Alignment"));
348 
349     }
350 
351     // --------------Chart Title---------------
352     /**
353      * test Addition and Modification of Title and subTitle
354      * @throws Exception
355      */
356     @Test
testTitleAndSubTitle()357     public void testTitleAndSubTitle() throws Exception {
358         XShape xShape = null;
359         insertDefaultChart();
360         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
361                 XPropertySet.class, xChartDoc.getTitle());
362         aDiaProp.setPropertyValue("String", "TestTitle");
363         XPropertySet aDiaProp2 = (XPropertySet) UnoRuntime.queryInterface(
364                 XPropertySet.class, xChartDoc.getSubTitle());
365         aDiaProp2.setPropertyValue("String", "TestSubTitle");
366         // save and load shape
367         xShape = saveAndLoadShape(1, 0);
368         xChartDoc = ChartUtil.getChartDocument(xShape);
369         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
370                 xChartDoc.getTitle());
371         aDiaProp2 = (XPropertySet) UnoRuntime.queryInterface(
372                 XPropertySet.class, xChartDoc.getSubTitle());
373         assertEquals("Chart title is wrong", "TestTitle",
374                 aDiaProp.getPropertyValue("String"));
375         assertEquals("Chart sub title is wrong", "TestSubTitle",
376                 aDiaProp2.getPropertyValue("String"));
377         // modify title and subtitle
378         aDiaProp.setPropertyValue("String", "AnotherTestTitle");
379         aDiaProp2.setPropertyValue("String", "AnotherTestSubTitle");
380 
381         // close document and save modification.
382         XModifiable modified = (XModifiable) UnoRuntime.queryInterface(
383                 XModifiable.class, impressDocument);
384         XCloseable closer = (XCloseable) UnoRuntime.queryInterface(
385                 XCloseable.class, impressDocument);
386         if (modified != null)
387             modified.setModified(true);
388         closer.close(true);
389 
390         // load and get Chart
391         impressDocument = (XComponent) UnoRuntime.queryInterface(XComponent.class,
392                 unoApp.loadDocument(filePath));
393         xShapes = ShapeUtil.getShapes(reLoadFile, 1);
394         xShape = (XShape) UnoRuntime.queryInterface(XShape.class,
395                 xShapes.getByIndex(0));
396         xChartDoc = ChartUtil.getChartDocument(xShape);
397         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
398                 xChartDoc.getTitle());
399         aDiaProp2 = (XPropertySet) UnoRuntime.queryInterface(
400                 XPropertySet.class, xChartDoc.getSubTitle());
401         assertEquals("Chart title is wrong", "AnotherTestTitle",
402                 aDiaProp.getPropertyValue("String"));
403         assertEquals("Chart sub title is wrong", "AnotherTestSubTitle",
404                 aDiaProp2.getPropertyValue("String"));
405     }
406 
407     /**
408      * test Data label and show it as value
409      * @throws Exception
410      */
411     @Test
testDataLabel()412     public void testDataLabel() throws Exception {
413         XShape xShape = null;
414         insertDefaultChart();
415         // set data label to the fourth points, the second series.
416         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
417                 XPropertySet.class, xChartDoc.getDiagram()
418                         .getDataPointProperties(3, 1));
419         aDiaProp.setPropertyValue("DataCaption", ChartDataCaption.VALUE);
420 
421         // --------------------------
422         xShape = saveAndLoadShape(1, 0);
423         xChartDoc = ChartUtil.getChartDocument(xShape);
424         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
425                 xChartDoc.getDiagram().getDataPointProperties(3, 1));
426 
427         assertEquals(
428                 "Data label of fourth points, the second series not show as value",
429                 ChartDataCaption.VALUE,
430                 aDiaProp.getPropertyValue("DataCaption"));
431 
432     }
433 
434     /**
435      * test GridLine of Y Axis.
436      * @throws Exception
437      */
438     @Test
testGridLine()439     public void testGridLine() throws Exception {
440         XShape xShape = null;
441         insertDefaultChart();
442         XDiagram xdiagram = xChartDoc.getDiagram();
443         // get Y axis
444         XAxisYSupplier aYAxisSupplier = (XAxisYSupplier) UnoRuntime
445                 .queryInterface(XAxisYSupplier.class, xdiagram);
446         // get Y axis's gridline
447         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
448                 XPropertySet.class, aYAxisSupplier.getYMainGrid());
449         aDiaProp.setPropertyValue("LineColor", 0xffff00);
450 
451         // --------------------------
452         xShape = saveAndLoadShape(1, 0);
453         xChartDoc = ChartUtil.getChartDocument(xShape);
454         xdiagram = xChartDoc.getDiagram();
455         aYAxisSupplier = (XAxisYSupplier) UnoRuntime.queryInterface(
456                 XAxisYSupplier.class, xdiagram);
457         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
458                 aYAxisSupplier.getYMainGrid());
459         assertEquals("the Y grid line color is not yellow", 0xffff00,
460                 aDiaProp.getPropertyValue("LineColor"));
461     }
462 
463     /**
464      * test Wall Fill properties
465      * @throws Exception
466      */
467     @Test
testWall()468     public void testWall() throws Exception {
469         XShape xShape = null;
470         insertDefaultChart2();
471         com.sun.star.chart2.XDiagram xDiagram2 = xChart2Doc.getFirstDiagram();
472         XPropertySet aDiaProp = (XPropertySet) UnoRuntime.queryInterface(
473                 XPropertySet.class, xDiagram2.getWall());
474         aDiaProp.setPropertyValue("FillStyle", FillStyle.SOLID);
475         aDiaProp.setPropertyValue("FillColor", 0xffff00);
476         // --------------------------
477         xShape = saveAndLoadShape(1, 0);
478         xChart2Doc = ChartUtil.getChart2Document(xShape);
479         xDiagram2 = xChart2Doc.getFirstDiagram();
480         aDiaProp = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
481                 xDiagram2.getWall());
482         assertEquals("the Chart wall is not yellow", 0xffff00,
483                 aDiaProp.getPropertyValue("FillColor"));
484     }
485 
486     /**
487      * Save presentation and reLoad the presentation and shape in it.
488      *
489      * @param po
490      * @param shapeType
491      * @return
492      * @throws Exception
493      */
saveAndLoadShape(int pageIndex, int shapeIndex)494     public XShape saveAndLoadShape(int pageIndex, int shapeIndex)
495             throws Exception {
496         reLoadFile = saveAsAndReloadDoc(impressDocument, "impress8", "odp");
497         xShapes = ShapeUtil.getShapes(reLoadFile, pageIndex);
498         return (XShape) UnoRuntime.queryInterface(XShape.class,
499                 xShapes.getByIndex(shapeIndex));
500     }
501 
502     /**
503      * save and reload Presentation document.
504      *
505      * @param presentationDocument
506      * @param sFilter
507      * @param sExtension
508      * @return
509      * @throws Exception
510      */
saveAsAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)511     private XComponent saveAsAndReloadDoc(XComponent presentationDocument,
512             String sFilter, String sExtension) throws Exception {
513         filePath = Testspace.getPath("tmp/chartproperties." + sExtension);
514         PropertyValue[] aStoreProperties = new PropertyValue[2];
515         aStoreProperties[0] = new PropertyValue();
516         aStoreProperties[1] = new PropertyValue();
517         aStoreProperties[0].Name = "Override";
518         aStoreProperties[0].Value = true;
519         aStoreProperties[1].Name = "FilterName";
520         aStoreProperties[1].Value = sFilter;
521         XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
522                 XStorable.class, presentationDocument);
523         xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
524 
525         return (XComponent) UnoRuntime.queryInterface(XComponent.class,
526                 unoApp.loadDocument(filePath));
527     }
528 
529 }
530