View | Details | Raw Unified | Return to issue 120645
Collapse All | Expand All

(-)testuno/source/testcase/uno/sd/shape/ShapeProperties.java (+405 lines)
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
	 "StarOffice XML (Impress)", "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
				"StarOffice XML (Impress)", "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
}
(-)testuno/source/testlib/uno/ShapeUtil.java (-20 / +41 lines)
Lines 25-30 Link Here
25
25
26
import com.sun.star.uno.Exception;
26
import com.sun.star.uno.Exception;
27
import com.sun.star.uno.UnoRuntime;
27
import com.sun.star.uno.UnoRuntime;
28
import com.sun.star.lang.IndexOutOfBoundsException;
28
import com.sun.star.lang.WrappedTargetException;
29
import com.sun.star.lang.WrappedTargetException;
29
import com.sun.star.lang.XComponent;
30
import com.sun.star.lang.XComponent;
30
import com.sun.star.lang.XMultiServiceFactory;
31
import com.sun.star.lang.XMultiServiceFactory;
Lines 37-43 Link Here
37
import com.sun.star.container.NoSuchElementException;
38
import com.sun.star.container.NoSuchElementException;
38
import com.sun.star.container.XEnumeration;
39
import com.sun.star.container.XEnumeration;
39
import com.sun.star.container.XEnumerationAccess;
40
import com.sun.star.container.XEnumerationAccess;
41
import com.sun.star.container.XIndexAccess;
40
42
43
import com.sun.star.drawing.XDrawPage;
44
import com.sun.star.drawing.XDrawPages;
45
import com.sun.star.drawing.XDrawPagesSupplier;
41
import com.sun.star.drawing.XShape;
46
import com.sun.star.drawing.XShape;
42
import com.sun.star.drawing.XShapes;
47
import com.sun.star.drawing.XShapes;
43
48
Lines 75-101 Link Here
75
		return xShape;
80
		return xShape;
76
	}
81
	}
77
82
78
	/**
79
	 * try to get shape according position
80
	 * 
81
	 * @param aPos
82
	 * @return
83
	 */
84
	public static XShape getShape(XComponent xDrawDoc, Point aPos,
85
			String sShapeType) {
86
		XShape xShape = null;
87
		try {
88
			XMultiServiceFactory xFactory = (XMultiServiceFactory) UnoRuntime
89
					.queryInterface(XMultiServiceFactory.class, xDrawDoc);
90
			Object xObj = xFactory.createInstance(sShapeType);
91
			xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xObj);
92
		} catch (Exception e) {
93
			// TODO Auto-generated catch block
94
			e.printStackTrace();
95
		}
96
		return xShape;
97
	}
98
83
84
99
	/**
85
	/**
100
	 * add text to a shape. the return value is the PropertySet of the text
86
	 * add text to a shape. the return value is the PropertySet of the text
101
	 * range that has been added
87
	 * range that has been added
Lines 187-190 Link Here
187
			}
173
			}
188
		}
174
		}
189
	}
175
	}
176
	/**
177
	 * Get shapes in specific page
178
	 * @param impressDocument
179
	 * @param pageIndex
180
	 * @return
181
	 * @throws Exception
182
	 */
183
	public static XShapes getShapes(XComponent impressDocument, int pageIndex) throws Exception{
184
185
		XDrawPagesSupplier drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
186
				XDrawPagesSupplier.class, impressDocument);
187
		XDrawPages drawpages = drawsupplier.getDrawPages();
188
		XDrawPage xpage=(XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, drawpages.getByIndex(pageIndex));
189
		XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
190
		return xShapes;
191
192
	}
193
	
194
	/**
195
	 * Remove the specific shape in specific page
196
	 * @param impressDocument
197
	 * @param pageIndex
198
	 * @param shapeIndex
199
	 * @throws Exception
200
	 */
201
	public static void removeOneShape(XComponent impressDocument, int pageIndex, int shapeIndex) throws Exception{
202
		XDrawPagesSupplier drawsupplier = (XDrawPagesSupplier) UnoRuntime.queryInterface(
203
				XDrawPagesSupplier.class, impressDocument);
204
		XDrawPages drawpages = drawsupplier.getDrawPages();
205
		XDrawPage xpage=(XDrawPage)UnoRuntime.queryInterface(XDrawPage.class, drawpages.getByIndex(pageIndex));
206
		XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xpage);
207
		XShape xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(shapeIndex));
208
		xShapes.remove(xShape);
209
210
	}
190
}
211
}

Return to issue 120645