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

Last change on this file since 922 was 922, checked in by sherbold, 12 years ago
  • renaming of packages from de.ugoe.cs.quest to de.ugoe.cs.autoquest
  • Property svn:executable set to *
File size: 20.6 KB
Line 
1
2package de.ugoe.cs.autoquest.eventcore.gui;
3
4import static org.junit.Assert.assertEquals;
5
6import java.util.LinkedList;
7import java.util.List;
8import java.util.logging.Level;
9
10import org.junit.BeforeClass;
11import org.junit.Test;
12import static org.mockito.Mockito.*;
13
14import de.ugoe.cs.autoquest.eventcore.Event;
15import de.ugoe.cs.autoquest.eventcore.gui.KeyInteractionCorrector;
16import de.ugoe.cs.autoquest.eventcore.gui.KeyPressed;
17import de.ugoe.cs.autoquest.eventcore.gui.KeyReleased;
18import de.ugoe.cs.autoquest.eventcore.gui.KeyTyped;
19import de.ugoe.cs.autoquest.eventcore.gui.KeyboardFocusChange;
20import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonDown;
21import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonUp;
22import de.ugoe.cs.autoquest.eventcore.gui.MouseClick;
23import de.ugoe.cs.autoquest.eventcore.gui.KeyInteractionCorrector.CleanupMode;
24import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonInteraction.Button;
25import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
26import de.ugoe.cs.autoquest.keyboardmaps.VirtualKey;
27import de.ugoe.cs.util.console.Console;
28import de.ugoe.cs.util.console.TextConsole;
29
30/**
31 * @author Patrick Harms, Steffen Herbold
32 */
33public class KeyInteractionCorrectorTest {
34
35    @Test
36    public void testSortKeyInteractions_1() {
37        List<Event> input = new LinkedList<Event>();
38        List<Event> expected = new LinkedList<Event>();
39
40        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
41
42        IGUIElement guiElement = mock(IGUIElement.class);
43
44        // Normal pressing and releasing of A and B
45        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
46        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
47        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
48        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
49
50        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
51        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
52
53        List<Event> output = sorter.sortKeyInteractions(input);
54
55        assertEquals(expected, output);
56    }
57
58    @Test
59    public void testSortKeyInteractions_2() {
60        List<Event> input = new LinkedList<Event>();
61        List<Event> expected = new LinkedList<Event>();
62
63        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
64
65        IGUIElement guiElement = mock(IGUIElement.class);
66
67        // A is pressed and not released before B is pressed
68        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
69        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
70        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
71        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
72
73        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
74        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
75
76        List<Event> output = sorter.sortKeyInteractions(input);
77
78        assertEquals(expected, output);
79    }
80
81    @Test
82    public void testSortKeyInteractions_3() {
83        List<Event> input = new LinkedList<Event>();
84        List<Event> expected = new LinkedList<Event>();
85
86        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
87
88        IGUIElement guiElement = mock(IGUIElement.class);
89
90        // SHIFT is pressed and released after all keys are pressed
91        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
92        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
93        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
94        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
95        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
96        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
97
98        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
99        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
100        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
101        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
102
103        List<Event> output = sorter.sortKeyInteractions(input);
104
105        assertEquals(expected, output);
106    }
107
108    @Test
109    public void testSortKeyInteractions_4() {
110        List<Event> input = new LinkedList<Event>();
111        List<Event> expected = new LinkedList<Event>();
112
113        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
114
115        IGUIElement guiElement = mock(IGUIElement.class);
116
117        // SHIFT is released before the last key is released
118        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
119        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
120        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
121        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
122        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
123        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
124
125        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
126        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
127        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
128        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
129
130        List<Event> output = sorter.sortKeyInteractions(input);
131
132        assertEquals(expected, output);
133    }
134
135    @Test
136    public void testSortKeyInteractions_5() {
137        List<Event> input = new LinkedList<Event>();
138        List<Event> expected = new LinkedList<Event>();
139
140        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
141
142        IGUIElement guiElement = mock(IGUIElement.class);
143
144        // SHIFT is released before all other keys are released
145        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
146        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
147        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
148        input.add(new Event(new KeyPressed(VirtualKey.LETTER_C), guiElement));
149        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
150        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
151        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
152        input.add(new Event(new KeyReleased(VirtualKey.LETTER_C), guiElement));
153
154        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
155        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
156        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
157        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_C), guiElement));
158        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
159
160        List<Event> output = sorter.sortKeyInteractions(input);
161
162        assertEquals(expected, output);
163    }
164
165    @Test
166    public void testSortKeyInteractions_6() {
167        List<Event> input = new LinkedList<Event>();
168        List<Event> expected = new LinkedList<Event>();
169
170        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
171
172        IGUIElement guiElement = mock(IGUIElement.class);
173
174        // SHIFT, CTRL and ALT are pressed and released after all keys are pressed
175        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
176        input.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
177        input.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
178        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
179        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
180        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
181        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
182        input.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
183        input.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
184        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
185
186        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
187        expected.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
188        expected.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
189        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
190        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
191        expected.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
192        expected.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
193        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
194
195        List<Event> output = sorter.sortKeyInteractions(input);
196
197        assertEquals(expected, output);
198    }
199
200    @Test
201    public void testSortKeyInteractions_7() {
202        List<Event> input = new LinkedList<Event>();
203        List<Event> expected = new LinkedList<Event>();
204
205        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
206
207        IGUIElement guiElement = mock(IGUIElement.class);
208
209        // now SHIFT, CTRL and ALT are released before the last key is released
210        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
211        input.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
212        input.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
213        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
214        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
215        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
216        input.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
217        input.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
218        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
219        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
220
221        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
222        expected.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
223        expected.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
224        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
225        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
226        expected.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
227        expected.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
228        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
229
230        List<Event> output = sorter.sortKeyInteractions(input);
231
232        assertEquals(expected, output);
233    }
234
235    @Test
236    public void testSortKeyInteractions_8() {
237        List<Event> input = new LinkedList<Event>();
238        List<Event> expected = new LinkedList<Event>();
239
240        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
241
242        IGUIElement guiElement = mock(IGUIElement.class);
243
244        // SHIFT, CTRL and ALT are released in another order and before some other keys are
245        // released
246        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
247        input.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
248        input.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
249        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
250        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
251        input.add(new Event(new KeyPressed(VirtualKey.LETTER_B), guiElement));
252        input.add(new Event(new KeyPressed(VirtualKey.LETTER_C), guiElement));
253        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
254        input.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
255        input.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
256        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
257        input.add(new Event(new KeyReleased(VirtualKey.LETTER_C), guiElement));
258
259        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
260        expected.add(new Event(new KeyPressed(VirtualKey.CONTROL), guiElement));
261        expected.add(new Event(new KeyPressed(VirtualKey.ALT), guiElement));
262        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
263        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
264        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_C), guiElement));
265        expected.add(new Event(new KeyReleased(VirtualKey.ALT), guiElement));
266        expected.add(new Event(new KeyReleased(VirtualKey.CONTROL), guiElement));
267        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
268
269        List<Event> output = sorter.sortKeyInteractions(input);
270
271        assertEquals(expected, output);
272    }
273
274    @Test
275    public void testSortKeyInteractions_9() {
276        List<Event> input = new LinkedList<Event>();
277        List<Event> expected = new LinkedList<Event>();
278
279        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
280
281        IGUIElement guiElement = mock(IGUIElement.class);
282
283        // holding of A
284        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
285        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
286        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
287        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
288        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
289        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
290        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
291        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
292        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
293        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
294
295        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
296        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
297        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
298        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
299        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
300        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
301        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
302        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
303        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
304
305        List<Event> output = sorter.sortKeyInteractions(input);
306
307        assertEquals(expected, output);
308    }
309
310    @Test
311    public void testSortKeyInteractions_10() {
312        List<Event> input = new LinkedList<Event>();
313        List<Event> expected = new LinkedList<Event>();
314
315        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
316
317        IGUIElement guiElement = mock(IGUIElement.class);
318
319        // holding of shift and meanwhile pressing of A
320        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
321        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
322        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
323        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
324        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
325        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
326        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
327        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
328        input.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
329        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
330        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
331        input.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
332
333        expected.add(new Event(new KeyPressed(VirtualKey.SHIFT), guiElement));
334        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
335        expected.add(new Event(new KeyReleased(VirtualKey.SHIFT), guiElement));
336
337        List<Event> output = sorter.sortKeyInteractions(input);
338
339        assertEquals(expected, output);
340    }
341
342    @Test
343    public void testSortKeyInteractions_11() {
344        List<Event> input = new LinkedList<Event>();
345        List<Event> expected = new LinkedList<Event>();
346
347        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
348
349        IGUIElement guiElement = mock(IGUIElement.class);
350
351        // Check if keyboard focus change is moved in front of a sequence in case it is in between a
352        // pressed
353        // released pair
354        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
355        input.add(new Event(new KeyboardFocusChange(), guiElement));
356        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
357
358        expected.add(new Event(new KeyboardFocusChange(), guiElement));
359        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
360
361        List<Event> output = sorter.sortKeyInteractions(input);
362
363        assertEquals(expected, output);
364    }
365
366    @Test
367    public void testSortKeyInteractions_12() {
368        List<Event> input = new LinkedList<Event>();
369        List<Event> expected = new LinkedList<Event>();
370
371        KeyInteractionCorrector sorter = new KeyInteractionCorrector();
372
373        IGUIElement guiElement = mock(IGUIElement.class);
374
375        // Check if mouse events stay where they are
376        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
377        input.add(new Event(new MouseButtonDown(Button.LEFT), guiElement));
378        input.add(new Event(new MouseButtonUp(Button.LEFT), guiElement));
379        input.add(new Event(new MouseClick(Button.LEFT), guiElement));
380        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
381
382        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
383        expected.add(new Event(new MouseButtonDown(Button.LEFT), guiElement));
384        expected.add(new Event(new MouseButtonUp(Button.LEFT), guiElement));
385        expected.add(new Event(new MouseClick(Button.LEFT), guiElement));
386
387        List<Event> output = sorter.sortKeyInteractions(input);
388
389        assertEquals(expected, output);
390    }
391
392    @Test
393    public void testSortKeyInteractions_13() {
394        List<Event> input = new LinkedList<Event>();
395        List<Event> expected = new LinkedList<Event>();
396
397        KeyInteractionCorrector sorter = new KeyInteractionCorrector(CleanupMode.REMOVAL);
398
399        IGUIElement guiElement = mock(IGUIElement.class);
400
401        // Check if mouse events stay where they are
402        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
403        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
404        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
405
406        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
407
408        List<Event> output = sorter.sortKeyInteractions(input);
409
410        assertEquals(expected, output);
411    }
412
413    @Test
414    public void testSortKeyInteractions_14() {
415        List<Event> input = new LinkedList<Event>();
416        List<Event> expected = new LinkedList<Event>();
417
418        KeyInteractionCorrector sorter = new KeyInteractionCorrector(CleanupMode.ADDITION);
419
420        IGUIElement guiElement = mock(IGUIElement.class);
421
422        // Check if mouse events stay where they are
423        input.add(new Event(new KeyPressed(VirtualKey.LETTER_A), guiElement));
424        input.add(new Event(new KeyReleased(VirtualKey.LETTER_A), guiElement));
425        input.add(new Event(new KeyReleased(VirtualKey.LETTER_B), guiElement));
426
427        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_A), guiElement));
428        expected.add(new Event(new KeyTyped(VirtualKey.LETTER_B), guiElement));
429
430        List<Event> output = sorter.sortKeyInteractions(input);
431
432        assertEquals(expected, output);
433    }
434
435    @BeforeClass
436    public static void setUpBeforeClass() {
437        Console.reset();
438        Console.getInstance().registerTraceListener(new TextConsole(Level.INFO));
439    }
440}
Note: See TracBrowser for help on using the repository browser.