1*b0a35ca4SLi Feng Wang /**************************************************************
2*b0a35ca4SLi Feng Wang  *
3*b0a35ca4SLi Feng Wang  * Licensed to the Apache Software Foundation (ASF) under one
4*b0a35ca4SLi Feng Wang  * or more contributor license agreements.  See the NOTICE file
5*b0a35ca4SLi Feng Wang  * distributed with this work for additional information
6*b0a35ca4SLi Feng Wang  * regarding copyright ownership.  The ASF licenses this file
7*b0a35ca4SLi Feng Wang  * to you under the Apache License, Version 2.0 (the
8*b0a35ca4SLi Feng Wang  * "License"); you may not use this file except in compliance
9*b0a35ca4SLi Feng Wang  * with the License.  You may obtain a copy of the License at
10*b0a35ca4SLi Feng Wang  *
11*b0a35ca4SLi Feng Wang  *   http://www.apache.org/licenses/LICENSE-2.0
12*b0a35ca4SLi Feng Wang  *
13*b0a35ca4SLi Feng Wang  * Unless required by applicable law or agreed to in writing,
14*b0a35ca4SLi Feng Wang  * software distributed under the License is distributed on an
15*b0a35ca4SLi Feng Wang  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b0a35ca4SLi Feng Wang  * KIND, either express or implied.  See the License for the
17*b0a35ca4SLi Feng Wang  * specific language governing permissions and limitations
18*b0a35ca4SLi Feng Wang  * under the License.
19*b0a35ca4SLi Feng Wang  *
20*b0a35ca4SLi Feng Wang  *************************************************************/
21*b0a35ca4SLi Feng Wang 
22*b0a35ca4SLi Feng Wang package fvt.uno.sc.object;
23*b0a35ca4SLi Feng Wang 
24*b0a35ca4SLi Feng Wang import static org.junit.Assert.assertEquals;
25*b0a35ca4SLi Feng Wang 
26*b0a35ca4SLi Feng Wang import java.util.Arrays;
27*b0a35ca4SLi Feng Wang import java.util.Collection;
28*b0a35ca4SLi Feng Wang 
29*b0a35ca4SLi Feng Wang import org.junit.After;
30*b0a35ca4SLi Feng Wang import org.junit.AfterClass;
31*b0a35ca4SLi Feng Wang import org.junit.Before;
32*b0a35ca4SLi Feng Wang import org.junit.BeforeClass;
33*b0a35ca4SLi Feng Wang import org.junit.Test;
34*b0a35ca4SLi Feng Wang import org.junit.runner.RunWith;
35*b0a35ca4SLi Feng Wang import org.junit.runners.Parameterized;
36*b0a35ca4SLi Feng Wang import org.junit.runners.Parameterized.Parameters;
37*b0a35ca4SLi Feng Wang import org.openoffice.test.uno.UnoApp;
38*b0a35ca4SLi Feng Wang 
39*b0a35ca4SLi Feng Wang import testlib.uno.SCUtil;
40*b0a35ca4SLi Feng Wang import testlib.uno.ShapeUtil;
41*b0a35ca4SLi Feng Wang 
42*b0a35ca4SLi Feng Wang import com.sun.star.awt.Point;
43*b0a35ca4SLi Feng Wang import com.sun.star.awt.Size;
44*b0a35ca4SLi Feng Wang import com.sun.star.drawing.XDrawPage;
45*b0a35ca4SLi Feng Wang import com.sun.star.drawing.XDrawPageSupplier;
46*b0a35ca4SLi Feng Wang import com.sun.star.drawing.XShape;
47*b0a35ca4SLi Feng Wang import com.sun.star.drawing.XShapes;
48*b0a35ca4SLi Feng Wang import com.sun.star.lang.XComponent;
49*b0a35ca4SLi Feng Wang import com.sun.star.sheet.XSpreadsheet;
50*b0a35ca4SLi Feng Wang import com.sun.star.sheet.XSpreadsheetDocument;
51*b0a35ca4SLi Feng Wang import com.sun.star.uno.UnoRuntime;
52*b0a35ca4SLi Feng Wang 
53*b0a35ca4SLi Feng Wang /**
54*b0a35ca4SLi Feng Wang  *  Check the shapes can be added and removed
55*b0a35ca4SLi Feng Wang  *
56*b0a35ca4SLi Feng Wang  */
57*b0a35ca4SLi Feng Wang @RunWith(value = Parameterized.class)
58*b0a35ca4SLi Feng Wang public class DrawingObject {
59*b0a35ca4SLi Feng Wang 
60*b0a35ca4SLi Feng Wang 	private String inputType;
61*b0a35ca4SLi Feng Wang 	private String fileType;
62*b0a35ca4SLi Feng Wang 
63*b0a35ca4SLi Feng Wang 	private static final UnoApp unoApp = new UnoApp();
64*b0a35ca4SLi Feng Wang 
65*b0a35ca4SLi Feng Wang 	XComponent scComponent = null;
66*b0a35ca4SLi Feng Wang 	XSpreadsheetDocument scDocument = null;
67*b0a35ca4SLi Feng Wang 
68*b0a35ca4SLi Feng Wang 	@Parameters
data()69*b0a35ca4SLi Feng Wang 	public static Collection<Object[]> data() throws Exception {
70*b0a35ca4SLi Feng Wang 
71*b0a35ca4SLi Feng Wang 		return Arrays.asList(new Object[][] {
72*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.RectangleShape",  "ods"},
73*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.EllipseShape",  "ods"},
74*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.LineShape",  "ods"},
75*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.GraphicObjectShape",  "ods"},
76*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.MeasureShape",  "ods"},
77*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.PageShape",  "ods"},
78*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.TextShape",  "ods"},
79*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.RectangleShape",  "xls"},
80*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.EllipseShape",  "xls"},
81*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.LineShape",  "xls"},
82*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.MeasureShape",  "xls"},
83*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.PageShape",  "xls"},
84*b0a35ca4SLi Feng Wang 			{"com.sun.star.drawing.TextShape",  "xls"},
85*b0a35ca4SLi Feng Wang 		});
86*b0a35ca4SLi Feng Wang 	}
87*b0a35ca4SLi Feng Wang 
DrawingObject( String inputType, String fileType)88*b0a35ca4SLi Feng Wang 	public DrawingObject( String inputType, String fileType) {
89*b0a35ca4SLi Feng Wang //		this.expected = expected;
90*b0a35ca4SLi Feng Wang 		this.inputType = inputType;
91*b0a35ca4SLi Feng Wang //		this.numberData = numberData;
92*b0a35ca4SLi Feng Wang 		this.fileType = fileType;
93*b0a35ca4SLi Feng Wang 	}
94*b0a35ca4SLi Feng Wang 
95*b0a35ca4SLi Feng Wang 	@Before
setUp()96*b0a35ca4SLi Feng Wang 	public void setUp() throws Exception {
97*b0a35ca4SLi Feng Wang 		scComponent = unoApp.newDocument("scalc");
98*b0a35ca4SLi Feng Wang 		scDocument = SCUtil.getSCDocument(scComponent);
99*b0a35ca4SLi Feng Wang 	}
100*b0a35ca4SLi Feng Wang 
101*b0a35ca4SLi Feng Wang 	@After
tearDown()102*b0a35ca4SLi Feng Wang 	public void tearDown() throws Exception {
103*b0a35ca4SLi Feng Wang 		unoApp.closeDocument(scComponent);
104*b0a35ca4SLi Feng Wang 
105*b0a35ca4SLi Feng Wang 	}
106*b0a35ca4SLi Feng Wang 
107*b0a35ca4SLi Feng Wang 	@BeforeClass
setUpConnection()108*b0a35ca4SLi Feng Wang 	public static void setUpConnection() throws Exception {
109*b0a35ca4SLi Feng Wang 		unoApp.start();
110*b0a35ca4SLi Feng Wang 	}
111*b0a35ca4SLi Feng Wang 
112*b0a35ca4SLi Feng Wang 	@AfterClass
tearDownConnection()113*b0a35ca4SLi Feng Wang 	public static void tearDownConnection() throws InterruptedException, Exception {
114*b0a35ca4SLi Feng Wang 		unoApp.close();
115*b0a35ca4SLi Feng Wang 		SCUtil.clearTempDir();
116*b0a35ca4SLi Feng Wang 	}
117*b0a35ca4SLi Feng Wang 
118*b0a35ca4SLi Feng Wang 	/**
119*b0a35ca4SLi Feng Wang 	 * Check Drawing Object
120*b0a35ca4SLi Feng Wang 	 * 1. Create a spreadsheet file.
121*b0a35ca4SLi Feng Wang 	 * 2. Add shape.
122*b0a35ca4SLi Feng Wang 	 * 3. Save file as ODF/MSBinary format.
123*b0a35ca4SLi Feng Wang 	 * 4. Close and reopen file.  -> Check the shape added.
124*b0a35ca4SLi Feng Wang 	 * 5. Remove shape.
125*b0a35ca4SLi Feng Wang 	 * 6. Save file as ODF/MSBinary format.
126*b0a35ca4SLi Feng Wang 	 * 7. Close and reopen file.  -> Check the shape removed.
127*b0a35ca4SLi Feng Wang 	 * @throws Exception
128*b0a35ca4SLi Feng Wang 	 */
129*b0a35ca4SLi Feng Wang 
130*b0a35ca4SLi Feng Wang 	@Test
testDrawingObject()131*b0a35ca4SLi Feng Wang 	public void testDrawingObject() throws Exception {
132*b0a35ca4SLi Feng Wang 
133*b0a35ca4SLi Feng Wang 		String fileName = inputType;
134*b0a35ca4SLi Feng Wang 
135*b0a35ca4SLi Feng Wang 	    scDocument = SCUtil.getSCDocument(scComponent);
136*b0a35ca4SLi Feng Wang 		XSpreadsheet xSheet = SCUtil.getCurrentSheet(scDocument);
137*b0a35ca4SLi Feng Wang 		XDrawPageSupplier xDrawPageSupplier =
138*b0a35ca4SLi Feng Wang         		(XDrawPageSupplier)UnoRuntime.queryInterface(XDrawPageSupplier.class, xSheet);
139*b0a35ca4SLi Feng Wang         XDrawPage xDrawPage = xDrawPageSupplier.getDrawPage();
140*b0a35ca4SLi Feng Wang         XShapes xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage);
141*b0a35ca4SLi Feng Wang 
142*b0a35ca4SLi Feng Wang         //Execute add shape action
143*b0a35ca4SLi Feng Wang         Point po = new Point(100, 100);
144*b0a35ca4SLi Feng Wang         Size Si = new Size(5000, 5000);
145*b0a35ca4SLi Feng Wang         XShape xShape = ShapeUtil.createShape(scComponent, po, Si, inputType);
146*b0a35ca4SLi Feng Wang         xShapes.add(xShape);
147*b0a35ca4SLi Feng Wang 
148*b0a35ca4SLi Feng Wang         //Verify shape is added correctly
149*b0a35ca4SLi Feng Wang 
150*b0a35ca4SLi Feng Wang         //Verify number of shape in sheet.
151*b0a35ca4SLi Feng Wang   		assertEquals("Verify number of shape in sheet add execute add action.",1, xShapes.getCount());
152*b0a35ca4SLi Feng Wang 
153*b0a35ca4SLi Feng Wang   		//Save it, close and reopen it
154*b0a35ca4SLi Feng Wang 		SCUtil.saveFileAs(scComponent, fileName, fileType);
155*b0a35ca4SLi Feng Wang 		scDocument = SCUtil.reloadFile(unoApp, scDocument, fileName + "." + fileType);
156*b0a35ca4SLi Feng Wang 
157*b0a35ca4SLi Feng Wang 		xSheet = SCUtil.getCurrentSheet(scDocument);
158*b0a35ca4SLi Feng Wang 	    xDrawPageSupplier =
159*b0a35ca4SLi Feng Wang 	    		(XDrawPageSupplier)UnoRuntime.queryInterface(XDrawPageSupplier.class, xSheet);
160*b0a35ca4SLi Feng Wang 		xDrawPage = xDrawPageSupplier.getDrawPage();
161*b0a35ca4SLi Feng Wang 		xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage);
162*b0a35ca4SLi Feng Wang 
163*b0a35ca4SLi Feng Wang 		//Verify number of shape in sheet.
164*b0a35ca4SLi Feng Wang 		assertEquals("Verify number of shape in sheet.",1, xShapes.getCount());
165*b0a35ca4SLi Feng Wang 
166*b0a35ca4SLi Feng Wang 		//Verify correct shape type added.
167*b0a35ca4SLi Feng Wang 		assertEquals("Verify shape type is correct.",inputType, xShape.getShapeType());
168*b0a35ca4SLi Feng Wang 
169*b0a35ca4SLi Feng Wang 		xShape = (XShape) UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(0));
170*b0a35ca4SLi Feng Wang 
171*b0a35ca4SLi Feng Wang 		//Execute remove drawing objects
172*b0a35ca4SLi Feng Wang 		xShapes.remove(xShape);
173*b0a35ca4SLi Feng Wang 
174*b0a35ca4SLi Feng Wang 		//Verify results after remove shape
175*b0a35ca4SLi Feng Wang         assertEquals("Verify results after remove shape.",0, xShapes.getCount());
176*b0a35ca4SLi Feng Wang 
177*b0a35ca4SLi Feng Wang         //Save and reload document
178*b0a35ca4SLi Feng Wang 
179*b0a35ca4SLi Feng Wang         //Save the modified spreadsheet first
180*b0a35ca4SLi Feng Wang         SCUtil.save(scDocument);
181*b0a35ca4SLi Feng Wang 
182*b0a35ca4SLi Feng Wang         //close it and reload it
183*b0a35ca4SLi Feng Wang         scDocument = SCUtil.reloadFile(unoApp, scDocument, fileName + "." + fileType);
184*b0a35ca4SLi Feng Wang 
185*b0a35ca4SLi Feng Wang         //Get Draw page
186*b0a35ca4SLi Feng Wang       	xSheet = SCUtil.getCurrentSheet(scDocument);
187*b0a35ca4SLi Feng Wang       	xDrawPageSupplier =
188*b0a35ca4SLi Feng Wang       			(XDrawPageSupplier)UnoRuntime.queryInterface(XDrawPageSupplier.class, xSheet);
189*b0a35ca4SLi Feng Wang       	xDrawPage = xDrawPageSupplier.getDrawPage();
190*b0a35ca4SLi Feng Wang         xShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage);
191*b0a35ca4SLi Feng Wang 
192*b0a35ca4SLi Feng Wang         //Verify number of shape in sheet after executing remove action.
193*b0a35ca4SLi Feng Wang         assertEquals("Verify 0 shape in sheet after executing remove action.",
194*b0a35ca4SLi Feng Wang         		0, xShapes.getCount());
195*b0a35ca4SLi Feng Wang 
196*b0a35ca4SLi Feng Wang 
197*b0a35ca4SLi Feng Wang 
198*b0a35ca4SLi Feng Wang 
199*b0a35ca4SLi Feng Wang 
200*b0a35ca4SLi Feng Wang 	}
201*b0a35ca4SLi Feng Wang 
202*b0a35ca4SLi Feng Wang }
203