157caf934SLiu Zhe /************************************************************** 257caf934SLiu Zhe * 357caf934SLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 457caf934SLiu Zhe * or more contributor license agreements. See the NOTICE file 557caf934SLiu Zhe * distributed with this work for additional information 657caf934SLiu Zhe * regarding copyright ownership. The ASF licenses this file 757caf934SLiu Zhe * to you under the Apache License, Version 2.0 (the 857caf934SLiu Zhe * "License"); you may not use this file except in compliance 957caf934SLiu Zhe * with the License. You may obtain a copy of the License at 1057caf934SLiu Zhe * 1157caf934SLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 1257caf934SLiu Zhe * 1357caf934SLiu Zhe * Unless required by applicable law or agreed to in writing, 1457caf934SLiu Zhe * software distributed under the License is distributed on an 1557caf934SLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1657caf934SLiu Zhe * KIND, either express or implied. See the License for the 1757caf934SLiu Zhe * specific language governing permissions and limitations 1857caf934SLiu Zhe * under the License. 1957caf934SLiu Zhe * 2057caf934SLiu Zhe *************************************************************/ 2157caf934SLiu Zhe 2257caf934SLiu Zhe /** 2357caf934SLiu Zhe * 2457caf934SLiu Zhe */ 2557caf934SLiu Zhe 2657caf934SLiu Zhe package pvt.gui; 2757caf934SLiu Zhe 28f46d12a6SLiu Zhe import static org.junit.Assert.*; 2957caf934SLiu Zhe import static org.openoffice.test.common.Testspace.*; 3057caf934SLiu Zhe import static org.openoffice.test.vcl.Tester.*; 31f46d12a6SLiu Zhe import static testlib.gui.AppTool.*; 3257caf934SLiu Zhe import static testlib.gui.UIMap.*; 3357caf934SLiu Zhe 34f46d12a6SLiu Zhe import java.awt.Rectangle; 3557caf934SLiu Zhe import java.util.HashMap; 3657caf934SLiu Zhe 37*8cce5abbSLiu Zhe import org.junit.After; 3857caf934SLiu Zhe import org.junit.AfterClass; 3957caf934SLiu Zhe import org.junit.BeforeClass; 4057caf934SLiu Zhe import org.junit.Rule; 4157caf934SLiu Zhe import org.junit.Test; 4257caf934SLiu Zhe import org.junit.rules.TestName; 4357caf934SLiu Zhe import org.openoffice.test.OpenOffice; 4457caf934SLiu Zhe import org.openoffice.test.common.Condition; 45e4b83892SLiu Zhe import org.openoffice.test.common.DataSheet; 46f46d12a6SLiu Zhe import org.openoffice.test.common.GraphicsUtil; 4757caf934SLiu Zhe import org.openoffice.test.common.Logger; 4857caf934SLiu Zhe 4957caf934SLiu Zhe 5057caf934SLiu Zhe public class Benchmark { 5157caf934SLiu Zhe @Rule 5257caf934SLiu Zhe public Logger log = Logger.getLogger(this); 5357caf934SLiu Zhe 5457caf934SLiu Zhe @Rule 5557caf934SLiu Zhe public TestName testname = new TestName(); 5657caf934SLiu Zhe 57e4b83892SLiu Zhe private static DataSheet result; 5857caf934SLiu Zhe 59e4b83892SLiu Zhe private static final double INTERVAL = 0.1; 6057caf934SLiu Zhe 61*8cce5abbSLiu Zhe private static int repeat = 2; 62*8cce5abbSLiu Zhe 63*8cce5abbSLiu Zhe private int i = 0; 649edf8282SLiu Zhe 6557caf934SLiu Zhe public Benchmark() { 6657caf934SLiu Zhe 6757caf934SLiu Zhe } 6857caf934SLiu Zhe 6957caf934SLiu Zhe @BeforeClass 7057caf934SLiu Zhe public static void beforeClass() throws Exception { 7157caf934SLiu Zhe OpenOffice.killAll(); 72*8cce5abbSLiu Zhe result = new DataSheet(getFile("output/" + Benchmark.class.getName() + ".xml"), true); 739edf8282SLiu Zhe result.addRow("data", "Scenario", "No", "Consumed Time", "Memory(VSZ)", "Memory(RSS)", "Handles(Windows Only)"); 7457caf934SLiu Zhe } 7557caf934SLiu Zhe 7657caf934SLiu Zhe @AfterClass 7757caf934SLiu Zhe public static void afterClass() throws Exception { 789edf8282SLiu Zhe app.stop(); 7957caf934SLiu Zhe } 8057caf934SLiu Zhe 81*8cce5abbSLiu Zhe @After 82*8cce5abbSLiu Zhe public void after() { 83*8cce5abbSLiu Zhe if (i < repeat) 84*8cce5abbSLiu Zhe result.addRow("data", testname.getMethodName(), i, "err", "err", "err", "err", "err"); 85*8cce5abbSLiu Zhe } 86*8cce5abbSLiu Zhe 87*8cce5abbSLiu Zhe private void addRecord(long start, long end) { 889edf8282SLiu Zhe sleep(2); 899edf8282SLiu Zhe HashMap<String, Object> perf = aoo.getPerfData(); 909edf8282SLiu Zhe result.addRow("data", testname.getMethodName(), i, (end - start), perf.get("vsz"), perf.get("rss"), perf.get("handles")); 9157caf934SLiu Zhe } 9257caf934SLiu Zhe 9357caf934SLiu Zhe @Test 9457caf934SLiu Zhe public void coolStartup() throws Exception { 959edf8282SLiu Zhe app.stop(); 96*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 9757caf934SLiu Zhe aoo.cleanUserInstallation(); 989edf8282SLiu Zhe assertFalse("User profile exists", aoo.getUserInstallation().exists()); 9957caf934SLiu Zhe aoo.start(); 10057caf934SLiu Zhe long start = System.currentTimeMillis(); 10157caf934SLiu Zhe startcenter.waitForExistence(120, INTERVAL); 10257caf934SLiu Zhe long end = System.currentTimeMillis(); 103*8cce5abbSLiu Zhe addRecord(start, end); 1049edf8282SLiu Zhe app.quit(); 1059edf8282SLiu Zhe } 106*8cce5abbSLiu Zhe 10757caf934SLiu Zhe } 10857caf934SLiu Zhe 10957caf934SLiu Zhe @Test 11057caf934SLiu Zhe public void warmStartup() throws Exception { 1119edf8282SLiu Zhe // Make sure we has generated user profile 1129edf8282SLiu Zhe app.start(true); 1139edf8282SLiu Zhe app.quit(); 1149edf8282SLiu Zhe 115*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 1169edf8282SLiu Zhe assertTrue("User profile exists", aoo.getUserInstallation().exists()); 11757caf934SLiu Zhe aoo.start(); 11857caf934SLiu Zhe long start = System.currentTimeMillis(); 11957caf934SLiu Zhe startcenter.waitForExistence(120, INTERVAL); 12057caf934SLiu Zhe long end = System.currentTimeMillis(); 121*8cce5abbSLiu Zhe addRecord(start, end); 1229edf8282SLiu Zhe app.quit(); 12357caf934SLiu Zhe } 124*8cce5abbSLiu Zhe 12557caf934SLiu Zhe } 12657caf934SLiu Zhe 12757caf934SLiu Zhe @Test 12857caf934SLiu Zhe public void newTextDocument() { 1299edf8282SLiu Zhe app.start(true); 1309edf8282SLiu Zhe app.quit(); 1319edf8282SLiu Zhe 132*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 1339edf8282SLiu Zhe app.start(); 13457caf934SLiu Zhe startCenterWriterButton.click(0.5, 0.5); 13557caf934SLiu Zhe long start = System.currentTimeMillis(); 13657caf934SLiu Zhe writer.waitForExistence(60, INTERVAL); 13757caf934SLiu Zhe long end = System.currentTimeMillis(); 138*8cce5abbSLiu Zhe addRecord(start, end); 1399edf8282SLiu Zhe app.quit(); 14057caf934SLiu Zhe } 141*8cce5abbSLiu Zhe 14257caf934SLiu Zhe } 14357caf934SLiu Zhe 14457caf934SLiu Zhe @Test 14557caf934SLiu Zhe public void newSpreadsheet() { 1469edf8282SLiu Zhe app.start(true); 1479edf8282SLiu Zhe app.quit(); 148*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 1499edf8282SLiu Zhe app.start(); 15057caf934SLiu Zhe startCenterCalcButton.click(0.5, 0.5); 15157caf934SLiu Zhe long start = System.currentTimeMillis(); 15257caf934SLiu Zhe calc.waitForExistence(60, INTERVAL); 15357caf934SLiu Zhe long end = System.currentTimeMillis(); 154*8cce5abbSLiu Zhe addRecord(start, end); 1559edf8282SLiu Zhe app.quit(); 15657caf934SLiu Zhe } 157*8cce5abbSLiu Zhe 15857caf934SLiu Zhe } 15957caf934SLiu Zhe 16057caf934SLiu Zhe @Test 16157caf934SLiu Zhe public void newPresentation() { 1629edf8282SLiu Zhe app.start(true); 1639edf8282SLiu Zhe app.quit(); 164*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 1659edf8282SLiu Zhe app.start(); 16657caf934SLiu Zhe startCenterImpressButton.click(0.5, 0.5); 16757caf934SLiu Zhe presentationWizard.click(0.9, 0.95); 16857caf934SLiu Zhe long start = System.currentTimeMillis(); 16957caf934SLiu Zhe impress.waitForExistence(60, INTERVAL); 17057caf934SLiu Zhe long end = System.currentTimeMillis(); 171*8cce5abbSLiu Zhe addRecord(start, end); 1729edf8282SLiu Zhe app.quit(); 1739edf8282SLiu Zhe } 174*8cce5abbSLiu Zhe 1759edf8282SLiu Zhe } 1769edf8282SLiu Zhe 1779edf8282SLiu Zhe @Test 1789edf8282SLiu Zhe public void slideShow() { 1799edf8282SLiu Zhe app.start(true); 1809edf8282SLiu Zhe app.quit(); 1819edf8282SLiu Zhe 1829edf8282SLiu Zhe String path = prepareData("pvt/slideshow.odp"); 1839edf8282SLiu Zhe final Rectangle rect = GraphicsUtil.getScreenRectangle(); 1849edf8282SLiu Zhe // when slide show is running, top-center area will be filled with green 1859edf8282SLiu Zhe rect.setRect(rect.getCenterX(), 2, 2, 2); 186*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 1879edf8282SLiu Zhe app.start(); 1889edf8282SLiu Zhe open(path); 1899edf8282SLiu Zhe impress.waitForExistence(60, 1); 1909edf8282SLiu Zhe sleep(2); 1919edf8282SLiu Zhe assertFalse("Slideshow control exists", slideShow.exists()); 1929edf8282SLiu Zhe assertFalse("Slideshow is not started", GraphicsUtil.isFilledWith(0xFF00FF00, rect)); 1939edf8282SLiu Zhe typeKeys("<F5>"); 1949edf8282SLiu Zhe long start = System.currentTimeMillis(); 1959edf8282SLiu Zhe new Condition() { 1969edf8282SLiu Zhe @Override 1979edf8282SLiu Zhe public boolean value() { 1989edf8282SLiu Zhe return GraphicsUtil.isFilledWith(0xFF00FF00, rect); 1999edf8282SLiu Zhe } 2009edf8282SLiu Zhe 2019edf8282SLiu Zhe }.waitForTrue("", 120, INTERVAL); 2029edf8282SLiu Zhe long end = System.currentTimeMillis(); 203*8cce5abbSLiu Zhe addRecord(start, end); 2049edf8282SLiu Zhe slideShow.typeKeys("<esc>"); 2059edf8282SLiu Zhe sleep(2); 2069edf8282SLiu Zhe app.quit(); 20757caf934SLiu Zhe } 208*8cce5abbSLiu Zhe 20957caf934SLiu Zhe } 21057caf934SLiu Zhe 21157caf934SLiu Zhe @Test 212f46d12a6SLiu Zhe public void loadFinishPlainODT() { 213f46d12a6SLiu Zhe loadFinish("pvt/plain_200p.odt", "Page 1 / 23[0-9]{1}"); 21457caf934SLiu Zhe } 21557caf934SLiu Zhe 21657caf934SLiu Zhe @Test 217f46d12a6SLiu Zhe public void loadFinishPlainDOC() { 218e4b83892SLiu Zhe loadFinish("pvt/plain_50p.doc", "Page i / 5[0-9]{1}"); 21957caf934SLiu Zhe } 22057caf934SLiu Zhe 22157caf934SLiu Zhe @Test 222f46d12a6SLiu Zhe public void loadFinishPlainDOCX() { 223*8cce5abbSLiu Zhe loadFinish("pvt/plain_200p.docx", "Page 1 / 1[8-9]{1}[0-9]{1}"); 22457caf934SLiu Zhe } 22557caf934SLiu Zhe 22657caf934SLiu Zhe @Test 22757caf934SLiu Zhe public void loadFinishPlainODS() { 228f46d12a6SLiu Zhe loadFinish("pvt/plain_11s.ods", "Sheet 1 / 11"); 22957caf934SLiu Zhe } 23057caf934SLiu Zhe 23157caf934SLiu Zhe @Test 232f46d12a6SLiu Zhe public void loadFinishPlainXLS() { 233f46d12a6SLiu Zhe loadFinish("pvt/plain_11s.xls", "Sheet 1 / 11"); 23457caf934SLiu Zhe } 23557caf934SLiu Zhe 23657caf934SLiu Zhe @Test 237f46d12a6SLiu Zhe public void loadFinishPlainXLSX() { 238f46d12a6SLiu Zhe loadFinish("pvt/plain_11s.xlsx", "Sheet 1 / 11"); 23957caf934SLiu Zhe } 24057caf934SLiu Zhe 24157caf934SLiu Zhe @Test 24257caf934SLiu Zhe public void loadFinishPlainODP() { 243f46d12a6SLiu Zhe loadFinish("pvt/plain_200p.odp", "Slide 1 / 200"); 24457caf934SLiu Zhe } 24557caf934SLiu Zhe 24657caf934SLiu Zhe @Test 24757caf934SLiu Zhe public void loadFinishPlainPPT() { 248f46d12a6SLiu Zhe loadFinish("pvt/plain_200p.ppt", "Slide 1 / 200"); 24957caf934SLiu Zhe } 25057caf934SLiu Zhe 25157caf934SLiu Zhe @Test 252f46d12a6SLiu Zhe public void loadFinishPlainPPTX() { 253f46d12a6SLiu Zhe loadFinish("pvt/plain_200p.pptx", "Slide 1 / 200"); 254f46d12a6SLiu Zhe } 255f46d12a6SLiu Zhe 256f46d12a6SLiu Zhe @Test 257f46d12a6SLiu Zhe public void loadFinishComplexDOC() { 258e4b83892SLiu Zhe loadFinish("pvt/complex_300p.doc", "Page 1 / 3[0-9]{2}"); 259f46d12a6SLiu Zhe } 260f46d12a6SLiu Zhe 261f46d12a6SLiu Zhe @Test 2629edf8282SLiu Zhe public void loadFinishComplexDOCX() { 263*8cce5abbSLiu Zhe loadFinish("pvt/complex_400p.docx", "Page 1 / 4[0-9]{2}"); 2649edf8282SLiu Zhe } 2659edf8282SLiu Zhe 2669edf8282SLiu Zhe @Test 267f46d12a6SLiu Zhe public void loadFinishComplexODT() { 268e4b83892SLiu Zhe loadFinish("pvt/complex_800p.odt", "Page 1 / 8[0-9]{2}"); 269f46d12a6SLiu Zhe } 270f46d12a6SLiu Zhe 271f46d12a6SLiu Zhe @Test 272f46d12a6SLiu Zhe public void loadFinishComplexODS() { 2739edf8282SLiu Zhe loadFinish("pvt/complex_19s.odt", "Sheet 8 / 19"); 274f46d12a6SLiu Zhe } 275f46d12a6SLiu Zhe 276f46d12a6SLiu Zhe @Test 277*8cce5abbSLiu Zhe public void loadFinishComplexXLS() { 278*8cce5abbSLiu Zhe loadFinish("pvt/complex_29s.xls", "Sheet 2 / 29"); 279*8cce5abbSLiu Zhe } 280*8cce5abbSLiu Zhe 281*8cce5abbSLiu Zhe @Test 282*8cce5abbSLiu Zhe public void loadFinishComplexXLSX() { 283*8cce5abbSLiu Zhe loadFinish("pvt/complex_29s.xlsx", "Sheet 29 / 29"); 284*8cce5abbSLiu Zhe } 285*8cce5abbSLiu Zhe 286*8cce5abbSLiu Zhe @Test 28757caf934SLiu Zhe public void loadFinishComplexODP() { 2889edf8282SLiu Zhe loadFinish("pvt/complex_150p.odp", "Slide 1 / 150"); 28957caf934SLiu Zhe } 29057caf934SLiu Zhe 291*8cce5abbSLiu Zhe @Test 292*8cce5abbSLiu Zhe public void loadFinishComplexPPT() { 293*8cce5abbSLiu Zhe loadFinish("pvt/complex_100p.ppt", "Slide 1 / 100"); 294*8cce5abbSLiu Zhe } 295*8cce5abbSLiu Zhe 296*8cce5abbSLiu Zhe @Test 297*8cce5abbSLiu Zhe public void loadFinishComplexPPTX() { 298*8cce5abbSLiu Zhe loadFinish("pvt/complex_100p.pptx", "Slide 1 / 100"); 299*8cce5abbSLiu Zhe } 300*8cce5abbSLiu Zhe 30157caf934SLiu Zhe public void loadFinish(String file, final String indicator) { 302f46d12a6SLiu Zhe final int openIndicatorIndex = file.matches(".*\\.(odp|ppt|pptx)$") ? 4 : 0; 30357caf934SLiu Zhe String path = prepareData(file); 3049edf8282SLiu Zhe app.stop(); 305*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 3069edf8282SLiu Zhe app.start(); 30757caf934SLiu Zhe app.dispatch(".uno:Open"); 30857caf934SLiu Zhe filePickerPath.setText(path); 3099edf8282SLiu Zhe sleep(1); 310f46d12a6SLiu Zhe filePickerOpen.click(0.5, 0.5); 31157caf934SLiu Zhe long start = System.currentTimeMillis(); 31257caf934SLiu Zhe new Condition() { 31357caf934SLiu Zhe @Override 31457caf934SLiu Zhe public boolean value() { 315f46d12a6SLiu Zhe try { 316f46d12a6SLiu Zhe String text = statusBar.getItemText(openIndicatorIndex); 317f46d12a6SLiu Zhe return text.matches(indicator); 318f46d12a6SLiu Zhe } catch (Exception e) { 31957caf934SLiu Zhe return false; 320f46d12a6SLiu Zhe } 32157caf934SLiu Zhe } 32257caf934SLiu Zhe 32357caf934SLiu Zhe }.waitForTrue("", 120, INTERVAL); 32457caf934SLiu Zhe long end = System.currentTimeMillis(); 325*8cce5abbSLiu Zhe addRecord(start, end); 326f46d12a6SLiu Zhe discard(); 3279edf8282SLiu Zhe app.quit(); 32857caf934SLiu Zhe } 32957caf934SLiu Zhe 330f46d12a6SLiu Zhe } 33157caf934SLiu Zhe 332f46d12a6SLiu Zhe @Test 333f46d12a6SLiu Zhe public void savePlainODT() { 334f46d12a6SLiu Zhe save("pvt/plain_200p.odt", "Page 1 / 23[0-9]{1}"); 335f46d12a6SLiu Zhe } 336f46d12a6SLiu Zhe 337f46d12a6SLiu Zhe @Test 338*8cce5abbSLiu Zhe public void savePlainDOC() { 339*8cce5abbSLiu Zhe save("pvt/plain_50p.doc", "Page i / 5[0-9]{1}"); 340f46d12a6SLiu Zhe } 341f46d12a6SLiu Zhe 342f46d12a6SLiu Zhe @Test 343f46d12a6SLiu Zhe public void savePlainODS() { 344f46d12a6SLiu Zhe save("pvt/plain_11s.ods", "Sheet 1 / 11"); 345f46d12a6SLiu Zhe } 346f46d12a6SLiu Zhe 347f46d12a6SLiu Zhe @Test 348*8cce5abbSLiu Zhe public void savePlainXLS() { 349*8cce5abbSLiu Zhe save("pvt/plain_11s.xls", "Sheet 1 / 11"); 350f46d12a6SLiu Zhe } 351f46d12a6SLiu Zhe 352f46d12a6SLiu Zhe @Test 353f46d12a6SLiu Zhe public void savePlainODP() { 354f46d12a6SLiu Zhe save("pvt/plain_200p.odp", "Slide 1 / 200"); 355f46d12a6SLiu Zhe } 356f46d12a6SLiu Zhe 357f46d12a6SLiu Zhe @Test 358f46d12a6SLiu Zhe public void savePlainPPT() { 359f46d12a6SLiu Zhe save("pvt/plain_200p.ppt", "Slide 1 / 200"); 360f46d12a6SLiu Zhe } 361f46d12a6SLiu Zhe 362f46d12a6SLiu Zhe @Test 363*8cce5abbSLiu Zhe public void saveComplexODT() { 364*8cce5abbSLiu Zhe save("pvt/complex_800p.odt", "Page 1 / 8[0-9]{2}"); 365*8cce5abbSLiu Zhe } 366*8cce5abbSLiu Zhe 367*8cce5abbSLiu Zhe @Test 368*8cce5abbSLiu Zhe public void saveComplexDOC() { 369*8cce5abbSLiu Zhe save("pvt/complex_300p.doc", "Page 1 / 3[0-9]{2}"); 370*8cce5abbSLiu Zhe } 371*8cce5abbSLiu Zhe 372*8cce5abbSLiu Zhe @Test 373*8cce5abbSLiu Zhe public void saveComplexODS() { 374*8cce5abbSLiu Zhe save("pvt/complex_19s.ods", "Sheet 8 / 19"); 375*8cce5abbSLiu Zhe } 376*8cce5abbSLiu Zhe 377*8cce5abbSLiu Zhe @Test 378*8cce5abbSLiu Zhe public void saveComplexXLS() { 379*8cce5abbSLiu Zhe save("pvt/complex_29s.xls", "Sheet 2 / 29"); 380*8cce5abbSLiu Zhe } 381*8cce5abbSLiu Zhe 382*8cce5abbSLiu Zhe @Test 383f46d12a6SLiu Zhe public void saveComplexODP() { 3849edf8282SLiu Zhe save("pvt/complex_150p.odp", "Slide 1 / 150"); 385f46d12a6SLiu Zhe } 386f46d12a6SLiu Zhe 387*8cce5abbSLiu Zhe @Test 388*8cce5abbSLiu Zhe public void saveComplexPPT() { 389*8cce5abbSLiu Zhe save("pvt/complex_100p.ppt", "Slide 1 / 100"); 390*8cce5abbSLiu Zhe } 391*8cce5abbSLiu Zhe 392f46d12a6SLiu Zhe public void save(String file, final String openIndicator) { 393f46d12a6SLiu Zhe boolean alienFormat = file.matches(".*\\.(doc|xls|ppt|docx|xlsx|pptx)$"); 394f46d12a6SLiu Zhe final int openIndicatorIndex = file.matches(".*\\.(odp|ppt|pptx)$") ? 4 : 0; 395f46d12a6SLiu Zhe final int saveIndicatorIndex = file.matches(".*\\.(odt|doc|docx)$") ? 5 : file.matches(".*\\.(ods|xls|xlsx)$") ? 4 : 2; 3969edf8282SLiu Zhe app.stop(); 397f46d12a6SLiu Zhe String picture = prepareData("image/red_64x64.bmp"); 398*8cce5abbSLiu Zhe for (i = 0; i < repeat; i++) { 399f46d12a6SLiu Zhe String dir = "temp/file" + i; 400f46d12a6SLiu Zhe getFile(dir).mkdirs(); 4019edf8282SLiu Zhe app.start(); 402f46d12a6SLiu Zhe open(prepareData(file, dir)); 403f46d12a6SLiu Zhe new Condition() { 404f46d12a6SLiu Zhe @Override 405f46d12a6SLiu Zhe public boolean value() { 406f46d12a6SLiu Zhe try { 407f46d12a6SLiu Zhe String text = statusBar.getItemText(openIndicatorIndex); 408f46d12a6SLiu Zhe return text.matches(openIndicator); 409f46d12a6SLiu Zhe } catch (Exception e) { 410f46d12a6SLiu Zhe return false; 411f46d12a6SLiu Zhe } 412f46d12a6SLiu Zhe } 413f46d12a6SLiu Zhe 414f46d12a6SLiu Zhe }.waitForTrue("", 120, 1); 415f46d12a6SLiu Zhe sleep(2); 416f46d12a6SLiu Zhe insertPicture(picture); 417f46d12a6SLiu Zhe sleep(3); 418f46d12a6SLiu Zhe assertEquals("File is modified", "*", statusBar.getItemText(saveIndicatorIndex)); 419f46d12a6SLiu Zhe app.dispatch(".uno:Save"); 420f46d12a6SLiu Zhe if (alienFormat) { 421f46d12a6SLiu Zhe alienFormatDlg.waitForExistence(3, 1); 422f46d12a6SLiu Zhe sleep(1); 423f46d12a6SLiu Zhe typeKeys("<enter>"); 424f46d12a6SLiu Zhe } 425f46d12a6SLiu Zhe 426f46d12a6SLiu Zhe long start = System.currentTimeMillis(); 427f46d12a6SLiu Zhe new Condition() { 428f46d12a6SLiu Zhe @Override 429f46d12a6SLiu Zhe public boolean value() { 430f46d12a6SLiu Zhe try { 431f46d12a6SLiu Zhe String text = statusBar.getItemText(saveIndicatorIndex); 432f46d12a6SLiu Zhe return " ".equals(text); 433f46d12a6SLiu Zhe } catch (Exception e) { 434f46d12a6SLiu Zhe return false; 435f46d12a6SLiu Zhe } 436f46d12a6SLiu Zhe } 437f46d12a6SLiu Zhe 438f46d12a6SLiu Zhe }.waitForTrue("", 120, INTERVAL); 439f46d12a6SLiu Zhe long end = System.currentTimeMillis(); 440*8cce5abbSLiu Zhe addRecord(start, end); 441f46d12a6SLiu Zhe close(); 4429edf8282SLiu Zhe app.stop(); 443f46d12a6SLiu Zhe } 444*8cce5abbSLiu Zhe 445f46d12a6SLiu Zhe } 44657caf934SLiu Zhe } 447