xref: /AOO41X/test/testgui/source/testlib/gui/AppTool.java (revision c37bcbf4f873863eb5da2c6a06f2c67ffc696b13)
1b4d2d410SLiu Zhe /**************************************************************
2b4d2d410SLiu Zhe  *
3b4d2d410SLiu Zhe  * Licensed to the Apache Software Foundation (ASF) under one
4b4d2d410SLiu Zhe  * or more contributor license agreements.  See the NOTICE file
5b4d2d410SLiu Zhe  * distributed with this work for additional information
6b4d2d410SLiu Zhe  * regarding copyright ownership.  The ASF licenses this file
7b4d2d410SLiu Zhe  * to you under the Apache License, Version 2.0 (the
8b4d2d410SLiu Zhe  * "License"); you may not use this file except in compliance
9b4d2d410SLiu Zhe  * with the License.  You may obtain a copy of the License at
10b4d2d410SLiu Zhe  *
11b4d2d410SLiu Zhe  *   http://www.apache.org/licenses/LICENSE-2.0
12b4d2d410SLiu Zhe  *
13b4d2d410SLiu Zhe  * Unless required by applicable law or agreed to in writing,
14b4d2d410SLiu Zhe  * software distributed under the License is distributed on an
15b4d2d410SLiu Zhe  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b4d2d410SLiu Zhe  * KIND, either express or implied.  See the License for the
17b4d2d410SLiu Zhe  * specific language governing permissions and limitations
18b4d2d410SLiu Zhe  * under the License.
19b4d2d410SLiu Zhe  *
20b4d2d410SLiu Zhe  *************************************************************/
21b4d2d410SLiu Zhe 
22b4d2d410SLiu Zhe package testlib.gui;
23b4d2d410SLiu Zhe 
24b4d2d410SLiu Zhe import static org.openoffice.test.common.Testspace.*;
25b4d2d410SLiu Zhe import static testlib.gui.UIMap.*;
26b4d2d410SLiu Zhe 
27b4d2d410SLiu Zhe import org.openoffice.test.common.Condition;
28b4d2d410SLiu Zhe import org.openoffice.test.common.FileUtil;
29b4d2d410SLiu Zhe import org.openoffice.test.common.SystemUtil;
30b4d2d410SLiu Zhe import org.openoffice.test.common.Testspace;
31b4d2d410SLiu Zhe import org.openoffice.test.vcl.Tester;
32b4d2d410SLiu Zhe import org.openoffice.test.vcl.widgets.VclWindow;
33b4d2d410SLiu Zhe 
34b4d2d410SLiu Zhe public class AppTool extends Tester {
35b4d2d410SLiu Zhe 	static {
36b4d2d410SLiu Zhe 		Testspace.getFile("temp").mkdirs();
37b4d2d410SLiu Zhe 		// TODO move these shortcut into a file
38b4d2d410SLiu Zhe 		setCustomizedShortcut("copy", "ctrl", "c");
39b4d2d410SLiu Zhe 		setCustomizedShortcut("select_all", "ctrl", "a");
40b4d2d410SLiu Zhe 		setCustomizedShortcut("paste", "ctrl", "v");
41b4d2d410SLiu Zhe 		setCustomizedShortcut("cut", "ctrl", "x");
42b4d2d410SLiu Zhe 		setCustomizedShortcut("startcenter", "ctrl", "n");
43b4d2d410SLiu Zhe 		setCustomizedShortcut("find", "ctrl", "f");
44b4d2d410SLiu Zhe 		setCustomizedShortcut("undo", "ctrl", "z");
45b4d2d410SLiu Zhe 		setCustomizedShortcut("redo", "ctrl", "y");
46b4d2d410SLiu Zhe 		if (SystemUtil.isMac()) {
47b4d2d410SLiu Zhe 			setCustomizedShortcut("copy", "command", "c");
48b4d2d410SLiu Zhe 			setCustomizedShortcut("select_all", "command", "a");
49b4d2d410SLiu Zhe 			setCustomizedShortcut("paste", "command", "v");
50b4d2d410SLiu Zhe 			setCustomizedShortcut("cut", "command", "x");
51b4d2d410SLiu Zhe 			setCustomizedShortcut("startcenter", "command", "n");
52b4d2d410SLiu Zhe 			setCustomizedShortcut("find", "command", "f");
53b4d2d410SLiu Zhe 			setCustomizedShortcut("undo", "command", "z");
54b4d2d410SLiu Zhe 			setCustomizedShortcut("redo", "command", "shift", "z");
55b4d2d410SLiu Zhe 		} else if (SystemUtil.isLinux()) {
56b4d2d410SLiu Zhe 
57b4d2d410SLiu Zhe 		}
58b4d2d410SLiu Zhe 	}
59b4d2d410SLiu 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 
119b4d2d410SLiu Zhe 	public static void typeKeys(String keys) {
120b4d2d410SLiu Zhe 		Tester.typeKeys(keys);
121b4d2d410SLiu Zhe 	}
122b4d2d410SLiu Zhe 
123b4d2d410SLiu Zhe 	public static void openStartcenter() {
124b4d2d410SLiu Zhe 		if (startcenter.exists())
125b4d2d410SLiu Zhe 			return;
126b4d2d410SLiu Zhe 
127b4d2d410SLiu Zhe 		if (SystemUtil.isMac()) {
128b4d2d410SLiu Zhe 			SystemUtil.execScript("osascript -e 'tell app \"OpenOffice.org\" to activate'");
129b4d2d410SLiu Zhe 			typeKeys("<command n>");
130b4d2d410SLiu Zhe 		}
131b4d2d410SLiu Zhe 
132b4d2d410SLiu Zhe 	}
133b4d2d410SLiu Zhe 
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 
145b4d2d410SLiu Zhe 	public static void submitOpenDlg(String path) {
146b4d2d410SLiu Zhe 		filePickerPath.setText(path);
147b4d2d410SLiu Zhe 		filePickerOpen.click();
148b4d2d410SLiu Zhe 	}
149b4d2d410SLiu Zhe 
150b4d2d410SLiu Zhe 	public static void submitSaveDlg(String path) {
151b4d2d410SLiu Zhe 		fileSavePath.setText(path);
152b4d2d410SLiu Zhe 		String extName = FileUtil.getFileExtName(path).toLowerCase();
153b4d2d410SLiu Zhe 		String[] filters = fileSaveFileType.getItemsText();
154b4d2d410SLiu Zhe 		int i = 0;
155b4d2d410SLiu Zhe 		for (; i < filters.length; i++) {
156b4d2d410SLiu Zhe 			String f = filters[i];
157b4d2d410SLiu Zhe 			int dotIndex = f.lastIndexOf(".");
158b4d2d410SLiu Zhe 			if (dotIndex == -1)
159b4d2d410SLiu Zhe 				continue;
160b4d2d410SLiu Zhe 			if (extName.equals(f.substring(dotIndex + 1, f.length() - 1)))
161b4d2d410SLiu Zhe 				break;
162b4d2d410SLiu Zhe 		}
163b4d2d410SLiu Zhe 		if (i == filters.length)
164b4d2d410SLiu Zhe 			throw new RuntimeException("Can't find the supported doc format!");
165b4d2d410SLiu Zhe 
166b4d2d410SLiu Zhe 		fileSaveFileType.select(i);
167b4d2d410SLiu Zhe 		fileSaveSave.click();
168b4d2d410SLiu Zhe 	}
169b4d2d410SLiu Zhe 
170b4d2d410SLiu Zhe 	public static void submitSaveDlg(String path, String ext) {
171b4d2d410SLiu Zhe 		fileSavePath.setText(path);
172b4d2d410SLiu Zhe 		if (ext != null) {
173b4d2d410SLiu Zhe 			// change filter
174b4d2d410SLiu Zhe 			String[] filters = fileSaveFileType.getItemsText();
175b4d2d410SLiu Zhe 			int i = 0;
176b4d2d410SLiu Zhe 			for (; i < filters.length; i++) {
177b4d2d410SLiu Zhe 				String f = filters[i];
178b4d2d410SLiu Zhe 				int dotIndex = f.lastIndexOf(".");
179b4d2d410SLiu Zhe 				if (dotIndex == -1)
180b4d2d410SLiu Zhe 					continue;
181b4d2d410SLiu Zhe 				if (ext.equals(f.substring(dotIndex + 1, f.length() - 1)))
182b4d2d410SLiu Zhe 					break;
183b4d2d410SLiu Zhe 			}
184b4d2d410SLiu Zhe 			if (i == filters.length)
185b4d2d410SLiu Zhe 				throw new RuntimeException("Can't find the supported doc format!");
186b4d2d410SLiu Zhe 		}
187b4d2d410SLiu Zhe 		fileSaveFileType.click();
188b4d2d410SLiu Zhe 	}
189b4d2d410SLiu Zhe 
190b4d2d410SLiu Zhe 	public static void handleBlocker(final VclWindow... windows) {
191b4d2d410SLiu Zhe 		new Condition() {
192b4d2d410SLiu Zhe 			@Override
193b4d2d410SLiu Zhe 			public boolean value() {
194b4d2d410SLiu Zhe 				if (activeMsgBox.exists()) {
195b4d2d410SLiu Zhe 					try {
196b4d2d410SLiu Zhe 						activeMsgBox.ok();
197b4d2d410SLiu Zhe 					} catch (Exception e) {
198b4d2d410SLiu Zhe 						try {
199b4d2d410SLiu Zhe 							activeMsgBox.yes();
200b4d2d410SLiu Zhe 						} catch (Exception e1) {
201b4d2d410SLiu Zhe 						}
202b4d2d410SLiu Zhe 					}
203b4d2d410SLiu Zhe 				}
204b4d2d410SLiu Zhe 
205b4d2d410SLiu Zhe 				boolean shown = false;
206b4d2d410SLiu Zhe 
207b4d2d410SLiu Zhe 				for (VclWindow w : windows) {
208b4d2d410SLiu Zhe 					if (w.exists()) {
209b4d2d410SLiu Zhe 						shown = true;
210b4d2d410SLiu Zhe 						break;
211b4d2d410SLiu Zhe 					}
212b4d2d410SLiu Zhe 				}
213b4d2d410SLiu Zhe 
214b4d2d410SLiu Zhe 				if (!shown)
215b4d2d410SLiu Zhe 					return false;
216b4d2d410SLiu Zhe 
217b4d2d410SLiu Zhe 				if (activeMsgBox.exists(2)) {
218b4d2d410SLiu Zhe 					try {
219b4d2d410SLiu Zhe 						activeMsgBox.ok();
220b4d2d410SLiu Zhe 					} catch (Exception e) {
221b4d2d410SLiu Zhe 						try {
222b4d2d410SLiu Zhe 							activeMsgBox.yes();
223b4d2d410SLiu Zhe 						} catch (Exception e1) {
224b4d2d410SLiu Zhe 						}
225b4d2d410SLiu Zhe 					}
226b4d2d410SLiu Zhe 				}
227b4d2d410SLiu Zhe 
228b4d2d410SLiu Zhe 				return true;
229b4d2d410SLiu Zhe 			}
230b4d2d410SLiu Zhe 
231b4d2d410SLiu Zhe 		}.waitForTrue("Time out wait window to be active.", 120, 2);
232b4d2d410SLiu Zhe 	}
233f46d12a6SLiu Zhe 
234f46d12a6SLiu Zhe 	public static void insertPicture(String path) {
235f46d12a6SLiu Zhe 		app.dispatch(".uno:InsertGraphic");
236f46d12a6SLiu Zhe 		submitOpenDlg(getPath(path));
237f46d12a6SLiu Zhe 	}
238b4d2d410SLiu Zhe }
239