xref: /AOO41X/test/testuno/source/fvt/uno/sd/animation/CustomAnimation.java (revision b832fe9ee96f9a0260deab239932d14d0af31494)
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.animation;
22 
23 import junit.framework.Assert;
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.ShapeUtil;
33 
34 import com.sun.star.awt.Point;
35 import com.sun.star.awt.Size;
36 import com.sun.star.beans.PropertyValue;
37 import com.sun.star.beans.XPropertySet;
38 import com.sun.star.container.XIndexContainer;
39 import com.sun.star.container.XNameContainer;
40 import com.sun.star.container.XNamed;
41 import com.sun.star.drawing.XDrawPage;
42 import com.sun.star.drawing.XDrawPages;
43 import com.sun.star.drawing.XDrawPagesSupplier;
44 import com.sun.star.drawing.XShape;
45 import com.sun.star.drawing.XShapes;
46 import com.sun.star.frame.XStorable;
47 import com.sun.star.lang.XComponent;
48 import com.sun.star.lang.XSingleServiceFactory;
49 import com.sun.star.presentation.AnimationEffect;
50 import com.sun.star.presentation.XCustomPresentationSupplier;
51 import com.sun.star.presentation.XPresentation;
52 import com.sun.star.presentation.XPresentationSupplier;
53 import com.sun.star.table.XCell;
54 import com.sun.star.text.ControlCharacter;
55 import com.sun.star.text.XText;
56 import com.sun.star.text.XTextCursor;
57 import com.sun.star.text.XTextRange;
58 import com.sun.star.uno.UnoRuntime;
59 
60 public class CustomAnimation {
61     XPresentationSupplier sdDocument = null;
62     XPresentation pre = null;
63     XComponent precomp = null;
64     XComponent impressDocument = null;
65     XComponent reLoadFile = null;
66     XDrawPagesSupplier drawsupplier = null;
67     XDrawPages drawpages = null;
68 
69     String filePath = null;
70 
71     UnoApp unoApp = new UnoApp();
72 
73     /**
74      * @throws java.lang.Exception
75      */
76     @Before
setUp()77     public void setUp() throws Exception {
78         unoApp.start();
79         createDocumentAndSlide();
80     }
81 
82     @After
tearDown()83     public void tearDown() throws Exception {
84         unoApp.closeDocument(impressDocument);
85         unoApp.closeDocument(reLoadFile);
86         unoApp.close();
87     }
88 
89     @Test
testShapeAnimation()90     public void testShapeAnimation() throws Exception {
91 
92         XShapes xShapes = null;
93         XPropertySet xShapePropSet[] = new XPropertySet[23];
94 
95         drawpages.insertNewByIndex(0);
96 
97         String aNameArray[] = { "Page 1", "Page 2", "Page 3", "Page 4",
98                 "Page 5", "Page 6", "Page 7", "Page 8", "Page 9", "Page 10",
99                 "Page 11", "Page 12", "Page 13", "Page 14", "Page 15",
100                 "Page 16", "Page 17", "Page 18", "Page 19", "Page 20",
101                 "Page 21", "Page 22", "Page 23", };
102         AnimationEffect AnimationEffectArray[] = {
103                 AnimationEffect.NONE,
104                 AnimationEffect.FADE_FROM_LEFT,
105                 AnimationEffect.FADE_FROM_TOP,
106                 AnimationEffect.FADE_FROM_RIGHT,
107                 AnimationEffect.FADE_FROM_BOTTOM,
108                 AnimationEffect.FADE_TO_CENTER,
109                 AnimationEffect.FADE_FROM_CENTER,
110                 AnimationEffect.MOVE_FROM_LEFT,
111                 AnimationEffect.MOVE_FROM_TOP,
112                 AnimationEffect.MOVE_FROM_RIGHT,
113                 AnimationEffect.MOVE_FROM_BOTTOM,
114                 AnimationEffect.VERTICAL_STRIPES,
115                 AnimationEffect.HORIZONTAL_STRIPES,
116                 AnimationEffect.CLOCKWISE,
117                 AnimationEffect.COUNTERCLOCKWISE,
118                 AnimationEffect.FADE_FROM_UPPERLEFT,
119                 AnimationEffect.FADE_FROM_UPPERRIGHT,
120                 AnimationEffect.FADE_FROM_LOWERLEFT,
121                 AnimationEffect.FADE_FROM_LOWERRIGHT,
122                 AnimationEffect.CLOSE_VERTICAL,
123                 AnimationEffect.CLOSE_HORIZONTAL,
124                 AnimationEffect.OPEN_VERTICAL,
125                 AnimationEffect.OPEN_HORIZONTAL,
126                 AnimationEffect.PATH,
127 /*              AnimationEffect.MOVE_TO_LEFT,
128                 AnimationEffect.MOVE_TO_TOP,
129                 AnimationEffect.MOVE_TO_RIGHT,
130                 AnimationEffect.MOVE_TO_BOTTOM,
131                 AnimationEffect.SPIRALIN_LEFT,
132                 AnimationEffect.SPIRALIN_RIGHT,
133                 AnimationEffect.SPIRALOUT_LEFT,
134                 AnimationEffect.SPIRALOUT_RIGHT,
135                 AnimationEffect.DISSOLVE,
136                 AnimationEffect.WAVYLINE_FROM_LEFT,
137                 AnimationEffect.RANDOM,
138                 AnimationEffect.VERTICAL_LINES,
139                 AnimationEffect.LASER_FROM_LEFT,
140                 AnimationEffect.APPEAR,
141                 AnimationEffect.HIDE,
142                 AnimationEffect.MOVE_FROM_UPPERLEFT,
143                 AnimationEffect.VERTICAL_CHECKERBOARD,
144                 AnimationEffect.HORIZONTAL_ROTATE,
145                 AnimationEffect.VERTICAL_STRETCH,
146                 AnimationEffect.ZOOM_IN,
147                 AnimationEffect.ZOOM_OUT_FROM_LEFT, */
148                 };
149 
150         // insert  pages
151         while (drawpages.getCount() < aNameArray.length)
152             drawpages.insertNewByIndex(0);
153 
154         // add text shape to each page
155         for (int i = 0; i < aNameArray.length; i++) {
156             XDrawPage xDrawPage = (XDrawPage) UnoRuntime.queryInterface(
157                     XDrawPage.class, drawpages.getByIndex(i));
158             XNamed xPageName = (XNamed) UnoRuntime.queryInterface(XNamed.class,
159                     xDrawPage);
160             xPageName.setName(aNameArray[i]);
161 
162             xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class,
163                     drawpages.getByIndex(i));
164 
165             // create a rectangle that is placed on the top left of the page
166             xShapePropSet[i] = ShapeUtil.createAndInsertShape(impressDocument,
167                     xShapes, new Point(1000, 1000), new Size(5000, 5000),
168                     "com.sun.star.drawing.RectangleShape");
169         }
170 
171         for (int i = 0; i < aNameArray.length; i++) {
172             // set an object animation for each slide
173             xShapePropSet[i]
174                     .setPropertyValue("Effect", AnimationEffectArray[i]);
175         }
176 
177         // If this property and the property DimPrevious are both true, the shape is hidden on the next click after the AnimationEffect has finished.
178         xShapePropSet[1].setPropertyValue("DimHide", new Boolean(false));
179         // If true, this shape is painted using DimColor on the next click after finishing the AnimationEffect.
180         xShapePropSet[1].setPropertyValue("DimPrevious", new Boolean(true));
181         // his color is used to paint the shape on the next click after the animation effect has finished
182         xShapePropSet[1].setPropertyValue("DimColor", new Integer(0xff0000));
183         // the sound file specified in Sound is played while the animation effect is executed
184         xShapePropSet[1].setPropertyValue("SoundOn", new Boolean(false));
185         // the sound specified in the Sound property of this shape is played completely
186         xShapePropSet[1].setPropertyValue("PlayFull", new Boolean(false));
187 
188         saveAndLoadSlide();
189 
190         for (int i = 0; i < aNameArray.length; i++) {
191             // assert if Shape Animation is set
192             Assert.assertEquals(
193                     "Text Animation Effect is AnimationEffectArray[]",
194                     AnimationEffectArray[i],
195                     xShapePropSet[i].getPropertyValue("Effect"));
196         }
197         // assert if DimHide is false
198         Assert.assertEquals("Shape Animation DimHide is false", Boolean.FALSE,
199                 xShapePropSet[1].getPropertyValue("DimHide"));
200         // assert if DimPrevious is true
201         Assert.assertEquals("Shape Animation DimPrevious is true",
202                 Boolean.TRUE, xShapePropSet[1].getPropertyValue("DimPrevious"));
203         // assert if DimColor is red
204         Assert.assertEquals("Shape Animation DimColor is Red", 0xff0000,
205                 xShapePropSet[1].getPropertyValue("DimColor"));
206         // assert the sound file specified in Sound don't play while the
207         // animation effect is executed.
208         Assert.assertEquals("Shape SoundOn is false", Boolean.FALSE,
209                 xShapePropSet[1].getPropertyValue("SoundOn"));
210         // assert the sound specified in the Sound property of this shape is
211         // played completely
212         Assert.assertEquals("Shape PlayFull is false", Boolean.FALSE,
213                 xShapePropSet[1].getPropertyValue("PlayFull"));
214 
215     }
216 
addPortion(XShape xShape, String sText, boolean bNewParagraph)217     public XPropertySet addPortion(XShape xShape, String sText,
218             boolean bNewParagraph)
219             throws com.sun.star.lang.IllegalArgumentException {
220         XText xText = (XText) UnoRuntime.queryInterface(XText.class, xShape);
221 
222         XTextCursor xTextCursor = xText.createTextCursor();
223         xTextCursor.gotoEnd(false);
224         if (bNewParagraph == true) {
225             xText.insertControlCharacter(xTextCursor,
226                     ControlCharacter.PARAGRAPH_BREAK, false);
227             xTextCursor.gotoEnd(false);
228         }
229         XTextRange xTextRange = (XTextRange) UnoRuntime.queryInterface(
230                 XTextRange.class, xTextCursor);
231         xTextRange.setString(sText);
232         xTextCursor.gotoEnd(true);
233         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(
234                 XPropertySet.class, xText);
235         return xPropSet;
236     }
237 
238     /**
239      * create a new presentation document and insert a new slide.
240      *
241      * @throws Exception
242      */
createDocumentAndSlide()243     public void createDocumentAndSlide() throws Exception {
244         impressDocument = (XComponent) UnoRuntime.queryInterface(
245                 XComponent.class, unoApp.newDocument("simpress"));
246         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
247                 XDrawPagesSupplier.class, impressDocument);
248         drawpages = drawsupplier.getDrawPages();
249 
250         sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface(
251                 XPresentationSupplier.class, impressDocument);
252         pre = sdDocument.getPresentation();
253     }
254 
255     /**
256      * Save presentation and reLoad the slide.
257      *
258      * @param no
259      * @return void
260      * @throws Exception
261      */
saveAndLoadSlide()262     public void saveAndLoadSlide() throws Exception {
263         reLoadFile = saveAndReloadDoc(impressDocument,
264                 "StarOffice XML (Impress)", "odp");
265         drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
266                 XDrawPagesSupplier.class, reLoadFile);
267         drawpages = drawsupplier.getDrawPages();
268 
269         sdDocument = (XPresentationSupplier) UnoRuntime.queryInterface(
270                 XPresentationSupplier.class, reLoadFile);
271         pre = sdDocument.getPresentation();
272     }
273 
274     /**
275      * save and reload Presentation document.
276      *
277      * @param presentationDocument
278      * @param sFilter
279      * @param sExtension
280      * @return
281      * @throws Exception
282      */
saveAndReloadDoc(XComponent presentationDocument, String sFilter, String sExtension)283     private XComponent saveAndReloadDoc(XComponent presentationDocument,
284             String sFilter, String sExtension) throws Exception {
285         filePath = Testspace.getPath("tmp/shapeanimation." + sExtension);
286         PropertyValue[] aStoreProperties = new PropertyValue[2];
287         aStoreProperties[0] = new PropertyValue();
288         aStoreProperties[1] = new PropertyValue();
289         aStoreProperties[0].Name = "Override";
290         aStoreProperties[0].Value = true;
291         aStoreProperties[1].Name = "FilterName";
292         aStoreProperties[1].Value = sFilter;
293         XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
294                 XStorable.class, presentationDocument);
295         xStorable.storeToURL(FileUtil.getUrl(filePath), aStoreProperties);
296 
297         return (XComponent) UnoRuntime.queryInterface(XComponent.class,
298                 unoApp.loadDocument(filePath));
299     }
300 }
301