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

Last change on this file since 1005 was 995, checked in by pharms, 12 years ago
  • added detection of drag and drop
File size: 11.1 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, 1, 0), element1);
164        assertCondensedMouseClicks("drag left elem1");
165
166        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
167        simulateEvent(new MouseButtonUp(leftBtn, 1, 1), element1);
168        assertCondensedMouseClicks("drag left elem1", "drag left elem1");
169
170        simulateEvent(new MouseButtonDown(leftBtn, 0, 0), element1);
171        simulateEvent(new MouseButtonUp(leftBtn, 0, 1), 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, 1, 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, 1), 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    private void simulateEvent(IEventType eventType, IGUIElement guiElement) {
194        events.add(new Event(eventType, guiElement));
195    }
196
197    /**
198     *
199     */
200    private void assertCondensedMouseClicks(String... clickedTargets) {
201        MouseClickCondenser condenser = new MouseClickCondenser();
202        List<Event> result = condenser.condenseMouseClicks(events);
203       
204        assertEquals(clickedTargets.length, result.size());
205       
206        for (int i = 0; i < clickedTargets.length; i++) {
207            String clickedTarget = clickedTargets[i];
208           
209            if ((clickedTarget != null) && (!"".equals(clickedTarget))) {
210                String[] parts = clickedTarget.split(" ");
211                assertEquals("invalid test case", 3, parts.length);
212               
213                if ("click".equals(parts[0])) {
214                    assertTrue(result.get(i).getType() instanceof MouseClick);
215                }
216                else if ("drag".equals(parts[0])) {
217                    assertTrue(result.get(i).getType() instanceof MouseDragAndDrop);
218                }
219                else {
220                    fail("invalid assertion in test case");
221                }
222
223                if ("left".equals(parts[1])) {
224                    assertEquals(MouseButtonInteraction.Button.LEFT,
225                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
226                }
227                else if ("middle".equals(parts[1])) {
228                    assertEquals(MouseButtonInteraction.Button.MIDDLE,
229                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
230                }
231                else if ("right".equals(parts[1])) {
232                    assertEquals(MouseButtonInteraction.Button.RIGHT,
233                                 ((MouseButtonInteraction) result.get(i).getType()).getButton());
234                }
235                else {
236                    fail("invalid assertion in test case");
237                }
238
239                assertTrue(result.get(i).getTarget() instanceof DummyGUIElement);
240
241                assertEquals
242                    (parts[2], ((DummyGUIElement) result.get(i).getTarget()).getStringIdentifier());
243            }
244            else {
245                assertFalse(result.get(i).getType() instanceof MouseClick);
246            }
247        }
248    }
249}
Note: See TracBrowser for help on using the repository browser.