Line 0
Link Here
|
|
|
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 testcase.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 |
84 |
public void setUp() throws Exception { |
85 |
unoApp.start(); |
86 |
createDocumentAndSlide(); |
87 |
} |
88 |
|
89 |
@After |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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", 2500 , xPropSet.getPropertyValue("RotateAngle")); |
320 |
} |
321 |
|
322 |
|
323 |
// ------------------Shape Remove---------------------------- |
324 |
/** |
325 |
* test Remove shape from impress Document |
326 |
* |
327 |
* @throws Exception |
328 |
*/ |
329 |
@Test |
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 |
*/ |
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 |
*/ |
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 |
*/ |
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 UnoRuntime.queryInterface(XComponent.class, |
402 |
unoApp.loadDocument(filePath)); |
403 |
} |
404 |
|
405 |
} |