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

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