xref: /trunk/test/testgui/source/svt/gui/sc/BasicFuncOnCalc.java (revision 739258c9671d8507a59563ee38ab2b7939f6ffa6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 /**
23  *
24  */
25 
26 package svt.gui.sc;
27 
28 import static org.openoffice.test.common.Testspace.*;
29 import static org.openoffice.test.vcl.Tester.*;
30 import static testlib.gui.AppTool.*;
31 import static testlib.gui.UIMap.*;
32 
33 import java.io.FileOutputStream;
34 import java.io.PrintStream;
35 import java.util.HashMap;
36 
37 import org.junit.After;
38 import org.junit.AfterClass;
39 import org.junit.Before;
40 import org.junit.BeforeClass;
41 import org.junit.Ignore;
42 import org.junit.Rule;
43 import org.junit.Test;
44 import org.junit.rules.TestName;
45 import org.openoffice.test.OpenOffice;
46 import org.openoffice.test.common.DataSheet;
47 import org.openoffice.test.common.FileUtil;
48 import org.openoffice.test.common.Logger;
49 import org.openoffice.test.common.SystemUtil;
50 import org.openoffice.test.common.Testspace;
51 
52 import testlib.gui.SCTool;
53 
54 public class BasicFuncOnCalc {
55     @Rule
56     public Logger log = Logger.getLogger(this);
57 
58     @Rule
59     public TestName testname = new TestName();
60 
61     private static DataSheet xmlResult;
62 
63     private String pid = null;
64 
65     private static int iterator = 100;
66 
67     private int i = 0;
68 
69     /**
70      * @throws java.lang.Exception
71      */
72     @BeforeClass
73     public static void beforeClass() throws Exception {
74 
75         xmlResult = new DataSheet(getFile("output/svt_gui_sc.xml"));
76         xmlResult.addRow("BasicFuncOnCalc", "Method", "Iterator",
77                 "Consumed Time(MS)", "Memory(KB)", "CPU(%)");
78     }
79 
80     @AfterClass
81     public static void afterClass() throws Exception {
82         app.stop();
83     }
84 
85     @Before
86     public void before()throws Exception{
87         app.start(true);
88     }
89 
90 
91     @Test
92     public void saveNewSCWithNumberFormat() {
93         for (i = 1; i <= iterator; i++) {
94             long start = System.currentTimeMillis();
95             createNewSC();
96             SCTool.selectRange("A1");
97             typeKeys("0.3");
98             sleep(1);
99             app.dispatch(".uno:FormatCellDialog");
100             sleep(2);
101             scFormatCode.setText("0%");
102             typeKeys("<enter>");
103             sleep(1);
104             saveAndReopenNewSC(i);
105             long end = System.currentTimeMillis();
106             addRecord(i, start, end);
107         }
108     }
109 
110     @Test
111     public void saveNewSCWithPrintRange() throws Exception {
112         for (i = 1; i <= iterator; i++) {
113             long start = System.currentTimeMillis();
114             createNewSC();
115             app.dispatch(".uno:EditPrintArea");
116             sleep(1);
117             scPrintAreaType.select("- user defined -");
118             scPrintArea.setText("$A$1:$C$4");
119             typeKeys("<enter>");
120             SCTool.selectRange("A1");
121             typeKeys("test");
122             saveAndReopenNewSC(i);
123             long end = System.currentTimeMillis();
124             addRecord(i, start, end);
125         }
126     }
127 
128     @Test
129     public void saveNewSCWithText() throws Exception {
130         for (i = 1; i <= iterator; i++) {
131             long start = System.currentTimeMillis();
132             createNewSC();
133             SCTool.selectRange("A1");
134             typeKeys("test");
135             saveAndReopenNewSC(i);
136             long end = System.currentTimeMillis();
137             addRecord(i, start, end);
138         }
139     }
140 
141     @Test
142     public void saveNewSCWithDataSort() throws Exception {
143         for (i = 1; i <= iterator; i++) {
144             long start = System.currentTimeMillis();
145             createNewSC();
146             SCTool.selectRange("A1");
147             typeKeys("3<down>2<down>5<down>1<down>6<down>4<down>10<down>8<down>9<down>7");
148             sleep(1);
149             app.dispatch(".uno:DataSort");
150             sortOptionsPage.select();
151             sortOptionsPageRangeContainsColumnLabels.uncheck();
152             sortPage.select();
153             sortPageBy1.select(1); // "Column A"
154             sortPageAscending1.check();
155             sortPage.ok();
156             saveAndReopenNewSC(i);
157             long end = System.currentTimeMillis();
158             addRecord(i, start, end);
159         }
160     }
161 
162     @Test
163     public void saveNewSCWithInsertSheets() throws Exception {
164         for (i = 1; i <= iterator; i++) {
165             long start = System.currentTimeMillis();
166             createNewSC();
167             app.dispatch(".uno:Insert");
168             scAfterCurrentSheet.check();
169             scNewSheetName.setText("Instant Filter");
170             scInsertSheetDlg.ok();
171             sleep(5);
172             saveAndReopenNewSC(i);
173             long end = System.currentTimeMillis();
174             addRecord(i, start, end);
175         }
176     }
177 
178     @Test
179     public void saveNewSCWithStandardFilter() throws Exception {
180         for (i = 1; i <= iterator; i++) {
181             long start = System.currentTimeMillis();
182             createNewSC();
183             SCTool.selectRange("A1");
184             typeKeys("A<down>1<down>2<down>3<down>1<down>2<down>3<down>1<down>2<down>3");
185             sleep(1);
186             SCTool.selectRange("A1");
187             app.dispatch(".uno:DataFilterStandardFilter");
188             sleep(2);
189             filterValue1.setText("1");
190             standardFilterDlg.ok();
191             saveAndReopenNewSC(i);
192             long end = System.currentTimeMillis();
193             addRecord(i, start, end);
194         }
195     }
196 
197     @Test
198     public void saveNewSCWithInsertPic() throws Exception {
199         String pic = prepareData("image/blue_256x256.jpg");
200         for (i = 1; i <= iterator; i++) {
201             long start = System.currentTimeMillis();
202             createNewSC();
203             calc.menuItem("Insert->Picture->From File...").select();
204             sleep(2);
205             filePickerPath.setText(pic);
206             sleep(1);
207             filePickerOpen.click();
208             sleep(2);
209             typeKeys("<esc>");
210             sleep(2);
211             saveAndReopenNewSC(i);
212             long end = System.currentTimeMillis();
213             addRecord(i, start, end);
214         }
215     }
216 
217     @Test
218     public void saveNewSCWithValidaty() throws Exception {
219         for (i = 1; i <= iterator; i++) {
220             long start = System.currentTimeMillis();
221             createNewSC();
222             app.dispatch(".uno:Insert");
223             scAfterCurrentSheet.check();
224             scNewSheetName.setText("Data Validate");
225             scInsertSheetDlg.ok();
226             sleep(5);
227             SCTool.selectRange("B2:E5");
228             sleep(2);
229 
230             app.dispatch(".uno:Validation");
231             scValidityCriteriaTabpage.select();
232             scValidityCriteriaAllowList.select("Whole Numbers");
233             scValidityDecimalCompareOperator.select("greater than");
234             scValiditySourceInput.setText("1");
235             scValidityErrorAlertTabPage.select();
236             scValidityShowErrorMessage.check();
237             scValidityErrorMessageTitle.setText("Error");
238             scValidityErrorMessage.setText("Must greater than 1");
239             scValidityErrorAlertTabPage.ok();
240 
241             SCTool.selectRange("B2");
242             typeKeys("0<enter>");
243             activeMsgBox.ok();
244             sleep(1);
245 
246             SCTool.selectRange("E5");
247             typeKeys("1<enter>");
248             activeMsgBox.ok();
249             sleep(1);
250 
251             SCTool.selectRange("E2");
252             typeKeys("2<enter>");
253             sleep(5);
254             saveAndReopenNewSC(i);
255             long end = System.currentTimeMillis();
256             addRecord(i, start, end);
257         }
258     }
259 
260     @Test
261     public void insertChartToOpenedSC() throws Exception {
262         String file = prepareData("pvt/plain_11s.ods");
263         String[][] inputStr = { { "Area", "Item", "Count" }, { "1", "2", "3" },
264                 { "4", "5", "6" }, { "7", "8", "9" }, { "10", "11", "12" } };
265         for (i = 1; i <= iterator; i++) {
266             long start = System.currentTimeMillis();
267             app.dispatch(".uno:Open");
268             submitOpenDlg(file);
269             calc.waitForExistence(20, 2);
270             sleep(2);
271 
272             // Insert Chart
273             app.dispatch(".uno:Insert");
274             scAfterCurrentSheet.check();
275             scNewSheetName.setText("Instant Chart");
276             scInsertSheetDlg.ok();
277             sleep(5);
278             inputCells(inputStr);
279             sleep(2);
280             SCTool.selectRange("A1:C5");
281             calc.menuItem("Insert->Chart...").select();
282             sleep(1);
283             chartWizard.ok();
284             sleep(5);
285             calc.typeKeys("<esc>");
286             sleep(5);
287             calc.typeKeys("<esc>");
288             sleep(5);
289             calc.typeKeys("<esc>");
290             sleep(5);
291             closeWithoutSaveSC();
292             long end = System.currentTimeMillis();
293             addRecord(i, start, end);
294         }
295     }
296 
297     @Test
298     public void insertPicToOpenedSC() throws Exception {
299         String file = prepareData("pvt/plain_11s.ods");
300         String pic = prepareData("image/blue_256x256.jpg");
301         for (i = 1; i <= iterator; i++) {
302             long start = System.currentTimeMillis();
303             app.dispatch(".uno:Open");
304             submitOpenDlg(file);
305             calc.waitForExistence(20, 2);
306             sleep(2);
307 
308             // Insert Chart
309             app.dispatch(".uno:Insert");
310             scAfterCurrentSheet.check();
311             scNewSheetName.setText("Instant Graphic");
312             scInsertSheetDlg.ok();
313             sleep(5);
314             calc.menuItem("Insert->Picture->From File...").select();
315             sleep(2);
316             filePickerPath.setText(pic);
317             sleep(1);
318             filePickerOpen.click();
319             sleep(5);
320             calc.typeKeys("<esc>");
321             sleep(2);
322             closeWithoutSaveSC();
323             long end = System.currentTimeMillis();
324             addRecord(i, start, end);
325         }
326     }
327 
328     @Test
329     public void insertFontWorkToOpenedSC() throws Exception {
330         String file = prepareData("pvt/plain_11s.ods");
331         for (i = 1; i <= iterator; i++) {
332             long start = System.currentTimeMillis();
333             app.dispatch(".uno:Open");
334             submitOpenDlg(file);
335             calc.waitForExistence(20, 2);
336             sleep(2);
337 
338             calc.menuItem("View->Toolbars->Fontwork").select();
339             sleep(2);
340             app.dispatch(".uno:FontworkGalleryFloater");
341             sleep(2);
342             typeKeys("<right>");
343             fontworkGalleryDlg.ok();
344             sleep(2);
345             calc.typeKeys("<esc>");
346             sleep(2);
347 
348             closeWithoutSaveSC();
349             long end = System.currentTimeMillis();
350             addRecord(i, start, end);
351         }
352     }
353 
354     @Test
355     public void switchFileContainingChart() throws Exception {
356         String file1 = prepareData("svt/64K_Chart1.ods");
357         String file2 = prepareData("svt/64K_Chart2.ods");
358         String file3 = prepareData("svt/64K_Chart3.ods");
359         String file4 = prepareData("svt/64K_Chart4.ods");
360         String file5 = prepareData("svt/64K_Chart5.ods");
361         String file6 = prepareData("svt/64K_Chart6.ods");
362 
363         for (i = 1; i <= iterator; i++) {
364             long start = System.currentTimeMillis();
365             app.dispatch(".uno:Open");
366             submitOpenDlg(file1);
367             calc.waitForExistence(20, 2);
368             sleep(2);
369 
370             app.dispatch(".uno:Open");
371             submitOpenDlg(file2);
372             calc.waitForExistence(20, 2);
373             sleep(2);
374 
375             app.dispatch(".uno:Open");
376             submitOpenDlg(file3);
377             calc.waitForExistence(20, 2);
378             sleep(2);
379 
380             app.dispatch(".uno:Open");
381             submitOpenDlg(file4);
382             calc.waitForExistence(20, 2);
383             sleep(2);
384 
385             app.dispatch(".uno:Open");
386             submitOpenDlg(file5);
387             calc.waitForExistence(20, 2);
388             sleep(2);
389 
390             app.dispatch(".uno:Open");
391             submitOpenDlg(file6);
392             calc.waitForExistence(20, 2);
393 
394             sleep(2);
395 
396             selectCertainFile(2);
397             sleep(2);
398             selectCertainFile(3);
399             sleep(2);
400             selectCertainFile(5);
401             sleep(2);
402 
403             closeAlldocuments();
404             sleep(3);
405             long end = System.currentTimeMillis();
406             addRecord(i, start, end);
407         }
408     }
409 
410     public void selectCertainFile(int k) {
411         calc.menuItem("Window").select();
412         k += 5;
413         for (int i = 0; i < k; i++) {
414             typeKeys("<down>");
415         }
416         typeKeys("<enter>");
417         sleep(2);
418     }
419 
420     public void closeAlldocuments() {
421         for (int index = 3; index < 9; index++) {
422             calc.menuItem("File->Close").select();
423             sleep(2);
424         }
425 
426     }
427 
428     public static void inputCells(String[][] inputs) {
429         String back = "";
430         for (int i = 0; i < inputs.length; i++) {
431             calc.typeKeys(back);
432             sleep(1);
433             back = "";
434             for (int j = 0; j < inputs[i].length; j++) {
435                 typeKeys(inputs[i][j]);
436                 typeKeys("<Right>");
437                 sleep(0.5);
438                 back += "<Left>";
439             }
440             back += "<enter>";
441         }
442         sleep(2);
443     }
444 
445     private void createNewSC() {
446         app.dispatch("private:factory/scalc");
447     }
448 
449     private void saveAndReopenNewSC(int iterator) {
450         String saveTo = getPath("temp/" + "tempSC_New" + iterator + ".ods");
451         calc.menuItem("File->Save As...").select();
452         FileUtil.deleteFile(saveTo);
453         submitSaveDlg(saveTo);
454         if (activeMsgBox.exists()) {
455             activeMsgBox.yes();
456             sleep(2);
457         }
458         app.dispatch(".uno:CloseDoc");
459         // sleep(2);
460         startCenterOpenButton.waitForExistence(30, 2);
461         startCenterOpenButton.click();
462         submitOpenDlg(saveTo);
463         sleep(1);
464         app.dispatch(".uno:CloseDoc");
465     }
466 
467     private void closeWithoutSaveSC() {
468         calc.menuItem("File->Close").select();
469         activeMsgBox.no();
470         sleep(2);
471     }
472 
473     private HashMap<String, Object> getPerfData() {
474         HashMap<String, Object> proccessInfo = SystemUtil
475                 .findProcess(".*(soffice\\.bin|soffice\\.exe|soffice).*");
476         String pid = (String) proccessInfo.get("pid");
477         return SystemUtil.getProcessPerfData(pid);
478     }
479 
480     private void addRecord(int i, long start, long end) {
481         HashMap<String, Object> perf = getPerfData();
482         xmlResult.addRow("BasicFuncOnCalc",testname.getMethodName(), i, (end - start),
483                 perf.get("rss"), perf.get("pcpu"));
484     }
485 }
486