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