source: josm/test/functional/framework/FunctionalTestCase.java@ 284

Last change on this file since 284 was 284, checked in by imi, 17 years ago
  • added some functional GUI tests
File size: 4.4 KB
Line 
1package framework;
2
3import java.awt.Component;
4import java.awt.Container;
5import java.awt.KeyboardFocusManager;
6import java.awt.Point;
7import java.awt.Window;
8import java.awt.event.InputEvent;
9import java.awt.event.KeyEvent;
10import java.awt.event.MouseEvent;
11
12import javax.swing.AbstractButton;
13import javax.swing.JDialog;
14import javax.swing.JFrame;
15import javax.swing.JLabel;
16import javax.swing.JMenu;
17import javax.swing.KeyStroke;
18import javax.swing.SwingUtilities;
19
20import junit.extensions.jfcunit.JFCTestCase;
21import junit.extensions.jfcunit.RobotTestHelper;
22import junit.extensions.jfcunit.eventdata.DragEventData;
23import junit.extensions.jfcunit.eventdata.KeyEventData;
24import junit.extensions.jfcunit.eventdata.MouseEventData;
25
26import org.openstreetmap.josm.Main;
27import org.openstreetmap.josm.gui.MainApplication;
28
29public class FunctionalTestCase extends JFCTestCase {
30
31 private KeyStroke getKey(String s) {
32 int key = 0;
33 int modifier = 0;
34 s = s.toUpperCase();
35 if (s.startsWith("CTRL")) {
36 modifier |= InputEvent.CTRL_MASK;
37 s = s.substring(4);
38 }
39 if (s.startsWith("-"))
40 s = s.substring(1);
41 if (s.startsWith("SHIFT")) {
42 modifier |= InputEvent.SHIFT_MASK;
43 s = s.substring(5);
44 }
45 if (s.startsWith("-"))
46 s = s.substring(1);
47 if (s.startsWith("ALT")) {
48 modifier |= InputEvent.ALT_MASK;
49 s = s.substring(3);
50 }
51 if (s.startsWith("-"))
52 s = s.substring(1);
53 if (s.matches("^F[1-9][012]?$"))
54 key = KeyEvent.VK_F1 + Integer.parseInt(s.substring(1)) - 1;
55 else if (s.length() == 0)
56 key = 0;
57 else if (s.length() != 1)
58 throw new RuntimeException("Illegal key description '"+s+"'.");
59 else
60 key = s.charAt(0);
61 return KeyStroke.getKeyStroke(key, modifier);
62 }
63
64 @Override protected void setUp() throws Exception {
65 super.setUp();
66 setHelper(new RobotTestHelper());
67 MainApplication.main(new String[]{});
68 }
69
70 protected Component find(Component c, String search) {
71 if (c == null)
72 return null;
73 if (search.equals(c.getName()))
74 return c;
75 if (c instanceof JLabel && search.equals(((JLabel)c).getText()))
76 return c;
77 if (c instanceof AbstractButton && search.equals(((AbstractButton)c).getText()))
78 return c;
79
80 if (c instanceof Container) {
81 Container ct = (Container)c;
82 for (int i = 0; i < ct.getComponentCount(); ++i) {
83 Component result = find(ct.getComponent(i), search);
84 if (result != null)
85 return result;
86 }
87 }
88 if (c instanceof JMenu) {
89 JMenu menu = (JMenu)c;
90 for (int i = 0; i < menu.getMenuComponentCount(); ++i) {
91 Component result = find(menu.getMenuComponent(i), search);
92 if (result != null)
93 return result;
94 }
95 }
96 if (c instanceof JFrame) {
97 Component result = find(((JFrame)c).getJMenuBar(), search);
98 if (result != null)
99 return result;
100 }
101 return null;
102 }
103
104 protected Component find(String s) {
105 Container frame = SwingUtilities.getAncestorOfClass(Window.class, KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner());
106 return find(frame, s);
107 }
108
109 protected void key(String... keys) {
110 for (String s : keys) {
111 KeyStroke k = getKey(s);
112 getHelper().sendKeyAction(new KeyEventData(this, Main.contentPane, k.getKeyCode(), k.getModifiers(), 0));
113 }
114 }
115
116 protected void key(int... keys) {
117 for (int i : keys) {
118 getHelper().sendKeyAction(new KeyEventData(this, Main.contentPane, i, 0, 0));
119 }
120 }
121
122 /**
123 * Clicks on a spot on the main map (should be open by now)
124 */
125 protected void click(int x, int y) {
126 getHelper().enterClickAndLeave(new MouseEventData(this, Main.map, 1, MouseEvent.BUTTON1_MASK, false, 0, new Point(x,y)));
127 }
128
129 protected void click(int x, int y, String modifier) {
130 getHelper().enterClickAndLeave(new MouseEventData(this, Main.map, 1, MouseEvent.BUTTON1_MASK + getKey(modifier).getModifiers(), false, 0, new Point(x,y)));
131 }
132
133
134 protected void drag(int xfrom, int yfrom, int xto, int yto) {
135 getHelper().enterDragAndLeave(new DragEventData(
136 this,
137 new MouseEventData(this, Main.map, 1, MouseEvent.BUTTON1_MASK, false, 0, new Point(xfrom, yfrom)),
138 new MouseEventData(this, Main.map, 1, MouseEvent.BUTTON1_MASK, false, 0, new Point(xto, yto))));
139 }
140
141
142 protected void assertPopup() {
143 Component focus = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
144 Container dlg = SwingUtilities.getAncestorOfClass(JDialog.class, focus);
145 assertNotNull("Popup dialog found", dlg);
146 key(KeyEvent.VK_ENTER);
147 }
148}
Note: See TracBrowser for help on using the repository browser.