| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| /** |
| * |
| */ |
| |
| package svt.gui.sc; |
| |
| import static org.openoffice.test.common.Testspace.getFile; |
| import static org.openoffice.test.common.Testspace.getPath; |
| import static org.openoffice.test.common.Testspace.prepareData; |
| import static org.openoffice.test.vcl.Tester.sleep; |
| import static testlib.gui.AppTool.submitOpenDlg; |
| import static testlib.gui.AppTool.submitSaveDlg; |
| import static testlib.gui.AppTool.typeKeys; |
| import static testlib.gui.UIMap.activeMsgBox; |
| import static testlib.gui.UIMap.aoo; |
| import static testlib.gui.UIMap.app; |
| import static testlib.gui.UIMap.calc; |
| import static testlib.gui.UIMap.chartWizard; |
| import static testlib.gui.UIMap.filePickerOpen; |
| import static testlib.gui.UIMap.filePickerPath; |
| import static testlib.gui.UIMap.filterValue1; |
| import static testlib.gui.UIMap.fontworkGalleryDlg; |
| import static testlib.gui.UIMap.scAfterCurrentSheet; |
| import static testlib.gui.UIMap.scFormatCode; |
| import static testlib.gui.UIMap.scInsertSheetDlg; |
| import static testlib.gui.UIMap.scNewSheetName; |
| import static testlib.gui.UIMap.scPrintArea; |
| import static testlib.gui.UIMap.scPrintAreaType; |
| import static testlib.gui.UIMap.scValidityCriteriaAllowList; |
| import static testlib.gui.UIMap.scValidityCriteriaTabpage; |
| import static testlib.gui.UIMap.scValidityDecimalCompareOperator; |
| import static testlib.gui.UIMap.scValidityErrorAlertTabPage; |
| import static testlib.gui.UIMap.scValidityErrorMessage; |
| import static testlib.gui.UIMap.scValidityErrorMessageTitle; |
| import static testlib.gui.UIMap.scValidityShowErrorMessage; |
| import static testlib.gui.UIMap.scValiditySourceInput; |
| import static testlib.gui.UIMap.sortOptionsPage; |
| import static testlib.gui.UIMap.sortOptionsPageRangeContainsColumnLabels; |
| import static testlib.gui.UIMap.sortPage; |
| import static testlib.gui.UIMap.sortPageAscending1; |
| import static testlib.gui.UIMap.sortPageBy1; |
| import static testlib.gui.UIMap.standardFilterDlg; |
| import static testlib.gui.UIMap.startCenterOpenButton; |
| |
| import java.util.HashMap; |
| import java.util.logging.Level; |
| |
| import org.junit.AfterClass; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.TestName; |
| import org.openoffice.test.common.DataSheet; |
| import org.openoffice.test.common.FileUtil; |
| import org.openoffice.test.common.Logger; |
| |
| import testlib.gui.SCTool; |
| |
| public class BasicFuncOnCalc { |
| @Rule |
| public Logger log = Logger.getLogger(this); |
| |
| @Rule |
| public TestName testname = new TestName(); |
| |
| private static DataSheet xmlResult; |
| |
| private static int iterator = 100; |
| |
| private int i = 0; |
| |
| /** |
| * @throws java.lang.Exception |
| */ |
| @BeforeClass |
| public static void beforeClass() throws Exception { |
| xmlResult = new DataSheet(getFile("output/svt_calc.xml")); |
| xmlResult.addRow("Data", "Method", "No", "Consumed Time(MS)", "Memory(VSZ)", "Memory(RSS)", "Handles(Windows Only)"); |
| } |
| |
| @AfterClass |
| public static void afterClass() throws Exception { |
| app.stop(); |
| } |
| |
| @Before |
| public void before()throws Exception{ |
| app.start(true); |
| } |
| |
| |
| @Test |
| public void saveNewSCWithNumberFormat() { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| SCTool.selectRange("A1"); |
| typeKeys("0.3"); |
| sleep(1); |
| app.dispatch(".uno:FormatCellDialog"); |
| sleep(2); |
| scFormatCode.setText("0%"); |
| typeKeys("<enter>"); |
| sleep(1); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithPrintRange() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| app.dispatch(".uno:EditPrintArea"); |
| sleep(1); |
| scPrintAreaType.select("- user defined -"); |
| scPrintArea.setText("$A$1:$C$4"); |
| typeKeys("<enter>"); |
| SCTool.selectRange("A1"); |
| typeKeys("test"); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithText() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| SCTool.selectRange("A1"); |
| typeKeys("test"); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithDataSort() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| SCTool.selectRange("A1"); |
| typeKeys("3<down>2<down>5<down>1<down>6<down>4<down>10<down>8<down>9<down>7"); |
| sleep(1); |
| app.dispatch(".uno:DataSort"); |
| sortOptionsPage.select(); |
| sortOptionsPageRangeContainsColumnLabels.uncheck(); |
| sortPage.select(); |
| sortPageBy1.select(1); // "Column A" |
| sortPageAscending1.check(); |
| sortPage.ok(); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithInsertSheets() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| app.dispatch(".uno:Insert"); |
| scAfterCurrentSheet.check(); |
| scNewSheetName.setText("Instant Filter"); |
| scInsertSheetDlg.ok(); |
| sleep(5); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithStandardFilter() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| SCTool.selectRange("A1"); |
| typeKeys("A<down>1<down>2<down>3<down>1<down>2<down>3<down>1<down>2<down>3"); |
| sleep(1); |
| SCTool.selectRange("A1"); |
| app.dispatch(".uno:DataFilterStandardFilter"); |
| sleep(2); |
| filterValue1.setText("1"); |
| standardFilterDlg.ok(); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithInsertPic() throws Exception { |
| String pic = prepareData("image/blue_256x256.jpg"); |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| calc.menuItem("Insert->Picture->From File...").select(); |
| sleep(2); |
| filePickerPath.setText(pic); |
| sleep(1); |
| filePickerOpen.click(); |
| sleep(2); |
| typeKeys("<esc>"); |
| sleep(2); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void saveNewSCWithValidaty() throws Exception { |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| createNewSC(); |
| app.dispatch(".uno:Insert"); |
| scAfterCurrentSheet.check(); |
| scNewSheetName.setText("Data Validate"); |
| scInsertSheetDlg.ok(); |
| sleep(5); |
| SCTool.selectRange("B2:E5"); |
| sleep(2); |
| |
| app.dispatch(".uno:Validation"); |
| scValidityCriteriaTabpage.select(); |
| scValidityCriteriaAllowList.select("Whole Numbers"); |
| scValidityDecimalCompareOperator.select("greater than"); |
| scValiditySourceInput.setText("1"); |
| scValidityErrorAlertTabPage.select(); |
| scValidityShowErrorMessage.check(); |
| scValidityErrorMessageTitle.setText("Error"); |
| scValidityErrorMessage.setText("Must greater than 1"); |
| scValidityErrorAlertTabPage.ok(); |
| |
| SCTool.selectRange("B2"); |
| typeKeys("0<enter>"); |
| activeMsgBox.ok(); |
| sleep(1); |
| |
| SCTool.selectRange("E5"); |
| typeKeys("1<enter>"); |
| activeMsgBox.ok(); |
| sleep(1); |
| |
| SCTool.selectRange("E2"); |
| typeKeys("2<enter>"); |
| sleep(5); |
| saveAndReopenNewSC(i); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void insertChartToOpenedSC() throws Exception { |
| String file = prepareData("pvt/plain_11s.ods"); |
| String[][] inputStr = { { "Area", "Item", "Count" }, { "1", "2", "3" }, |
| { "4", "5", "6" }, { "7", "8", "9" }, { "10", "11", "12" } }; |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| // Insert Chart |
| app.dispatch(".uno:Insert"); |
| scAfterCurrentSheet.check(); |
| scNewSheetName.setText("Instant Chart"); |
| scInsertSheetDlg.ok(); |
| sleep(5); |
| inputCells(inputStr); |
| sleep(2); |
| SCTool.selectRange("A1:C5"); |
| calc.menuItem("Insert->Chart...").select(); |
| sleep(1); |
| chartWizard.ok(); |
| sleep(5); |
| calc.typeKeys("<esc>"); |
| sleep(5); |
| calc.typeKeys("<esc>"); |
| sleep(5); |
| calc.typeKeys("<esc>"); |
| sleep(5); |
| closeWithoutSaveSC(); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void insertPicToOpenedSC() throws Exception { |
| String file = prepareData("pvt/plain_11s.ods"); |
| String pic = prepareData("image/blue_256x256.jpg"); |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| // Insert Chart |
| app.dispatch(".uno:Insert"); |
| scAfterCurrentSheet.check(); |
| scNewSheetName.setText("Instant Graphic"); |
| scInsertSheetDlg.ok(); |
| sleep(5); |
| calc.menuItem("Insert->Picture->From File...").select(); |
| sleep(2); |
| filePickerPath.setText(pic); |
| sleep(1); |
| filePickerOpen.click(); |
| sleep(5); |
| calc.typeKeys("<esc>"); |
| sleep(2); |
| closeWithoutSaveSC(); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void insertFontWorkToOpenedSC() throws Exception { |
| String file = prepareData("pvt/plain_11s.ods"); |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| calc.menuItem("View->Toolbars->Fontwork").select(); |
| sleep(2); |
| app.dispatch(".uno:FontworkGalleryFloater"); |
| sleep(2); |
| typeKeys("<right>"); |
| fontworkGalleryDlg.ok(); |
| sleep(2); |
| calc.typeKeys("<esc>"); |
| sleep(2); |
| |
| closeWithoutSaveSC(); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| @Test |
| public void switchFileContainingChart() throws Exception { |
| String file1 = prepareData("svt/64K_Chart1.ods"); |
| String file2 = prepareData("svt/64K_Chart2.ods"); |
| String file3 = prepareData("svt/64K_Chart3.ods"); |
| String file4 = prepareData("svt/64K_Chart4.ods"); |
| String file5 = prepareData("svt/64K_Chart5.ods"); |
| String file6 = prepareData("svt/64K_Chart6.ods"); |
| |
| for (i = 1; i <= iterator; i++) { |
| long start = System.currentTimeMillis(); |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file1); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file2); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file3); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file4); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file5); |
| calc.waitForExistence(20, 2); |
| sleep(2); |
| |
| app.dispatch(".uno:Open"); |
| submitOpenDlg(file6); |
| calc.waitForExistence(20, 2); |
| |
| sleep(2); |
| |
| selectCertainFile(2); |
| sleep(2); |
| selectCertainFile(3); |
| sleep(2); |
| selectCertainFile(5); |
| sleep(2); |
| |
| closeAlldocuments(); |
| sleep(3); |
| long end = System.currentTimeMillis(); |
| addRecord(i, start, end); |
| } |
| } |
| |
| public void selectCertainFile(int k) { |
| calc.menuItem("Window").select(); |
| k += 5; |
| for (int i = 0; i < k; i++) { |
| typeKeys("<down>"); |
| } |
| typeKeys("<enter>"); |
| sleep(2); |
| } |
| |
| public void closeAlldocuments() { |
| for (int index = 3; index < 9; index++) { |
| calc.menuItem("File->Close").select(); |
| sleep(2); |
| } |
| |
| } |
| |
| public static void inputCells(String[][] inputs) { |
| String back = ""; |
| for (int i = 0; i < inputs.length; i++) { |
| calc.typeKeys(back); |
| sleep(1); |
| back = ""; |
| for (int j = 0; j < inputs[i].length; j++) { |
| typeKeys(inputs[i][j]); |
| typeKeys("<Right>"); |
| sleep(0.5); |
| back += "<Left>"; |
| } |
| back += "<enter>"; |
| } |
| sleep(2); |
| } |
| |
| private void createNewSC() { |
| app.dispatch("private:factory/scalc"); |
| } |
| |
| private void saveAndReopenNewSC(int iterator) { |
| String saveTo = getPath("temp/" + "tempSC_New" + iterator + ".ods"); |
| calc.menuItem("File->Save As...").select(); |
| FileUtil.deleteFile(saveTo); |
| submitSaveDlg(saveTo); |
| if (activeMsgBox.exists()) { |
| activeMsgBox.yes(); |
| sleep(2); |
| } |
| app.dispatch(".uno:CloseDoc"); |
| // sleep(2); |
| startCenterOpenButton.waitForExistence(30, 2); |
| startCenterOpenButton.click(); |
| submitOpenDlg(saveTo); |
| sleep(1); |
| app.dispatch(".uno:CloseDoc"); |
| } |
| |
| private void closeWithoutSaveSC() { |
| calc.menuItem("File->Close").select(); |
| activeMsgBox.no(); |
| sleep(2); |
| } |
| |
| private void addRecord(int i, long start, long end) { |
| HashMap<String, Object> perf = aoo.getPerfData(); |
| xmlResult.addRow("Data",testname.getMethodName(), i, (end - start), |
| perf.get("vsz"), perf.get("rss"), perf.get("handles")); |
| log.log( Level.INFO, "\t"+testname.getMethodName()+"["+i+"] took "+(end-start)+"ms"); |
| } |
| } |