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