xref: /AOO41X/test/testuno/source/fvt/uno/sc/sheet/SheetBasicTest.java (revision 44cf02803b51681da4056cdf9500cc33ee29bd2f)
1eba4d44aSLiu Zhe /* Licensed to the Apache Software Foundation (ASF) under one
2eba4d44aSLiu Zhe  * or more contributor license agreements.  See the NOTICE file
3eba4d44aSLiu Zhe  * distributed with this work for additional information
4eba4d44aSLiu Zhe  * regarding copyright ownership.  The ASF licenses this file
5eba4d44aSLiu Zhe  * to you under the Apache License, Version 2.0 (the
6eba4d44aSLiu Zhe  * "License"); you may not use this file except in compliance
7eba4d44aSLiu Zhe  * with the License.  You may obtain a copy of the License at
8eba4d44aSLiu Zhe  *
9eba4d44aSLiu Zhe  *   http://www.apache.org/licenses/LICENSE-2.0
10eba4d44aSLiu Zhe  *
11eba4d44aSLiu Zhe  * Unless required by applicable law or agreed to in writing,
12eba4d44aSLiu Zhe  * software distributed under the License is distributed on an
13eba4d44aSLiu Zhe  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14eba4d44aSLiu Zhe  * KIND, either express or implied.  See the License for the
15eba4d44aSLiu Zhe  * specific language governing permissions and limitations
16eba4d44aSLiu Zhe  * under the License.
17eba4d44aSLiu Zhe  *
18eba4d44aSLiu Zhe  *************************************************************/
19eba4d44aSLiu Zhe 
20eba4d44aSLiu Zhe package fvt.uno.sc.sheet;
21eba4d44aSLiu Zhe 
22eba4d44aSLiu Zhe import static org.junit.Assert.*;
23eba4d44aSLiu Zhe import org.junit.After;
24eba4d44aSLiu Zhe import org.junit.AfterClass;
25eba4d44aSLiu Zhe import org.junit.Before;
26eba4d44aSLiu Zhe import org.junit.BeforeClass;
27eba4d44aSLiu Zhe import org.junit.Test;
28eba4d44aSLiu Zhe import org.openoffice.test.common.Testspace;
29eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp;
30eba4d44aSLiu Zhe import testlib.uno.SCUtil;
31eba4d44aSLiu Zhe import com.sun.star.beans.XPropertySet;
32eba4d44aSLiu Zhe import com.sun.star.container.XIndexAccess;
33eba4d44aSLiu Zhe import com.sun.star.lang.XComponent;
34eba4d44aSLiu Zhe import com.sun.star.sheet.SheetLinkMode;
35eba4d44aSLiu Zhe import com.sun.star.sheet.XSheetLinkable;
36eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheet;
37eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheetDocument;
38eba4d44aSLiu Zhe import com.sun.star.sheet.XSpreadsheets;
39eba4d44aSLiu Zhe import com.sun.star.uno.UnoRuntime;
40eba4d44aSLiu Zhe import com.sun.star.util.XRefreshable;
41eba4d44aSLiu Zhe 
42cfe4bce3SLi Feng Wang /**
43cfe4bce3SLi Feng Wang  * Basic sheet operator testing
44cfe4bce3SLi Feng Wang  *
45cfe4bce3SLi Feng Wang  */
46eba4d44aSLiu Zhe public class SheetBasicTest {
47eba4d44aSLiu Zhe 	UnoApp unoApp = new UnoApp();
48eba4d44aSLiu Zhe 	XSpreadsheetDocument scDocument = null;
49eba4d44aSLiu Zhe 	XComponent scComponent = null;
50eba4d44aSLiu Zhe 
51eba4d44aSLiu Zhe 	@BeforeClass
setUpBeforeClass()52eba4d44aSLiu Zhe 	public static void setUpBeforeClass() throws Exception {
53eba4d44aSLiu Zhe 
54eba4d44aSLiu Zhe 	}
55eba4d44aSLiu Zhe 
56eba4d44aSLiu Zhe 	@AfterClass
tearDownAfterClass()57eba4d44aSLiu Zhe 	public static void tearDownAfterClass() throws Exception {
58eba4d44aSLiu Zhe 	}
59eba4d44aSLiu Zhe 
60eba4d44aSLiu Zhe 	@Before
setUp()61eba4d44aSLiu Zhe 	public void setUp() throws Exception {
62eba4d44aSLiu Zhe 		unoApp.start();
63eba4d44aSLiu Zhe 		// New a SC document
64eba4d44aSLiu Zhe 		scComponent = unoApp.newDocument("scalc");
65eba4d44aSLiu Zhe 	}
66eba4d44aSLiu Zhe 
67eba4d44aSLiu Zhe 	@After
tearDown()68eba4d44aSLiu Zhe 	public void tearDown() throws Exception {
69eba4d44aSLiu Zhe 		unoApp.closeDocument(scComponent);
70eba4d44aSLiu Zhe 		unoApp.close();
71eba4d44aSLiu Zhe 	}
72eba4d44aSLiu Zhe 
73cfe4bce3SLi Feng Wang 	/**
74cfe4bce3SLi Feng Wang 	 * test insert a sheet, rename sheet name and delete sheet
75cfe4bce3SLi Feng Wang 	 */
76eba4d44aSLiu Zhe 	@Test
insertRenameDeleteSheet()77eba4d44aSLiu Zhe 	public void insertRenameDeleteSheet() throws Exception {
78eba4d44aSLiu Zhe 		// Insert a sheet named aa after first sheet
79eba4d44aSLiu Zhe 		String sheetname = "aa";
80eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
81eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
82eba4d44aSLiu Zhe 		spreadsheets.insertNewByName(sheetname, (short) 1);
83eba4d44aSLiu Zhe 
84eba4d44aSLiu Zhe 		// active the sheet second sheet aa
85eba4d44aSLiu Zhe 		XSpreadsheet newSpreadSheet = SCUtil.getSCSheetByIndex(scDocument,
86eba4d44aSLiu Zhe 				(short) 1);
87eba4d44aSLiu Zhe 		SCUtil.setCurrentSheet(scDocument, newSpreadSheet);
88eba4d44aSLiu Zhe 
89eba4d44aSLiu Zhe 		// get the new speadsheet name
90eba4d44aSLiu Zhe 		assertEquals("actual should equals aa", sheetname,
91eba4d44aSLiu Zhe 				SCUtil.getSCSheetNameByIndex(scDocument, (short) 1));
92eba4d44aSLiu Zhe 
93eba4d44aSLiu Zhe 		// Change the Spreadsheet name
94eba4d44aSLiu Zhe 		String changedname = "SpeadsheetAfterChange";
95eba4d44aSLiu Zhe 		SCUtil.setSCSheetNameByIndex(scDocument, (short) 1, changedname);
96eba4d44aSLiu Zhe 
97eba4d44aSLiu Zhe 		// Save and reload document
98eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "TestSpreadsheet", "ods");
99eba4d44aSLiu Zhe 		XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
100eba4d44aSLiu Zhe 				scDocument, "TestSpreadsheet.ods");
101eba4d44aSLiu Zhe 
102eba4d44aSLiu Zhe 		scDocument = scDocumentTemp;
103eba4d44aSLiu Zhe 		String sheetnameaftermove = SCUtil.getSCSheetNameByIndex(scDocument,
104eba4d44aSLiu Zhe 				(short) 1);
105eba4d44aSLiu Zhe 
106eba4d44aSLiu Zhe 		// Verify the changed Spreadsheet name
107eba4d44aSLiu Zhe 		assertEquals("actual should equals SpeadsheetAfterChange", changedname,
108eba4d44aSLiu Zhe 				sheetnameaftermove);
109eba4d44aSLiu Zhe 
110eba4d44aSLiu Zhe 		scDocument.getSheets().removeByName(changedname);
111eba4d44aSLiu Zhe 
112eba4d44aSLiu Zhe 		assertFalse("actual should equals false",
113eba4d44aSLiu Zhe 				spreadsheets.hasByName(changedname));
114eba4d44aSLiu Zhe 		SCUtil.save(scDocumentTemp);
115eba4d44aSLiu Zhe 	}
116eba4d44aSLiu Zhe 
117cfe4bce3SLi Feng Wang 	/**
118cfe4bce3SLi Feng Wang 	 * Test copy and past sheet
119cfe4bce3SLi Feng Wang 	 */
120eba4d44aSLiu Zhe 	@Test
copypastesheet()121eba4d44aSLiu Zhe 	public void copypastesheet() throws Exception {
122eba4d44aSLiu Zhe 		// Insert some value into cells
123eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
124eba4d44aSLiu Zhe 		String souceSheetName = "sourcesheet";
125eba4d44aSLiu Zhe 		SCUtil.setSCSheetNameByIndex(scDocument, (short) 0, souceSheetName);
126eba4d44aSLiu Zhe 		String[][] stringValues = { { "", "Jan", "Feb", "Mar", "Apr", "Mai" },
127eba4d44aSLiu Zhe 				{ "Profit", "12.3", "43.2", "5.1", "76", "56.8" },
128eba4d44aSLiu Zhe 				{ "Rival in business", "12.2", "12.6", "17.7", "20.4", "100" }, };
129eba4d44aSLiu Zhe 		XSpreadsheet sourceSpreadSheet = SCUtil.getSCSheetByName(scDocument,
130eba4d44aSLiu Zhe 				souceSheetName);
131eba4d44aSLiu Zhe 		// input strings into sheet1
132cfe4bce3SLi Feng Wang 		SCUtil.setTextToCellRange(sourceSpreadSheet, 0, 0, stringValues);
133eba4d44aSLiu Zhe 		// copy the sheet from sourcesheet to copysheet
134eba4d44aSLiu Zhe 		String newcopysheet = "copysheet";
135eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
136eba4d44aSLiu Zhe 		spreadsheets.copyByName(souceSheetName, newcopysheet, (short) 2);
137eba4d44aSLiu Zhe 
138eba4d44aSLiu Zhe 		// Save and reload document
139eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "TestCopysheet", "xls");
140eba4d44aSLiu Zhe 		XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
141eba4d44aSLiu Zhe 				scDocument, "TestCopysheet.xls");
142eba4d44aSLiu Zhe 		scDocument = scDocumentTemp;
143eba4d44aSLiu Zhe 
144eba4d44aSLiu Zhe 		XSpreadsheet copysheet = SCUtil
145eba4d44aSLiu Zhe 				.getSCSheetByIndex(scDocument, (short) 2);
146eba4d44aSLiu Zhe 		String[][] CopystringValues = SCUtil.getTextFromCellRange(copysheet, 0,
147eba4d44aSLiu Zhe 				0, 5, 2);
148eba4d44aSLiu Zhe 		assertArrayEquals("Expect string value should be stringValues",
149eba4d44aSLiu Zhe 				stringValues, CopystringValues);
150eba4d44aSLiu Zhe 
151eba4d44aSLiu Zhe 	}
152eba4d44aSLiu Zhe 
153cfe4bce3SLi Feng Wang 	/**
154cfe4bce3SLi Feng Wang 	 * Test move sheet
155cfe4bce3SLi Feng Wang 	 */
156eba4d44aSLiu Zhe 	@Test
movesheet()157eba4d44aSLiu Zhe 	public void movesheet() throws Exception {
158eba4d44aSLiu Zhe 
159eba4d44aSLiu Zhe 		// new sc document
160eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
161eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
162eba4d44aSLiu Zhe 
163eba4d44aSLiu Zhe 		// change the first sheet name and input same value into the sheet cell
164eba4d44aSLiu Zhe 		String sheetname = "sourcesheet";
165eba4d44aSLiu Zhe 		SCUtil.setSCSheetNameByIndex(scDocument, (short) 0, sheetname);
166eba4d44aSLiu Zhe 		String[][] stringValues = { { "", "Jan", "Feb", "Mar", "Apr", "Mai" },
167eba4d44aSLiu Zhe 				{ "Profit", "12.3", "43.2", "5.1", "76", "56.8" },
168eba4d44aSLiu Zhe 				{ "Rival in business", "12.2", "12.6", "17.7", "20.4", "100" }, };
169eba4d44aSLiu Zhe 		XSpreadsheet movesheet = SCUtil
170eba4d44aSLiu Zhe 				.getSCSheetByIndex(scDocument, (short) 0);
171cfe4bce3SLi Feng Wang 		SCUtil.setTextToCellRange(movesheet, 0, 0,stringValues);
172eba4d44aSLiu Zhe 
173eba4d44aSLiu Zhe 		// Before move, get the 2nd sheet name
174eba4d44aSLiu Zhe 		String secondSheetNameBeforeMove = SCUtil.getSCSheetNameByIndex(
175eba4d44aSLiu Zhe 				scDocument, (short) 1);
176eba4d44aSLiu Zhe 
177eba4d44aSLiu Zhe 		// move the first sheet
178eba4d44aSLiu Zhe 		spreadsheets.moveByName(sheetname, (short) 2);
179eba4d44aSLiu Zhe 
180eba4d44aSLiu Zhe 		// Save and reload document
181eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "Testmovesheet", "xls");
182eba4d44aSLiu Zhe 		XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
183eba4d44aSLiu Zhe 				scDocument, "Testmovesheet.xls");
184eba4d44aSLiu Zhe 		scDocument = scDocumentTemp;
185eba4d44aSLiu Zhe 
186eba4d44aSLiu Zhe 		// After move, get the first sheet name, and verify it same as 2nd sheet
187eba4d44aSLiu Zhe 		// name before move
188eba4d44aSLiu Zhe 		String firstsheetnameAfterMove = SCUtil.getSCSheetNameByIndex(
189eba4d44aSLiu Zhe 				scDocument, (short) 0);
190eba4d44aSLiu Zhe 		assertEquals("Expect result should be Sheet2",
191eba4d44aSLiu Zhe 				secondSheetNameBeforeMove, firstsheetnameAfterMove);
192eba4d44aSLiu Zhe 
193eba4d44aSLiu Zhe 		// Get the target sheet name after move
194eba4d44aSLiu Zhe 		String sheetnameAfterMove = SCUtil.getSCSheetNameByIndex(scDocument,
195eba4d44aSLiu Zhe 				(short) 1);
196eba4d44aSLiu Zhe 		assertEquals("Expect result should be sourcesheet", sheetname,
197eba4d44aSLiu Zhe 				sheetnameAfterMove);
198eba4d44aSLiu Zhe 
199eba4d44aSLiu Zhe 		// Check the cell value after move
200eba4d44aSLiu Zhe 		XSpreadsheet sheetaftermove = SCUtil.getSCSheetByIndex(scDocument,
201eba4d44aSLiu Zhe 				(short) 1);
202eba4d44aSLiu Zhe 		String[][] stringValuesaftermove = SCUtil.getTextFromCellRange(
203eba4d44aSLiu Zhe 				sheetaftermove, 0, 0, 5, 2);
204eba4d44aSLiu Zhe 
205eba4d44aSLiu Zhe 		assertArrayEquals("Expect result should be stringValues", stringValues,
206eba4d44aSLiu Zhe 				stringValuesaftermove);
207eba4d44aSLiu Zhe 	}
208eba4d44aSLiu Zhe 
209cfe4bce3SLi Feng Wang 	/**
210cfe4bce3SLi Feng Wang 	 * Test hide and show sheet
211cfe4bce3SLi Feng Wang 	 */
212eba4d44aSLiu Zhe 	@Test
hideShowSheet()213eba4d44aSLiu Zhe 	public void hideShowSheet() throws Exception {
214eba4d44aSLiu Zhe 		// Insert a sheet named hide sheet after first sheet
215eba4d44aSLiu Zhe 		String sheetname = "hide sheet";
216eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
217eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
218eba4d44aSLiu Zhe 		spreadsheets.insertNewByName(sheetname, (short) 1);
219eba4d44aSLiu Zhe 
220eba4d44aSLiu Zhe 		// active the sheet second sheet "hide sheet"
221eba4d44aSLiu Zhe 		XSpreadsheet secondSpreadSheet = SCUtil.getSCSheetByIndex(scDocument,
222eba4d44aSLiu Zhe 				(short) 1);
223eba4d44aSLiu Zhe 		SCUtil.setCurrentSheet(scDocument, secondSpreadSheet);
224eba4d44aSLiu Zhe 		// get second sheet name and verify it should be "hide sheet"
225eba4d44aSLiu Zhe 		assertEquals("expect active sheet name will be hide sheet", sheetname,
226eba4d44aSLiu Zhe 				SCUtil.getSCSheetNameByIndex(scDocument, (short) 1));
227eba4d44aSLiu Zhe 
228eba4d44aSLiu Zhe 		// hide the sheet you insert
229eba4d44aSLiu Zhe 		XPropertySet sheetPropertySet = (XPropertySet) UnoRuntime
230eba4d44aSLiu Zhe 				.queryInterface(XPropertySet.class, secondSpreadSheet);
231eba4d44aSLiu Zhe 		boolean isvisiable = false;
232eba4d44aSLiu Zhe 		sheetPropertySet.setPropertyValue("IsVisible", isvisiable);
233eba4d44aSLiu Zhe 
234eba4d44aSLiu Zhe 		// Save and reload document
235eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "Testhideshowsheet", "xls");
236eba4d44aSLiu Zhe 		XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
237eba4d44aSLiu Zhe 				scDocument, "Testhideshowsheet.xls");
238eba4d44aSLiu Zhe 		scDocument = scDocumentTemp;
239eba4d44aSLiu Zhe 
240eba4d44aSLiu Zhe 		// get the active sheet name after hide sheet, it should be Sheet2
241eba4d44aSLiu Zhe 		String sheet2Name = SCUtil.getSCSheetNameByIndex(scDocument, (short) 2);
242eba4d44aSLiu Zhe 		String activesheetname = SCUtil.getSCActiveSheetName(scDocument);
243eba4d44aSLiu Zhe 		assertEquals("Expect sheet name should be Sheet2", sheet2Name,
244eba4d44aSLiu Zhe 				activesheetname);
245eba4d44aSLiu Zhe 
246eba4d44aSLiu Zhe 		// show sheet "hide sheet"
247eba4d44aSLiu Zhe 		sheetPropertySet = (XPropertySet) UnoRuntime.queryInterface(
248eba4d44aSLiu Zhe 				XPropertySet.class,
249eba4d44aSLiu Zhe 				SCUtil.getSCSheetByIndex(scDocument, (short) 1));
250eba4d44aSLiu Zhe 		isvisiable = true;
251eba4d44aSLiu Zhe 		sheetPropertySet.setPropertyValue("IsVisible", isvisiable);
252eba4d44aSLiu Zhe 
253eba4d44aSLiu Zhe 		// active sheet "hide sheet"
254eba4d44aSLiu Zhe 		secondSpreadSheet = SCUtil.getSCSheetByIndex(scDocument, (short) 1);
255eba4d44aSLiu Zhe 		SCUtil.setCurrentSheet(scDocument, secondSpreadSheet);
256eba4d44aSLiu Zhe 
257eba4d44aSLiu Zhe 		// Get current active sheet name, verify it same as "hide sheet"
258eba4d44aSLiu Zhe 		String currentactivesheetname = SCUtil.getSCActiveSheetName(scDocument);
259eba4d44aSLiu Zhe 		assertEquals("Expect active sheet name is hidesheet", sheetname,
260eba4d44aSLiu Zhe 				currentactivesheetname);
261eba4d44aSLiu Zhe 		SCUtil.save(scDocument);
262eba4d44aSLiu Zhe 	}
263eba4d44aSLiu Zhe 
264cfe4bce3SLi Feng Wang 	/**
265cfe4bce3SLi Feng Wang 	 * Test sheet tab color
266cfe4bce3SLi Feng Wang 	 */
267eba4d44aSLiu Zhe 	@Test
sheetColor()268eba4d44aSLiu Zhe 	public void sheetColor() throws Exception {
269eba4d44aSLiu Zhe 		// get first sheet propertyset
270eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
271eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
272eba4d44aSLiu Zhe 		XSpreadsheet firstSpreadSheet = SCUtil.getSCSheetByIndex(scDocument,
273eba4d44aSLiu Zhe 				(short) 0);
274eba4d44aSLiu Zhe 		XPropertySet sheet1PropertySet = (XPropertySet) UnoRuntime
275eba4d44aSLiu Zhe 				.queryInterface(XPropertySet.class, firstSpreadSheet);
276eba4d44aSLiu Zhe 
277cfe4bce3SLi Feng Wang 		// Set sheet tab color to 111
278eba4d44aSLiu Zhe 		sheet1PropertySet.setPropertyValue("TabColor", 111);
279eba4d44aSLiu Zhe 
280eba4d44aSLiu Zhe 		// copy the color sheet to new sheet
281eba4d44aSLiu Zhe 		spreadsheets.copyByName(
282eba4d44aSLiu Zhe 				SCUtil.getSCSheetNameByIndex(scDocument, (short) 0),
283eba4d44aSLiu Zhe 				"newsheet", (short) 3);
284eba4d44aSLiu Zhe 
285eba4d44aSLiu Zhe 		// Save and reopen the document
286eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "Testcolorsheet", "ods");
287eba4d44aSLiu Zhe 		XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
288eba4d44aSLiu Zhe 				scDocument, "Testcolorsheet.ods");
289eba4d44aSLiu Zhe 		scDocument = scDocumentTemp;
290eba4d44aSLiu Zhe 
291eba4d44aSLiu Zhe 		// Get first sheet color
292eba4d44aSLiu Zhe 		sheet1PropertySet = (XPropertySet) UnoRuntime.queryInterface(
293eba4d44aSLiu Zhe 				XPropertySet.class,
294eba4d44aSLiu Zhe 				SCUtil.getSCSheetByIndex(scDocument, (short) 0));
295eba4d44aSLiu Zhe 		int firstSheetcolorid = (Integer) sheet1PropertySet
296eba4d44aSLiu Zhe 				.getPropertyValue("TabColor");
297eba4d44aSLiu Zhe 
298eba4d44aSLiu Zhe 		// Get the copyed sheet color
299eba4d44aSLiu Zhe 		XPropertySet newsheetPropertySet = (XPropertySet) UnoRuntime
300eba4d44aSLiu Zhe 				.queryInterface(XPropertySet.class,
301eba4d44aSLiu Zhe 						SCUtil.getSCSheetByIndex(scDocument, (short) 3));
302eba4d44aSLiu Zhe 		int copySheetcolorid = (Integer) newsheetPropertySet
303eba4d44aSLiu Zhe 				.getPropertyValue("TabColor");
304eba4d44aSLiu Zhe 
305eba4d44aSLiu Zhe 		// Verify first sheet color changed successfully
306eba4d44aSLiu Zhe 		assertEquals("Expect color should be 111", 111, firstSheetcolorid);
307eba4d44aSLiu Zhe 
308eba4d44aSLiu Zhe 		// Verify first sheet color same as copy sheet color
309eba4d44aSLiu Zhe 		assertEquals("Expect color should be 111", firstSheetcolorid,
310eba4d44aSLiu Zhe 				copySheetcolorid);
311eba4d44aSLiu Zhe 	}
312eba4d44aSLiu Zhe 
313cfe4bce3SLi Feng Wang 	/**
314cfe4bce3SLi Feng Wang 	 * test insert sheet from other file
315cfe4bce3SLi Feng Wang 	 */
316*44cf0280SCarl Marcum 	// FIXME: locks up on update link confirmation dialog.
317*44cf0280SCarl Marcum 	@Test(timeout = 15000)
insertSheetFromfile()318eba4d44aSLiu Zhe 	public void insertSheetFromfile() throws Exception {
319eba4d44aSLiu Zhe 		// New a document source.xls, add value to 3 sheet
320eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
321eba4d44aSLiu Zhe 		XSpreadsheets spreadsheets = scDocument.getSheets();
322eba4d44aSLiu Zhe 		XSpreadsheet firstSheet = SCUtil.getSCSheetByIndex(scDocument,
323eba4d44aSLiu Zhe 				(short) 0);
324eba4d44aSLiu Zhe 		XSpreadsheet secondSheet = SCUtil.getSCSheetByIndex(scDocument,
325eba4d44aSLiu Zhe 				(short) 1);
326eba4d44aSLiu Zhe 		XSpreadsheet thirdSheet = SCUtil.getSCSheetByIndex(scDocument,
327eba4d44aSLiu Zhe 				(short) 2);
328eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(firstSheet, 1, 2, "=2*2");
329eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(secondSheet, 1, 2, "=2*2");
330eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(thirdSheet, 1, 2, "=2*2");
331eba4d44aSLiu Zhe 
332eba4d44aSLiu Zhe 		// Save and close this document
333eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "source", "xls");
334eba4d44aSLiu Zhe 		SCUtil.closeFile(scDocument);
335eba4d44aSLiu Zhe 
336eba4d44aSLiu Zhe 		// get source document URL
337eba4d44aSLiu Zhe 		String SourcestoreUrl = Testspace.getUrl("output/sc/" + "source" + "."
338eba4d44aSLiu Zhe 				+ "xls");
339eba4d44aSLiu Zhe 
340eba4d44aSLiu Zhe 		// New a document
341eba4d44aSLiu Zhe 		scComponent = unoApp.newDocument("scalc");
342eba4d44aSLiu Zhe 		scDocument = SCUtil.getSCDocument(scComponent);
343eba4d44aSLiu Zhe 		spreadsheets = scDocument.getSheets();
344eba4d44aSLiu Zhe 		// Insert firstexternalsheet sheet, link with Sheet1 in source document
345eba4d44aSLiu Zhe 		// and the link mode is NORMAL
346eba4d44aSLiu Zhe 		spreadsheets.insertNewByName("firstexternalsheet", (short) 3);
347eba4d44aSLiu Zhe 		XSpreadsheet firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument,
348eba4d44aSLiu Zhe 				(short) 3);
349eba4d44aSLiu Zhe 		XSheetLinkable xfirstSheetLinkable = (XSheetLinkable) UnoRuntime
350eba4d44aSLiu Zhe 				.queryInterface(XSheetLinkable.class, firstexternalsheet);
351eba4d44aSLiu Zhe 		xfirstSheetLinkable.link(SourcestoreUrl, "", "MS Excel 97", "",
352eba4d44aSLiu Zhe 				SheetLinkMode.NORMAL);
353eba4d44aSLiu Zhe 
354eba4d44aSLiu Zhe 		// Insert secondexternalsheet sheet, link with Sheet2 in source document
355eba4d44aSLiu Zhe 		// and the link mode is VALUE
356eba4d44aSLiu Zhe 		spreadsheets.insertNewByName("secondexternalsheet", (short) 4);
357eba4d44aSLiu Zhe 		XSpreadsheet secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument,
358eba4d44aSLiu Zhe 				(short) 4);
359eba4d44aSLiu Zhe 		XSheetLinkable xsecondSheetLinkable = (XSheetLinkable) UnoRuntime
360eba4d44aSLiu Zhe 				.queryInterface(XSheetLinkable.class, secondexternalsheet);
361eba4d44aSLiu Zhe 		xsecondSheetLinkable.link(SourcestoreUrl, "Sheet2", "MS Excel 97", "",
362eba4d44aSLiu Zhe 				SheetLinkMode.VALUE);
363eba4d44aSLiu Zhe 
364eba4d44aSLiu Zhe 		// Insert secondexternalsheet sheet, link with Sheet2 in source document
365eba4d44aSLiu Zhe 		// and the link mode is NONE
366eba4d44aSLiu Zhe 		spreadsheets.insertNewByName("thirdexternalsheet", (short) 5);
367eba4d44aSLiu Zhe 		XSpreadsheet thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument,
368eba4d44aSLiu Zhe 				(short) 5);
369eba4d44aSLiu Zhe 		XSheetLinkable xthirdSheetLinkable = (XSheetLinkable) UnoRuntime
370eba4d44aSLiu Zhe 				.queryInterface(XSheetLinkable.class, thirdexternalsheet);
371eba4d44aSLiu Zhe 		xthirdSheetLinkable.link(SourcestoreUrl, "Sheet3", "MS Excel 97", "",
372eba4d44aSLiu Zhe 				SheetLinkMode.NONE);
373eba4d44aSLiu Zhe 
374eba4d44aSLiu Zhe 		// Verify firstexternalsheet
375eba4d44aSLiu Zhe 		assertEquals("Expect formula should be =2*2", "=2*2",
376eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2));
377eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 4", "4",
378eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(firstexternalsheet, 1, 2));
379eba4d44aSLiu Zhe 
380eba4d44aSLiu Zhe 		// Verify secondexternalsheet
381eba4d44aSLiu Zhe 		assertEquals("Expect formula should be 4", "4",
382eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2));
383eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 4", "4",
384eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(secondexternalsheet, 1, 2));
385eba4d44aSLiu Zhe 
386eba4d44aSLiu Zhe 		// Verify thirdexternalsheet
387eba4d44aSLiu Zhe 		assertEquals("Expect formula should be blank", "",
388eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2));
389eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be blank", "",
390eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(thirdexternalsheet, 1, 2));
391eba4d44aSLiu Zhe 
392eba4d44aSLiu Zhe 		// save document and verify the linked sheet again
393eba4d44aSLiu Zhe 		SCUtil.saveFileAs(scComponent, "linked", "ods");
394eba4d44aSLiu Zhe 		XSpreadsheetDocument tempscDocument = SCUtil.reloadFile(unoApp,
395eba4d44aSLiu Zhe 				scDocument, "linked.ods");
396eba4d44aSLiu Zhe 		scDocument = tempscDocument;
397eba4d44aSLiu Zhe 		firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 3);
398eba4d44aSLiu Zhe 		secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 4);
399eba4d44aSLiu Zhe 		thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 5);
400eba4d44aSLiu Zhe 
401eba4d44aSLiu Zhe 		// Verify firstexternalsheet
402eba4d44aSLiu Zhe 		assertEquals("Expect formula should be =2*2", "=2*2",
403eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2));
404eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 4", "4",
405eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(firstexternalsheet, 1, 2));
406eba4d44aSLiu Zhe 
407eba4d44aSLiu Zhe 		// Verify secondexternalsheet
408eba4d44aSLiu Zhe 		assertEquals("Expect formula should be 4", "4",
409eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2));
410eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 4", "4",
411eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(secondexternalsheet, 1, 2));
412eba4d44aSLiu Zhe 
413eba4d44aSLiu Zhe 		// Verify thirdexternalsheet
414eba4d44aSLiu Zhe 		assertEquals("Expect formula should be blank", "",
415eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2));
416eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be blank", "",
417eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(thirdexternalsheet, 1, 2));
418eba4d44aSLiu Zhe 
419eba4d44aSLiu Zhe 		//save and close document
420eba4d44aSLiu Zhe 		SCUtil.save(scDocument);
421eba4d44aSLiu Zhe 		SCUtil.closeFile(scDocument);
422eba4d44aSLiu Zhe 
423eba4d44aSLiu Zhe 		//Open souce document and change the value in souce document
424eba4d44aSLiu Zhe 		XSpreadsheetDocument sourcescDocument = SCUtil.reloadFile(unoApp,
425eba4d44aSLiu Zhe 				scDocument, "source.xls");
426eba4d44aSLiu Zhe 		firstSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 0);
427eba4d44aSLiu Zhe 		secondSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 1);
428eba4d44aSLiu Zhe 		thirdSheet = SCUtil.getSCSheetByIndex(sourcescDocument, (short) 2);
429eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(firstSheet, 1, 2, "=3*3");
430eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(secondSheet, 1, 2, "=3*3");
431eba4d44aSLiu Zhe 		SCUtil.setFormulaToCell(thirdSheet, 1, 2, "=3*3");
432eba4d44aSLiu Zhe 		SCUtil.save(sourcescDocument);
433eba4d44aSLiu Zhe 		SCUtil.closeFile(sourcescDocument);
434eba4d44aSLiu Zhe 
435eba4d44aSLiu Zhe 		//Open link document
436eba4d44aSLiu Zhe 		tempscDocument = SCUtil.reloadFile(unoApp, scDocument, "linked.ods");
437eba4d44aSLiu Zhe 		scDocument = tempscDocument;
438eba4d44aSLiu Zhe 		spreadsheets = scDocument.getSheets();
439eba4d44aSLiu Zhe 
440eba4d44aSLiu Zhe 		firstexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 3);
441eba4d44aSLiu Zhe 		secondexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 4);
442eba4d44aSLiu Zhe 		thirdexternalsheet = SCUtil.getSCSheetByIndex(scDocument, (short) 5);
443eba4d44aSLiu Zhe 
444eba4d44aSLiu Zhe 		//get Object SheetLinks for document
445eba4d44aSLiu Zhe 		XPropertySet sheetpropertyset = (XPropertySet) UnoRuntime
446eba4d44aSLiu Zhe 				.queryInterface(XPropertySet.class, scDocument);
447eba4d44aSLiu Zhe 		Object sheetLinks = sheetpropertyset.getPropertyValue("SheetLinks");
448eba4d44aSLiu Zhe 
449eba4d44aSLiu Zhe 		XIndexAccess xsheetlinks = (XIndexAccess) UnoRuntime.queryInterface(
450eba4d44aSLiu Zhe 				XIndexAccess.class, sheetLinks);
451eba4d44aSLiu Zhe 
452eba4d44aSLiu Zhe 		//Refresh all links
453eba4d44aSLiu Zhe 		for (int i = 0; i < xsheetlinks.getCount(); i++) {
454eba4d44aSLiu Zhe 			Object sheetlink = xsheetlinks.getByIndex(i);
455eba4d44aSLiu Zhe 			XRefreshable xsheetRefreshable = (XRefreshable) UnoRuntime
456eba4d44aSLiu Zhe 					.queryInterface(XRefreshable.class, sheetlink);
457eba4d44aSLiu Zhe 			xsheetRefreshable.refresh();
458eba4d44aSLiu Zhe 		}
459eba4d44aSLiu Zhe 
460eba4d44aSLiu Zhe 		// Verify firstexternalsheet
461eba4d44aSLiu Zhe 		assertEquals("Expect formula should be =3*3", "=3*3",
462eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(firstexternalsheet, 1, 2));
463eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 9", "9",
464eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(firstexternalsheet, 1, 2));
465eba4d44aSLiu Zhe 
466eba4d44aSLiu Zhe 		// Verify secondexternalsheet
467eba4d44aSLiu Zhe 		assertEquals("Expect formula should be 9", "9",
468eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(secondexternalsheet, 1, 2));
469eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be 9", "9",
470eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(secondexternalsheet, 1, 2));
471eba4d44aSLiu Zhe 
472eba4d44aSLiu Zhe 		// Verify thirdexternalsheet
473eba4d44aSLiu Zhe 		assertEquals("Expect formula should be blank", "",
474eba4d44aSLiu Zhe 				SCUtil.getFormulaFromCell(thirdexternalsheet, 1, 2));
475eba4d44aSLiu Zhe 		assertEquals("Expect formula result should be blank", "",
476eba4d44aSLiu Zhe 				SCUtil.getTextFromCell(thirdexternalsheet, 1, 2));
477eba4d44aSLiu Zhe 
478eba4d44aSLiu Zhe 		//Save the document before close
479eba4d44aSLiu Zhe 		SCUtil.save(scDocument);
480eba4d44aSLiu Zhe 
481eba4d44aSLiu Zhe 	}
482eba4d44aSLiu Zhe 
483eba4d44aSLiu Zhe }
484