xref: /AOO41X/test/testuno/source/fvt/uno/sd/shape/ShapeProperties.java (revision 47148b3bc50811ceb41802e4cc50a5db21535900)
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.shape;
22 
23 import java.awt.geom.AffineTransform;
24 import java.io.File;
25 import java.io.IOException;
26 
27 import org.junit.After;
28 import static org.junit.Assert.*;
29 
30 import org.junit.AfterClass;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.openoffice.test.uno.UnoApp;
34 import org.openoffice.test.common.FileUtil;
35 import org.openoffice.test.common.Testspace;
36 
37 import testlib.uno.PageUtil;
38 import testlib.uno.ShapeUtil;
39 import testlib.uno.TestUtil;
40 
41 import com.sun.star.text.WrapTextMode;
42 import com.sun.star.text.XText;
43 import com.sun.star.text.XTextContent;
44 import com.sun.star.uno.UnoRuntime;
45 import com.sun.star.presentation.XPresentation;
46 import com.sun.star.presentation.XPresentationSupplier;
47 import com.sun.star.awt.Gradient;
48 import com.sun.star.awt.GradientStyle;
49 import com.sun.star.awt.Size;
50 import com.sun.star.awt.Point;
51 import com.sun.star.beans.PropertyValue;
52 import com.sun.star.beans.XPropertySet;
53 import com.sun.star.drawing.DashStyle;
54 import com.sun.star.drawing.FillStyle;
55 import com.sun.star.drawing.Hatch;
56 import com.sun.star.drawing.HatchStyle;
57 import com.sun.star.drawing.HomogenMatrix3;
58 import com.sun.star.drawing.LineDash;
59 import com.sun.star.drawing.LineStyle;
60 import com.sun.star.drawing.XDrawPage;
61 import com.sun.star.drawing.XDrawPages;
62 import com.sun.star.drawing.XDrawPagesSupplier;
63 import com.sun.star.drawing.XShape;
64 import com.sun.star.drawing.XShapes;
65 import com.sun.star.frame.XComponentLoader;
66 import com.sun.star.frame.XStorable;
67 import com.sun.star.lang.XComponent;
68 import com.sun.star.lang.XMultiServiceFactory;
69 
70 public class ShapeProperties {
71     UnoApp unoApp = new UnoApp();
72     XPresentationSupplier sdDocument = null;
73     XPresentation pre = null;
74     XComponent precomp = null;
75     XComponent impressDocument = null;
76     XComponent reLoadFile = null;
77     XDrawPagesSupplier drawsupplier = null;
78     XDrawPages drawpages = null;
79     XShapes xShapes = null;
80     XDrawPage xpage = null;
81     String filePath = null;
82 
83     @Before
setUp()84     public void setUp() throws Exception {
85         unoApp.start();
86         createDocumentAndSlide();
87     }
88 
89     @After
tearDown()90     public void tearDown() throws Exception {
91         unoApp.closeDocument(impressDocument);
92         unoApp.closeDocument(reLoadFile);
93         unoApp.close();
94         if (filePath != null)
95             FileUtil.deleteFile(filePath);
96     }
97 
98     /**
99      * test Insert a new slide and Insert a new EllipseShape
100      *
101      * @throws Exception
102      */
103      @Test
testInsertShape()104      public void testInsertShape() throws Exception {
105      Point po = new Point(1000, 8000);
106      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
107      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
108      5000, 5000), "com.sun.star.drawing.EllipseShape");
109      xShapes.add(xShape);
110      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
111      XPropertySet.class, xShape);
112      xPropSet.setPropertyValue("Name", "test");
113 
114      xShape=saveAndLoadShape(1,0);
115      XPropertySet xPropSet2 = (XPropertySet) UnoRuntime.queryInterface(
116      XPropertySet.class, xShape);
117      assertEquals("Not the same shape","test",xPropSet2.getPropertyValue("Name"));
118      assertEquals("Not EllopseShape","com.sun.star.drawing.EllipseShape",xShape.getShapeType());
119      }
120 
121      /**
122      * test Insert text to an EllopseShape
123      *
124      * @throws Exception
125      */
126      @Test
testInsertTextToShape()127      public void testInsertTextToShape() throws Exception {
128      Point po = new Point(1000, 8000);
129      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
130      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
131      5000, 5000), "com.sun.star.drawing.EllipseShape");
132      xShapes.add(xShape);
133      xShape=saveAndLoadShape(1,0);
134      ShapeUtil.addPortion(xShape, "test", false);
135      assertEquals("Not put text correctly","test",ShapeUtil.getPortion(xShape));
136      }
137 
138      /**
139      * test Shape fill with Gradient
140      *
141      * @throws Exception
142      */
143      @Test
testShapeFillGradient()144      public void testShapeFillGradient() throws Exception {
145      Point po = new Point(1000, 8000);
146      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
147      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
148      5000, 5000), "com.sun.star.drawing.EllipseShape");
149      xShapes.add(xShape);
150      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
151      XPropertySet.class, xShape);
152      xPropSet.setPropertyValue("FillStyle", FillStyle.GRADIENT);
153      Gradient aGradient = new Gradient();
154      aGradient.Style = GradientStyle.LINEAR;
155      aGradient.StartColor = 0x00ff00;
156      aGradient.EndColor = 0xffff00;
157      aGradient.Angle = 450;
158      aGradient.Border = 0;
159      aGradient.XOffset = 0;
160      aGradient.YOffset = 0;
161      aGradient.StartIntensity = 100;
162      aGradient.EndIntensity = 100;
163      aGradient.StepCount = 10;
164      xPropSet.setPropertyValue("FillGradient", aGradient);
165      // --------------------------
166      xShape=saveAndLoadShape(1,0);
167      xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xShape);
168      // ----------------------------
169      assertEquals("Not Gradient Fill Style",FillStyle.GRADIENT,xPropSet.getPropertyValue("FillStyle"));
170      aGradient=(Gradient) xPropSet.getPropertyValue("FillGradient");
171      assertEquals("Not Linear Gradient",GradientStyle.LINEAR,aGradient.Style);
172      }
173 
174      /**
175      * test Shape fill with yellow color
176      *
177      * @throws Exception
178      */
179      @Test
testShapeFillColor()180      public void testShapeFillColor() throws Exception {
181      Point po = new Point(1000, 8000);
182      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
183      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
184      5000, 5000), "com.sun.star.drawing.EllipseShape");
185      xShapes.add(xShape);
186      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
187      XPropertySet.class, xShape);
188      xPropSet.setPropertyValue("FillStyle", FillStyle.SOLID);
189      xPropSet.setPropertyValue("FillColor", 0xffff00);
190      // --------------------------
191      xShape=saveAndLoadShape(1,0);
192      xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xShape);
193      // ----------------------------------------------------
194      assertEquals("Not Color Fill Style",FillStyle.SOLID,xPropSet.getPropertyValue("FillStyle"));
195      assertEquals("Not Yellow Color Fill",0xffff00,xPropSet.getPropertyValue("FillColor"));
196      }
197 
198      /**
199      * test shape fill with Hatch Style(Pattern in MS)
200      * @throws Exception
201      */
202      @Test
testShapeFillHatch()203      public void testShapeFillHatch() throws Exception {
204      Point po = new Point(1000, 8000);
205      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
206      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
207      5000, 5000), "com.sun.star.drawing.EllipseShape");
208      xShapes.add(xShape);
209      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
210      XPropertySet.class, xShape);
211      xPropSet.setPropertyValue("FillStyle", FillStyle.HATCH);
212      Hatch aHatch=new Hatch();
213      aHatch.Style=HatchStyle.DOUBLE;
214      aHatch.Color=0x00ff00;
215      aHatch.Distance=100;
216      aHatch.Angle=450;
217      xPropSet.setPropertyValue("FillHatch", aHatch);
218 
219      // --------------------------
220      xShape=saveAndLoadShape(1,0);
221      xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xShape);
222      // ----------------------------
223      assertEquals("Not Gradient Fill Style",FillStyle.HATCH,xPropSet.getPropertyValue("FillStyle"));
224      aHatch=(Hatch) xPropSet.getPropertyValue("FillHatch");
225      assertEquals("Not Double Hatch",HatchStyle.DOUBLE,aHatch.Style);
226      }
227 
228     // ------------Shape Line-----------------------------
229     /**
230      * test Shape Line style DASH
231      *
232      * @throws Exception
233      */
234      @Test
testShapeLineStyle()235      public void testShapeLineStyle() throws Exception {
236      Point po = new Point(1000, 8000);
237      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
238      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
239      5000, 5000), "com.sun.star.drawing.EllipseShape");
240      xShapes.add(xShape);
241 
242      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
243      XPropertySet.class, xShape);
244      xPropSet.setPropertyValue("LineStyle", LineStyle.DASH);
245 
246      LineDash aLineDash=new LineDash();
247      aLineDash.Style=DashStyle.ROUND;
248      aLineDash.Dots=2;
249      aLineDash.DashLen=100;
250      aLineDash.Distance=50;
251      xPropSet.setPropertyValue("LineDash", aLineDash);
252 
253      // --------------------------
254      xShape=saveAndLoadShape(1,0);
255      xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xShape);
256      // ----------------------------
257      assertEquals("Not Dash Line Style",LineStyle.DASH,xPropSet.getPropertyValue("LineStyle"));
258      aLineDash=(LineDash) xPropSet.getPropertyValue("LineDash");
259      assertEquals("Not Round Dash Style", DashStyle.ROUND ,aLineDash.Style);
260      }
261 
262      /**
263      * test Shape Line Color
264      * @throws Exception
265      */
266 
267      @Test
testShapeLineColor()268      public void testShapeLineColor() throws Exception {
269      Point po = new Point(1000, 8000);
270      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
271      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
272      5000, 5000), "com.sun.star.drawing.EllipseShape");
273      xShapes.add(xShape);
274      XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
275      XPropertySet.class, xShape);
276      xPropSet.setPropertyValue("LineStyle", LineStyle.DASH);
277      xPropSet.setPropertyValue("LineColor", 0x00ff00);
278      xShape=saveAndLoadShape(1,0);
279      xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xShape);
280      // ----------------------------
281      assertEquals("Not Dash Line Style",LineStyle.DASH,xPropSet.getPropertyValue("LineStyle"));
282      assertEquals("wrong line color", 0x00ff00,xPropSet.getPropertyValue("LineColor"));
283      }
284 
285     /**
286      * test Shape position and size
287      *
288      * @throws Exception
289      */
290      @Test
testShapePositionSize()291      public void testShapePositionSize() throws Exception {
292      Point po = new Point(1000, 8000);
293      xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
294      XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
295      5000, 5000), "com.sun.star.drawing.EllipseShape");
296      xShapes.add(xShape);
297      xShape=saveAndLoadShape(1,0);
298      assertEquals("wrong shape position",1000,xShape.getPosition().X);
299      assertEquals("wrong shape Height", 5000 ,xShape.getSize().Height);
300      }
301 
302     /**
303      * test Shape rotate with 25 degree.
304      * @throws Exception
305      */
306     @Test
testShapeRotation()307     public void testShapeRotation() throws Exception {
308         Point po = new Point(1000, 8000);
309         xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
310         XShape xShape = ShapeUtil.createShape(impressDocument, po, new Size(
311                 5000, 5000), "com.sun.star.drawing.RectangleShape");
312         xShapes.add(xShape);
313         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
314                 XPropertySet.class, xShape);
315         xPropSet.setPropertyValue("RotateAngle", 2500);
316         xShape=saveAndLoadShape(1,0);
317         xPropSet = (XPropertySet) UnoRuntime.queryInterface(
318                  XPropertySet.class, xShape);
319         assertEquals("RotateAngle is not 2500", 2500L, xPropSet.getPropertyValue("RotateAngle"));
320     }
321 
322 
323     // ------------------Shape Remove----------------------------
324     /**
325      * test Remove shape from impress Document
326      *
327      * @throws Exception
328      */
329      @Test
testShapeRemove()330      public void testShapeRemove() throws Exception {
331      Point aPos=null;
332      Size aSize=new Size(4000,4000);
333      for(int i=0;i<=4;i++){
334      aPos=new Point(1000, 3000*i);
335      xShapes=ShapeUtil.getShapes(impressDocument, 0);
336      ShapeUtil.createAndInsertShape(impressDocument, xShapes, aPos, aSize,
337      "com.sun.star.drawing.EllipseShape");
338      }
339      int countBeforeRemove=ShapeUtil.getShapes(impressDocument, 0).getCount();
340      ShapeUtil.removeOneShape(impressDocument, 0, 2);
341      int countAfterRemove=ShapeUtil.getShapes(impressDocument, 0).getCount();
342      assertEquals("Not remove shape successfully",1,countBeforeRemove-countAfterRemove);
343      reLoadFile = saveAndReloadDoc(impressDocument,
344      "impress8", "odp");
345      xShapes=ShapeUtil.getShapes(reLoadFile, 0);
346      assertEquals("Shape count is wrong after reload",6,xShapes.getCount());
347      }
348 
349     /**
350      * create a new presentation document and insert a new slide.
351      *
352      * @throws Exception
353      */
createDocumentAndSlide()354     public void createDocumentAndSlide() throws Exception {
355         impressDocument = (XComponent) UnoRuntime.queryInterface(
356                 XComponent.class, unoApp.newDocument("simpress"));
357         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
358                 XDrawPagesSupplier.class, impressDocument);
359         drawpages = drawsupplier.getDrawPages();
360         drawpages.insertNewByIndex(1);
361         xpage = PageUtil.getDrawPageByIndex(impressDocument, 1);
362     }
363 
364     /**
365      * Save presentation and reLoad the presentation and shape in it.
366      *
367      * @param po
368      * @param shapeType
369      * @return
370      * @throws Exception
371      */
saveAndLoadShape(int pageIndex, int shapeIndex)372     public XShape saveAndLoadShape(int pageIndex, int shapeIndex) throws Exception {
373         reLoadFile = saveAndReloadDoc(impressDocument,
374                 "impress8", "odp");
375         xShapes=ShapeUtil.getShapes(reLoadFile, pageIndex);
376         return  (XShape) UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(shapeIndex));
377     }
378     /**
379      * save and reload Presentation document.
380      *
381      * @param presentationDocument
382      * @param sFilter
383      * @param sExtension
384      * @return
385      * @throws Exception
386      */
saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)387     private XComponent saveAndReloadDoc(XComponent presentationDocument,
388             String sFilter, String sExtension) throws Exception {
389         filePath = Testspace.getPath("tmp/presentationtest." + sExtension);
390         PropertyValue[] aStoreProperties = new PropertyValue[2];
391         aStoreProperties[0] = new PropertyValue();
392         aStoreProperties[1] = new PropertyValue();
393         aStoreProperties[0].Name = "Override";
394         aStoreProperties[0].Value = true;
395         aStoreProperties[1].Name = "FilterName";
396         aStoreProperties[1].Value = sFilter;
397         XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
398                 XStorable.class, presentationDocument);
399         xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
400 
401         return (XComponent) UnoRuntime.queryInterface(XComponent.class,
402                 unoApp.loadDocument(filePath));
403     }
404 
405 }
406