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