source: trunk/autoquest-core-events-test/src/test/java/de/ugoe/cs/autoquest/eventcore/gui/MouseClickCondenserTest.java @ 1042

Last change on this file since 1042 was 1042, checked in by pharms, 11 years ago
  • added detection of double clicks
File size: 14.5 KB
Line 
1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
15package de.ugoe.cs.autoquest.eventcore.gui;
16
17import static org.junit.Assert.assertEquals;
18import static org.junit.Assert.assertFalse;
19import static org.junit.Assert.assertTrue;
20import static org.junit.Assert.fail;
21
22import java.util.ArrayList;
23import java.util.List;
24
25import org.junit.Test;
26
27import de.ugoe.cs.autoquest.eventcore.Event;
28import de.ugoe.cs.autoquest.eventcore.IEventType;
29import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonDown;
30import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonInteraction;
31import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonUp;
32import de.ugoe.cs.autoquest.eventcore.gui.MouseClick;
33import de.ugoe.cs.autoquest.eventcore.gui.MouseClickCondenser;
34import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
35import de.ugoe.cs.autoquest.test.DummyGUIElement;
36import de.ugoe.cs.autoquest.test.DummyInteraction;
37
38/**
39 * @author Patrick Harms
40 */
41public class MouseClickCondenserTest {
42
43    /** */
44    private List<Event> events = new ArrayList<Event>();
45
46    /**
47     *
48     */
49    @Test
50    public void testNormalSequence() {
51        MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
52        MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
53        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
54
55        IGUIElement element1 = new DummyGUIElement("elem1");
56
57        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
58        simulateEvent(new MouseButtonUp(leftBtn, 0, 0), element1);
59        simulateEvent(new MouseClick(leftBtn, 0, 0), element1);
60        assertCondensedMouseClicks("click left elem1");
61
62        simulateEvent(new MouseButtonDown(middleBtn, 0, 0), element1);
63        simulateEvent(new MouseButtonUp(middleBtn, 0, 0), element1);
64        simulateEvent(new MouseClick(middleBtn, 0, 0), element1);
65        assertCondensedMouseClicks("click left elem1", "click middle elem1");
66
67        simulateEvent(new MouseButtonDown(rightBtn, 0, 0), element1);
68        simulateEvent(new MouseButtonUp(rightBtn, 0, 0), element1);
69        simulateEvent(new MouseClick(rightBtn, 0, 0), element1);
70        assertCondensedMouseClicks("click left elem1", "click middle elem1", "click right elem1");
71
72        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
73        simulateEvent(new MouseButtonUp(leftBtn, 0, 0), element1);
74        assertCondensedMouseClicks("click left elem1", "click middle elem1", "click right elem1",
75                                   "click left elem1");
76
77        simulateEvent(new MouseButtonDown(middleBtn, 0, 0), element1);
78        simulateEvent(new MouseButtonUp(middleBtn, 0, 0), element1);
79        assertCondensedMouseClicks("click left elem1", "click middle elem1", "click right elem1",
80                                   "click left elem1", "click middle elem1");
81
82        simulateEvent(new MouseButtonDown(rightBtn, 0, 0), element1);
83        simulateEvent(new MouseButtonUp(rightBtn, 0, 0), element1);
84        assertCondensedMouseClicks("click left elem1", "click middle elem1", "click right elem1",
85                                   "click left elem1", "click middle elem1", "click right elem1");
86
87    }
88
89    /**
90     *
91     */
92    @Test
93    public void testMouseClickInSequence() {
94        MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
95        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
96
97        IGUIElement element1 = new DummyGUIElement("elem1");
98        IGUIElement element2 = new DummyGUIElement("elem2");
99
100        simulateEvent(new DummyInteraction("bla", 1), element1);
101        simulateEvent(new DummyInteraction("bli", 1), element1);
102        simulateEvent(new MouseButtonDown(middleBtn, 0, 0), element1);
103        simulateEvent(new MouseButtonUp(middleBtn, 0, 0), element1);
104        simulateEvent(new MouseClick(middleBtn, 0, 0), element1);
105        simulateEvent(new DummyInteraction("blo", 1), element1);
106        simulateEvent(new DummyInteraction("blu", 1), element1);
107        assertCondensedMouseClicks("", "", "click middle elem1", "", "");
108
109        simulateEvent(new DummyInteraction("bla", 1), element2);
110        simulateEvent(new DummyInteraction("bli", 1), element2);
111        simulateEvent(new MouseButtonDown(rightBtn, 0, 0), element2);
112        simulateEvent(new MouseButtonUp(rightBtn, 0, 0), element2);
113        simulateEvent(new MouseClick(rightBtn, 0, 0), element2);
114        simulateEvent(new DummyInteraction("blo", 1), element2);
115        simulateEvent(new DummyInteraction("blu", 1), element2);
116        assertCondensedMouseClicks("", "", "click middle elem1", "", "",
117                                   "", "", "click right elem2", "", "");
118
119    }
120
121
122    /**
123     *
124     */
125    @Test
126    public void testNoMouseClick() {
127        MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
128        MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
129        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
130
131        IGUIElement element1 = new DummyGUIElement("elem1");
132        IGUIElement element2 = new DummyGUIElement("elem2");
133
134        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
135        simulateEvent(new MouseButtonUp(leftBtn, 0, 0), element2);
136        simulateEvent(new MouseClick(leftBtn, 0, 0), element1);
137        assertCondensedMouseClicks("", "", "click left elem1");
138
139        simulateEvent(new MouseButtonDown(middleBtn, 0, 0), element1);
140        simulateEvent(new MouseButtonUp(rightBtn, 0, 0), element1);
141        simulateEvent(new MouseClick(middleBtn, 0, 0), element1);
142        assertCondensedMouseClicks("", "", "click left elem1", "", "", "click middle elem1");
143
144        simulateEvent(new MouseButtonDown(leftBtn, 1, 0), element1);
145        simulateEvent(new MouseButtonUp(leftBtn, 0, 1), element1);
146        simulateEvent(new MouseClick(leftBtn, 1, 1), element1);
147        assertCondensedMouseClicks("", "", "click left elem1", "", "", "click middle elem1",
148                                   "drag left elem1", "click left elem1");
149    }
150
151    /**
152     *
153     */
154    @Test
155    public void testDragAndDrop() {
156        MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
157        MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
158        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
159
160        IGUIElement element1 = new DummyGUIElement("elem1");
161
162        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
163        simulateEvent(new MouseButtonUp(leftBtn, 5, 0), element1);
164        assertCondensedMouseClicks("drag left elem1");
165
166        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
167        simulateEvent(new MouseButtonUp(leftBtn, 5, 5), element1);
168        assertCondensedMouseClicks("drag left elem1", "drag left elem1");
169
170        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
171        simulateEvent(new MouseButtonUp(leftBtn, 0, 5), element1);
172        simulateEvent(new MouseClick(leftBtn, 0, 0), element1);
173        assertCondensedMouseClicks("drag left elem1", "drag left elem1", "drag left elem1",
174                                   "click left elem1");
175
176        simulateEvent(new MouseButtonDown(middleBtn, 5, 0), element1);
177        simulateEvent(new MouseButtonUp(middleBtn, 0, 0), element1);
178        simulateEvent(new MouseClick(middleBtn, 0, 0), element1);
179        assertCondensedMouseClicks("drag left elem1", "drag left elem1", "drag left elem1",
180                                   "click left elem1", "", "", "click middle elem1");
181
182        simulateEvent(new MouseButtonDown(rightBtn, 0, 5), element1);
183        simulateEvent(new MouseButtonUp(rightBtn, 0, 0), element1);
184        simulateEvent(new MouseClick(rightBtn, 0, 0), element1);
185        assertCondensedMouseClicks("drag left elem1", "drag left elem1", "drag left elem1",
186                                   "click left elem1", "", "", "click middle elem1",
187                                   "", "", "click right elem1");
188    }
189
190    /**
191     *
192     */
193    @Test
194    public void testDoubleClick() {
195        MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
196        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
197
198        IGUIElement element1 = new DummyGUIElement("elem1");
199
200        simulateEventWithTimestamp(new MouseClick(leftBtn, 0, 0), element1);
201        simulateEventWithTimestamp(new MouseClick(leftBtn, 0, 0), element1);
202        assertCondensedMouseClicks("dblclick left elem1");
203
204        simulateEventWithTimestamp(new MouseButtonDown(leftBtn, 5, 5), element1);
205        simulateEventWithTimestamp(new MouseButtonUp(leftBtn, 5, 5), element1);
206        simulateEventWithTimestamp(new MouseButtonDown(leftBtn, 5, 5), element1);
207        simulateEventWithTimestamp(new MouseButtonUp(leftBtn, 5, 5), element1);
208        assertCondensedMouseClicks("dblclick left elem1", "dblclick left elem1");
209
210        simulateEventWithTimestamp(new MouseClick(leftBtn, 0, 0), element1);
211        simulateEventWithTimestamp(new MouseClick(leftBtn, 5, 5), element1);
212        assertCondensedMouseClicks("dblclick left elem1", "dblclick left elem1",
213                                   "click left elem1", "click left elem1");
214
215        simulateEventWithTimestamp(new MouseButtonDown(leftBtn, 0, 0), element1);
216        simulateEventWithTimestamp(new MouseButtonUp(leftBtn, 0, 0), element1);
217        simulateEventWithTimestamp(new MouseButtonDown(leftBtn, 5, 5), element1);
218        simulateEventWithTimestamp(new MouseButtonUp(leftBtn, 5, 5), element1);
219        assertCondensedMouseClicks("dblclick left elem1", "dblclick left elem1",
220                                   "click left elem1", "click left elem1",
221                                   "click left elem1", "click left elem1");
222
223        simulateEventWithTimestamp(new MouseClick(rightBtn, 0, 0), element1);
224        simulateEventWithTimestamp(new MouseClick(rightBtn, 5, 5), element1);
225        assertCondensedMouseClicks("dblclick left elem1", "dblclick left elem1",
226                                   "click left elem1", "click left elem1",
227                                   "click left elem1", "click left elem1",
228                                   "click right elem1", "click right elem1");
229
230        simulateEventWithTimestamp(new MouseButtonDown(rightBtn, 0, 0), element1);
231        simulateEventWithTimestamp(new MouseButtonUp(rightBtn, 0, 0), element1);
232        simulateEventWithTimestamp(new MouseButtonDown(rightBtn, 5, 5), element1);
233        simulateEventWithTimestamp(new MouseButtonUp(rightBtn, 5, 5), element1);
234        assertCondensedMouseClicks("dblclick left elem1", "dblclick left elem1",
235                                   "click left elem1", "click left elem1",
236                                   "click left elem1", "click left elem1",
237                                   "click right elem1", "click right elem1",
238                                   "click right elem1", "click right elem1");
239
240    }
241
242    /**
243     *
244     */
245    private void simulateEvent(IEventType eventType, IGUIElement guiElement) {
246        events.add(new Event(eventType, guiElement));
247    }
248
249    /**
250     *
251     */
252    private void simulateEventWithTimestamp(IEventType eventType, IGUIElement guiElement) {
253        Event event = new Event(eventType, guiElement);
254        event.setTimestamp(System.currentTimeMillis());
255        events.add(event);
256    }
257
258    /**
259     *
260     */
261    private void assertCondensedMouseClicks(String... clickedTargets) {
262        MouseClickCondenser condenser = new MouseClickCondenser();
263        List<Event> result = condenser.condenseMouseClicks(events);
264       
265        assertEquals(clickedTargets.length, result.size());
266       
267        for (int i = 0; i < clickedTargets.length; i++) {
268            String clickedTarget = clickedTargets[i];
269           
270            if ((clickedTarget != null) && (!"".equals(clickedTarget))) {
271                String[] parts = clickedTarget.split(" ");
272                assertEquals("invalid test case", 3, parts.length);
273               
274                if ("click".equals(parts[0])) {
275                    assertTrue(result.get(i).getType() instanceof MouseClick);
276                }
277                else if ("dblclick".equals(parts[0])) {
278                    assertTrue(result.get(i).getType() instanceof MouseDoubleClick);
279                }
280                else if ("drag".equals(parts[0])) {
281                    assertTrue(result.get(i).getType() instanceof MouseDragAndDrop);
282                }
283                else {
284                    fail("invalid assertion in test case");
285                }
286
287                if ("left".equals(parts[1])) {
288                    assertEquals(MouseButtonInteraction.Button.LEFT,
289                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
290                }
291                else if ("middle".equals(parts[1])) {
292                    assertEquals(MouseButtonInteraction.Button.MIDDLE,
293                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
294                }
295                else if ("right".equals(parts[1])) {
296                    assertEquals(MouseButtonInteraction.Button.RIGHT,
297                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
298                }
299                else {
300                    fail("invalid assertion in test case");
301                }
302
303                assertTrue(result.get(i).getTarget() instanceof DummyGUIElement);
304
305                assertEquals
306                    (parts[2], ((DummyGUIElement) result.get(i).getTarget()).getStringIdentifier());
307            }
308            else {
309                assertFalse(result.get(i).getType() instanceof MouseClick);
310            }
311        }
312    }
313}
Note: See TracBrowser for help on using the repository browser.