1b164ae3eSLei De Bin /************************************************************** 2b164ae3eSLei De Bin * 3b164ae3eSLei De Bin * Licensed to the Apache Software Foundation (ASF) under one 4b164ae3eSLei De Bin * or more contributor license agreements. See the NOTICE file 5b164ae3eSLei De Bin * distributed with this work for additional information 6b164ae3eSLei De Bin * regarding copyright ownership. The ASF licenses this file 7b164ae3eSLei De Bin * to you under the Apache License, Version 2.0 (the 8b164ae3eSLei De Bin * "License"); you may not use this file except in compliance 9b164ae3eSLei De Bin * with the License. You may obtain a copy of the License at 10b164ae3eSLei De Bin * 11b164ae3eSLei De Bin * http://www.apache.org/licenses/LICENSE-2.0 12b164ae3eSLei De Bin * 13b164ae3eSLei De Bin * Unless required by applicable law or agreed to in writing, 14b164ae3eSLei De Bin * software distributed under the License is distributed on an 15b164ae3eSLei De Bin * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b164ae3eSLei De Bin * KIND, either express or implied. See the License for the 17b164ae3eSLei De Bin * specific language governing permissions and limitations 18b164ae3eSLei De Bin * under the License. 19b164ae3eSLei De Bin * 20b164ae3eSLei De Bin *************************************************************/ 21b164ae3eSLei De Bin 2295269d92SLiu Zhe package testlib.gui; 2322a14f28SLiu Zhe 24b4d2d410SLiu Zhe import static org.openoffice.test.common.Testspace.*; 2595269d92SLiu Zhe import static testlib.gui.UIMap.*; 26faa4b864SLei De Bin 27faa4b864SLei De Bin import org.openoffice.test.common.Condition; 28faa4b864SLei De Bin import org.openoffice.test.common.FileUtil; 29faa4b864SLei De Bin import org.openoffice.test.common.SystemUtil; 30afcfe8bdSLiu Zhe import org.openoffice.test.common.Testspace; 31faa4b864SLei De Bin import org.openoffice.test.vcl.Tester; 32faa4b864SLei De Bin import org.openoffice.test.vcl.widgets.VclWindow; 33faa4b864SLei De Bin 34b4d2d410SLiu Zhe public class AppTool extends Tester { 35faa4b864SLei De Bin static { 36faa4b864SLei De Bin Testspace.getFile("temp").mkdirs(); 37faa4b864SLei De Bin // TODO move these shortcut into a file 38faa4b864SLei De Bin setCustomizedShortcut("copy", "ctrl", "c"); 39faa4b864SLei De Bin setCustomizedShortcut("select_all", "ctrl", "a"); 40faa4b864SLei De Bin setCustomizedShortcut("paste", "ctrl", "v"); 41faa4b864SLei De Bin setCustomizedShortcut("cut", "ctrl", "x"); 42faa4b864SLei De Bin setCustomizedShortcut("startcenter", "ctrl", "n"); 43faa4b864SLei De Bin setCustomizedShortcut("find", "ctrl", "f"); 44faa4b864SLei De Bin setCustomizedShortcut("undo", "ctrl", "z"); 45faa4b864SLei De Bin setCustomizedShortcut("redo", "ctrl", "y"); 46faa4b864SLei De Bin if (SystemUtil.isMac()) { 47faa4b864SLei De Bin setCustomizedShortcut("copy", "command", "c"); 48faa4b864SLei De Bin setCustomizedShortcut("select_all", "command", "a"); 49faa4b864SLei De Bin setCustomizedShortcut("paste", "command", "v"); 50faa4b864SLei De Bin setCustomizedShortcut("cut", "command", "x"); 51faa4b864SLei De Bin setCustomizedShortcut("startcenter", "command", "n"); 52faa4b864SLei De Bin setCustomizedShortcut("find", "command", "f"); 53faa4b864SLei De Bin setCustomizedShortcut("undo", "command", "z"); 54faa4b864SLei De Bin setCustomizedShortcut("redo", "command", "shift", "z"); 55faa4b864SLei De Bin } else if (SystemUtil.isLinux()) { 5622a14f28SLiu Zhe 5722a14f28SLiu Zhe } 58faa4b864SLei De Bin } 5922a14f28SLiu Zhe 60b4d2d410SLiu Zhe public static void newTextDocument() { 61b4d2d410SLiu Zhe app.dispatch("private:factory/swriter"); 62b4d2d410SLiu Zhe writer.waitForExistence(10, 2); 63b4d2d410SLiu Zhe sleep(1); 64b4d2d410SLiu Zhe } 65b4d2d410SLiu Zhe 66b4d2d410SLiu Zhe public static void newSpreadsheet() { 67b4d2d410SLiu Zhe app.dispatch("private:factory/scalc"); 68b4d2d410SLiu Zhe calc.waitForExistence(10, 2); 69b4d2d410SLiu Zhe sleep(1); 70b4d2d410SLiu Zhe } 71b4d2d410SLiu Zhe 72b4d2d410SLiu Zhe public static void newPresentation() { 73b4d2d410SLiu Zhe app.dispatch("private:factory/simpress"); 74b4d2d410SLiu Zhe impress.waitForExistence(10, 2); 75b4d2d410SLiu Zhe sleep(1); 76b4d2d410SLiu Zhe } 77b4d2d410SLiu Zhe 78b4d2d410SLiu Zhe public static void newDrawing() { 79b4d2d410SLiu Zhe app.dispatch("private:factory/sdraw"); 80b4d2d410SLiu Zhe draw.waitForExistence(10, 2); 81b4d2d410SLiu Zhe sleep(1); 82b4d2d410SLiu Zhe } 83b4d2d410SLiu Zhe 84b4d2d410SLiu Zhe public static void newFormula() { 85b4d2d410SLiu Zhe app.dispatch("private:factory/smath"); 86b4d2d410SLiu Zhe mathEditWindow.waitForExistence(10, 2); 87b4d2d410SLiu Zhe sleep(1); 88b4d2d410SLiu Zhe } 89b4d2d410SLiu Zhe 90b4d2d410SLiu Zhe public static void open(String path) { 91b4d2d410SLiu Zhe app.dispatch(".uno:Open"); 92b4d2d410SLiu Zhe submitOpenDlg(getPath(path)); 93b4d2d410SLiu Zhe } 94b4d2d410SLiu Zhe 95b4d2d410SLiu Zhe public static void saveAs(String path) { 96b4d2d410SLiu Zhe app.dispatch(".uno:SaveAs"); 97b4d2d410SLiu Zhe submitSaveDlg(getPath(path)); 98b4d2d410SLiu Zhe if (alienFormatDlg.exists(3)) 99b4d2d410SLiu Zhe alienFormatDlg.ok(); 100b4d2d410SLiu Zhe app.waitSlot(5 * 60); // 10 minutes 101b4d2d410SLiu Zhe } 102b4d2d410SLiu Zhe 103b4d2d410SLiu Zhe public static void close() { 104b4d2d410SLiu Zhe app.dispatch(".uno:CloseDoc"); 105b4d2d410SLiu Zhe } 106b4d2d410SLiu Zhe 107*c37bcbf4SLi Feng Wang public static void saveAndReopen(String path){ 108*c37bcbf4SLi Feng Wang saveAs(path); 109*c37bcbf4SLi Feng Wang close(); 110*c37bcbf4SLi Feng Wang open(path); 111*c37bcbf4SLi Feng Wang } 112*c37bcbf4SLi Feng Wang 113b4d2d410SLiu Zhe public static void discard() { 114b4d2d410SLiu Zhe app.dispatch(".uno:CloseDoc"); 115b4d2d410SLiu Zhe if (activeMsgBox.exists(2)) 116b4d2d410SLiu Zhe activeMsgBox.no(); 117b4d2d410SLiu Zhe } 118b4d2d410SLiu Zhe 119b6113d73SLiu Zhe public static void typeKeys(String keys) { 120b6113d73SLiu Zhe Tester.typeKeys(keys); 121b6113d73SLiu Zhe } 1227dd2b5bbSLiu Zhe 123faa4b864SLei De Bin public static void openStartcenter() { 124faa4b864SLei De Bin if (startcenter.exists()) 125faa4b864SLei De Bin return; 126f46d12a6SLiu Zhe 127faa4b864SLei De Bin if (SystemUtil.isMac()) { 128140164b7SLiu Zhe SystemUtil.execScript("osascript -e 'tell app \"OpenOffice.org\" to activate'"); 129faa4b864SLei De Bin typeKeys("<command n>"); 130faa4b864SLei De Bin } 131f46d12a6SLiu Zhe 132faa4b864SLei De Bin } 133faa4b864SLei De Bin 134b4d2d410SLiu Zhe public static String copyAll() { 135b4d2d410SLiu Zhe app.setClipboard(".d.i.r.t.y."); 136b4d2d410SLiu Zhe try { 137b4d2d410SLiu Zhe app.dispatch(".uno:SelectAll"); 138b4d2d410SLiu Zhe } catch (Exception e) { 139b4d2d410SLiu Zhe app.dispatch(".uno:Select"); 140b4d2d410SLiu Zhe } 141b4d2d410SLiu Zhe app.dispatch(".uno:Copy"); 142b4d2d410SLiu Zhe return app.getClipboard(); 143b4d2d410SLiu Zhe } 144b4d2d410SLiu Zhe 145faa4b864SLei De Bin public static void submitOpenDlg(String path) { 146b4d2d410SLiu Zhe filePickerPath.setText(path); 147b4d2d410SLiu Zhe filePickerOpen.click(); 148faa4b864SLei De Bin } 14995269d92SLiu Zhe 150faa4b864SLei De Bin public static void submitSaveDlg(String path) { 151b4d2d410SLiu Zhe fileSavePath.setText(path); 152faa4b864SLei De Bin String extName = FileUtil.getFileExtName(path).toLowerCase(); 153b4d2d410SLiu Zhe String[] filters = fileSaveFileType.getItemsText(); 154faa4b864SLei De Bin int i = 0; 155faa4b864SLei De Bin for (; i < filters.length; i++) { 156faa4b864SLei De Bin String f = filters[i]; 157faa4b864SLei De Bin int dotIndex = f.lastIndexOf("."); 158faa4b864SLei De Bin if (dotIndex == -1) 159faa4b864SLei De Bin continue; 160faa4b864SLei De Bin if (extName.equals(f.substring(dotIndex + 1, f.length() - 1))) 161faa4b864SLei De Bin break; 162faa4b864SLei De Bin } 163faa4b864SLei De Bin if (i == filters.length) 164faa4b864SLei De Bin throw new RuntimeException("Can't find the supported doc format!"); 16522a14f28SLiu Zhe 166b4d2d410SLiu Zhe fileSaveFileType.select(i); 167b4d2d410SLiu Zhe fileSaveSave.click(); 168faa4b864SLei De Bin } 16922a14f28SLiu Zhe 170faa4b864SLei De Bin public static void submitSaveDlg(String path, String ext) { 171b4d2d410SLiu Zhe fileSavePath.setText(path); 172faa4b864SLei De Bin if (ext != null) { 173faa4b864SLei De Bin // change filter 174b4d2d410SLiu Zhe String[] filters = fileSaveFileType.getItemsText(); 175faa4b864SLei De Bin int i = 0; 176faa4b864SLei De Bin for (; i < filters.length; i++) { 177faa4b864SLei De Bin String f = filters[i]; 178faa4b864SLei De Bin int dotIndex = f.lastIndexOf("."); 179faa4b864SLei De Bin if (dotIndex == -1) 180faa4b864SLei De Bin continue; 181faa4b864SLei De Bin if (ext.equals(f.substring(dotIndex + 1, f.length() - 1))) 182faa4b864SLei De Bin break; 183faa4b864SLei De Bin } 184faa4b864SLei De Bin if (i == filters.length) 185faa4b864SLei De Bin throw new RuntimeException("Can't find the supported doc format!"); 186faa4b864SLei De Bin } 187b4d2d410SLiu Zhe fileSaveFileType.click(); 188faa4b864SLei De Bin } 18922a14f28SLiu Zhe 190faa4b864SLei De Bin public static void handleBlocker(final VclWindow... windows) { 191faa4b864SLei De Bin new Condition() { 192faa4b864SLei De Bin @Override 193faa4b864SLei De Bin public boolean value() { 194b4d2d410SLiu Zhe if (activeMsgBox.exists()) { 195faa4b864SLei De Bin try { 196b4d2d410SLiu Zhe activeMsgBox.ok(); 197faa4b864SLei De Bin } catch (Exception e) { 198faa4b864SLei De Bin try { 199b4d2d410SLiu Zhe activeMsgBox.yes(); 200faa4b864SLei De Bin } catch (Exception e1) { 201faa4b864SLei De Bin } 202faa4b864SLei De Bin } 203faa4b864SLei De Bin } 20422a14f28SLiu Zhe 205faa4b864SLei De Bin boolean shown = false; 20622a14f28SLiu Zhe 20722a14f28SLiu Zhe for (VclWindow w : windows) { 208faa4b864SLei De Bin if (w.exists()) { 209faa4b864SLei De Bin shown = true; 210faa4b864SLei De Bin break; 211faa4b864SLei De Bin } 212faa4b864SLei De Bin } 21322a14f28SLiu Zhe 214faa4b864SLei De Bin if (!shown) 215faa4b864SLei De Bin return false; 21622a14f28SLiu Zhe 217b4d2d410SLiu Zhe if (activeMsgBox.exists(2)) { 218faa4b864SLei De Bin try { 219b4d2d410SLiu Zhe activeMsgBox.ok(); 220faa4b864SLei De Bin } catch (Exception e) { 221faa4b864SLei De Bin try { 222b4d2d410SLiu Zhe activeMsgBox.yes(); 223faa4b864SLei De Bin } catch (Exception e1) { 224faa4b864SLei De Bin } 225faa4b864SLei De Bin } 226faa4b864SLei De Bin } 22722a14f28SLiu Zhe 228faa4b864SLei De Bin return true; 229faa4b864SLei De Bin } 23022a14f28SLiu Zhe 23122a14f28SLiu Zhe }.waitForTrue("Time out wait window to be active.", 120, 2); 232faa4b864SLei De Bin } 233f46d12a6SLiu Zhe 234f46d12a6SLiu Zhe public static void insertPicture(String path) { 235f46d12a6SLiu Zhe app.dispatch(".uno:InsertGraphic"); 236f46d12a6SLiu Zhe submitOpenDlg(getPath(path)); 237f46d12a6SLiu Zhe } 238faa4b864SLei De Bin } 239