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

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