| /************************************************************** | |
| * | |
| * 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 pvt.gui; | |
| import static org.junit.Assert.*; | |
| import static org.openoffice.test.common.Testspace.*; | |
| import static org.openoffice.test.vcl.Tester.*; | |
| import static testlib.gui.AppTool.*; | |
| import static testlib.gui.UIMap.*; | |
| import java.awt.Rectangle; | |
| import java.util.HashMap; | |
| import org.junit.After; | |
| 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.OpenOffice; | |
| import org.openoffice.test.common.Condition; | |
| import org.openoffice.test.common.DataSheet; | |
| import org.openoffice.test.common.GraphicsUtil; | |
| import org.openoffice.test.common.Logger; | |
| public class Benchmark { | |
| @Rule | |
| public Logger log = Logger.getLogger(this); | |
| @Rule | |
| public TestName testname = new TestName(); | |
| private static DataSheet result; | |
| private static final double INTERVAL = 0.1; | |
| private static int repeat = 2; | |
| private int i = 0; | |
| public Benchmark() { | |
| } | |
| @BeforeClass | |
| public static void beforeClass() throws Exception { | |
| OpenOffice.killAll(); | |
| result = new DataSheet(getFile("output/" + Benchmark.class.getName() + ".xml")); | |
| result.addRow("data", "Scenario", "No", "Consumed Time", "Memory(VSZ)", "Memory(RSS)", "Handles(Windows Only)"); | |
| } | |
| @AfterClass | |
| public static void afterClass() throws Exception { | |
| //app.stop(); | |
| } | |
| @Before | |
| public void before() { | |
| app.start(true); | |
| app.quit(); | |
| } | |
| @After | |
| public void after() { | |
| if (i < repeat) | |
| result.addRow("data", testname.getMethodName(), i, "err", "err", "err", "err", "err"); | |
| } | |
| private void addRecord(long start, long end) { | |
| sleep(2); | |
| HashMap<String, Object> perf = aoo.getPerfData(); | |
| result.addRow("data", testname.getMethodName(), i, (end - start), perf.get("vsz"), perf.get("rss"), perf.get("handles")); | |
| } | |
| @Test | |
| public void coolStartup() throws Exception { | |
| for (i = 0; i < repeat; i++) { | |
| aoo.cleanUserInstallation(); | |
| assertFalse("User profile exists", aoo.getUserInstallation().exists()); | |
| aoo.start(); | |
| long start = System.currentTimeMillis(); | |
| startcenter.waitForExistence(120, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void warmStartup() throws Exception { | |
| for (i = 0; i < repeat; i++) { | |
| assertTrue("User profile exists", aoo.getUserInstallation().exists()); | |
| aoo.start(); | |
| long start = System.currentTimeMillis(); | |
| startcenter.waitForExistence(120, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void newTextDocument() { | |
| for (i = 0; i < repeat; i++) { | |
| app.start(); | |
| startCenterWriterButton.click(0.5, 0.5); | |
| long start = System.currentTimeMillis(); | |
| writer.waitForExistence(60, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void newSpreadsheet() { | |
| for (i = 0; i < repeat; i++) { | |
| app.start(); | |
| startCenterCalcButton.click(0.5, 0.5); | |
| long start = System.currentTimeMillis(); | |
| calc.waitForExistence(60, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void newPresentation() { | |
| for (i = 0; i < repeat; i++) { | |
| app.start(); | |
| startCenterImpressButton.click(0.5, 0.5); | |
| presentationWizard.click(0.9, 0.95); | |
| long start = System.currentTimeMillis(); | |
| impress.waitForExistence(60, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void slideShow() { | |
| String path = prepareData("pvt/slideshow.odp"); | |
| final Rectangle rect = GraphicsUtil.getScreenRectangle(); | |
| // when slide show is running, top-center area will be filled with green | |
| rect.setRect(rect.getCenterX(), 2, 2, 2); | |
| for (i = 0; i < repeat; i++) { | |
| app.start(); | |
| open(path); | |
| impress.waitForExistence(60, 1); | |
| sleep(2); | |
| assertFalse("Slideshow control exists", slideShow.exists()); | |
| assertFalse("Slideshow is not started", GraphicsUtil.isFilledWith(0xFF00FF00, rect)); | |
| typeKeys("<F5>"); | |
| long start = System.currentTimeMillis(); | |
| new Condition() { | |
| @Override | |
| public boolean value() { | |
| return GraphicsUtil.isFilledWith(0xFF00FF00, rect); | |
| } | |
| }.waitForTrue("", 120, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| slideShow.typeKeys("<esc>"); | |
| sleep(2); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void loadFinishPlainODT() { | |
| loadFinish("pvt/plain_200p.odt", "Page 1 / 23[0-9]{1}"); | |
| } | |
| @Test | |
| public void loadFinishPlainDOC() { | |
| loadFinish("pvt/plain_50p.doc", "Page i / 5[0-9]{1}"); | |
| } | |
| @Test | |
| public void loadFinishPlainDOCX() { | |
| loadFinish("pvt/plain_200p.docx", "Page 1 / 1[8-9]{1}[0-9]{1}"); | |
| } | |
| @Test | |
| public void loadFinishPlainODS() { | |
| loadFinish("pvt/plain_11s.ods", "Sheet 1 / 11"); | |
| } | |
| @Test | |
| public void loadFinishPlainXLS() { | |
| loadFinish("pvt/plain_11s.xls", "Sheet 1 / 11"); | |
| } | |
| @Test | |
| public void loadFinishPlainXLSX() { | |
| loadFinish("pvt/plain_11s.xlsx", "Sheet 1 / 11"); | |
| } | |
| @Test | |
| public void loadFinishPlainODP() { | |
| loadFinish("pvt/plain_200p.odp", "Slide 1 / 200"); | |
| } | |
| @Test | |
| public void loadFinishPlainPPT() { | |
| loadFinish("pvt/plain_200p.ppt", "Slide 1 / 200"); | |
| } | |
| @Test | |
| public void loadFinishPlainPPTX() { | |
| loadFinish("pvt/plain_200p.pptx", "Slide 1 / 200"); | |
| } | |
| @Test | |
| public void loadFinishComplexDOC() { | |
| loadFinish("pvt/complex_300p.doc", "Page 1 / 3[0-9]{2}"); | |
| } | |
| @Test | |
| public void loadFinishComplexDOCX() { | |
| loadFinish("pvt/complex_400p.docx", "Page 1 / 3[2-9]{2}"); | |
| } | |
| @Test | |
| public void loadFinishComplexODT() { | |
| loadFinish("pvt/complex_800p.odt", "Page 1 / 8[0-9]{2}"); | |
| } | |
| @Test | |
| public void loadFinishComplexODS() { | |
| loadFinish("pvt/complex_19s.ods", "Sheet 8 / 19"); | |
| } | |
| @Test | |
| public void loadFinishComplexXLS() { | |
| loadFinish("pvt/complex_29s.xls", "Sheet 2 / 29"); | |
| } | |
| @Test | |
| public void loadFinishComplexXLSX() { | |
| loadFinish("pvt/complex_29s.xlsx", "Sheet 29 / 29"); | |
| } | |
| @Test | |
| public void loadFinishComplexODP() { | |
| loadFinish("pvt/complex_150p.odp", "Slide 1 / 150"); | |
| } | |
| @Test | |
| public void loadFinishComplexPPT() { | |
| loadFinish("pvt/complex_100p.ppt", "Slide 1 / 100"); | |
| } | |
| @Test | |
| public void loadFinishComplexPPTX() { | |
| loadFinish("pvt/complex_100p.pptx", "Slide 1 / 100"); | |
| } | |
| public void loadFinish(String file, final String indicator) { | |
| final int openIndicatorIndex = file.matches(".*\\.(odp|ppt|pptx)$") ? 4 : 0; | |
| String path = prepareData(file); | |
| for (i = 0; i < repeat; i++) { | |
| app.start(); | |
| app.dispatch(".uno:Open"); | |
| filePickerPath.setText(path); | |
| sleep(1); | |
| filePickerOpen.click(0.5, 0.5); | |
| long start = System.currentTimeMillis(); | |
| new Condition() { | |
| @Override | |
| public boolean value() { | |
| try { | |
| String text = statusBar.getItemText(openIndicatorIndex); | |
| return text.matches(indicator); | |
| } catch (Exception e) { | |
| return false; | |
| } | |
| } | |
| }.waitForTrue("", 120, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| discard(); | |
| app.quit(); | |
| } | |
| } | |
| @Test | |
| public void savePlainODT() { | |
| save("pvt/plain_200p.odt", "Page 1 / 23[0-9]{1}"); | |
| } | |
| @Test | |
| public void savePlainDOC() { | |
| save("pvt/plain_50p.doc", "Page i / 5[0-9]{1}"); | |
| } | |
| @Test | |
| public void savePlainODS() { | |
| save("pvt/plain_11s.ods", "Sheet 1 / 11"); | |
| } | |
| @Test | |
| public void savePlainXLS() { | |
| save("pvt/plain_11s.xls", "Sheet 1 / 11"); | |
| } | |
| @Test | |
| public void savePlainODP() { | |
| save("pvt/plain_200p.odp", "Slide 1 / 200"); | |
| } | |
| @Test | |
| public void savePlainPPT() { | |
| save("pvt/plain_200p.ppt", "Slide 1 / 200"); | |
| } | |
| @Test | |
| public void saveComplexODT() { | |
| save("pvt/complex_800p.odt", "Page 1 / 8[0-9]{2}"); | |
| } | |
| @Test | |
| public void saveComplexDOC() { | |
| save("pvt/complex_300p.doc", "Page 1 / 3[0-9]{2}"); | |
| } | |
| @Test | |
| public void saveComplexODS() { | |
| save("pvt/complex_19s.ods", "Sheet 8 / 19"); | |
| } | |
| @Test | |
| public void saveComplexXLS() { | |
| save("pvt/complex_29s.xls", "Sheet 2 / 29"); | |
| } | |
| @Test | |
| public void saveComplexODP() { | |
| save("pvt/complex_150p.odp", "Slide 1 / 150"); | |
| } | |
| @Test | |
| public void saveComplexPPT() { | |
| save("pvt/complex_100p.ppt", "Slide 1 / 100"); | |
| } | |
| public void save(String file, final String openIndicator) { | |
| boolean alienFormat = file.matches(".*\\.(doc|xls|ppt|docx|xlsx|pptx)$"); | |
| final int openIndicatorIndex = file.matches(".*\\.(odp|ppt|pptx)$") ? 4 : 0; | |
| final int saveIndicatorIndex = file.matches(".*\\.(odt|doc|docx)$") ? 5 : file.matches(".*\\.(ods|xls|xlsx)$") ? 4 : 2; | |
| String picture = prepareData("image/red_64x64.bmp"); | |
| for (i = 0; i < repeat; i++) { | |
| String dir = "temp/file" + i; | |
| getFile(dir).mkdirs(); | |
| app.start(); | |
| open(prepareData(file, dir)); | |
| new Condition() { | |
| @Override | |
| public boolean value() { | |
| try { | |
| String text = statusBar.getItemText(openIndicatorIndex); | |
| return text.matches(openIndicator); | |
| } catch (Exception e) { | |
| return false; | |
| } | |
| } | |
| }.waitForTrue("", 120, 1); | |
| sleep(2); | |
| insertPicture(picture); | |
| sleep(5); | |
| assertEquals("File is modified", "*", statusBar.getItemText(saveIndicatorIndex)); | |
| app.dispatch(".uno:Save"); | |
| if (alienFormat) { | |
| alienFormatDlg.waitForExistence(3, 1); | |
| sleep(1); | |
| typeKeys("<enter>"); | |
| } | |
| long start = System.currentTimeMillis(); | |
| new Condition() { | |
| @Override | |
| public boolean value() { | |
| try { | |
| String text = statusBar.getItemText(saveIndicatorIndex); | |
| return " ".equals(text); | |
| } catch (Exception e) { | |
| return false; | |
| } | |
| } | |
| }.waitForTrue("", 120, INTERVAL); | |
| long end = System.currentTimeMillis(); | |
| addRecord(start, end); | |
| close(); | |
| app.stop(); | |
| } | |
| } | |
| } |