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