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

Last change on this file since 688 was 688, checked in by pharms, 12 years ago
  • moved text input detection from task tree generation to dedicated command to be run on sequences
File size: 9.6 KB
Line 
1package de.ugoe.cs.quest.eventcore.gui;
2
3import static org.junit.Assert.*;
4
5import java.util.ArrayList;
6import java.util.List;
7
8import org.junit.Test;
9
10import de.ugoe.cs.quest.eventcore.Event;
11import de.ugoe.cs.quest.eventcore.IEventType;
12import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
13import de.ugoe.cs.quest.test.DummyGUIElement;
14import de.ugoe.cs.quest.test.DummyTextField;
15import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
16
17/**
18 * @author Patrick Harms
19 */
20public class TextInputDetectorTest {
21
22    private List<Event> events = new ArrayList<Event>();
23
24    /**
25     *
26     */
27    @Test
28    public void testSimpleTextEntry() {
29        IGUIElement element1 = new DummyTextField("elem1");
30        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
31        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
32        assertTextInput("a");
33
34        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
35        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
36        assertTextInput("ab");
37
38        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
39        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
40        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
41        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
42        assertTextInput("abC");
43
44        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
45        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element1);
46        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element1);
47        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element1);
48        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element1);
49        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element1);
50        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element1);
51        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
52        assertTextInput("abCDEF");
53
54        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
55        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
56        simulateEvent(new KeyPressed(VirtualKey.LETTER_G), element1);
57        simulateEvent(new KeyReleased(VirtualKey.LETTER_G), element1);
58        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
59        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
60        assertTextInput("abCDEFg");
61
62    }
63
64    /**
65     *
66     */
67    @Test
68    public void testTextEntryOnDifferentGuiElements() {
69        IGUIElement element1 = new DummyTextField("elem1");
70        IGUIElement element2 = new DummyTextField("elem2");
71        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
72        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
73        assertTextInput("a");
74
75        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element2);
76        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element2);
77        assertTextInput("a", "b");
78
79        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
80        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
81        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
82        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
83        assertTextInput("a", "b", "C");
84
85        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element2);
86        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element2);
87        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element2);
88        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element2);
89        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element2);
90        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element2);
91        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element2);
92        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element2);
93        assertTextInput("a", "b", "C", "DEF");
94
95        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
96        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
97        simulateEvent(new KeyPressed(VirtualKey.LETTER_G), element1);
98        simulateEvent(new KeyReleased(VirtualKey.LETTER_G), element1);
99        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
100        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
101        assertTextInput("a", "b", "C", "DEF", "g");
102
103    }
104
105    /**
106     *
107     */
108    @Test
109    public void testUsageOfBackspace() {
110        IGUIElement element1 = new DummyTextField("elem1");
111        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
112        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
113        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
114        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
115        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
116        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
117        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element1);
118        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element1);
119        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
120        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
121        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element1);
122        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element1);
123        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element1);
124        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element1);
125        assertTextInput("abcef");
126
127        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
128        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
129        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
130        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
131        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
132        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
133        assertTextInput("ab");
134
135    }
136
137    /**
138     *
139     */
140    @Test
141    public void testOtherInteractionsInBetween() {
142        IGUIElement element1 = new DummyTextField("elem1");
143        IGUIElement element2 = new DummyGUIElement("elem2");
144        IGUIElement element3 = new DummyGUIElement("elem3");
145       
146        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element2);
147        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
148        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
149        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
150        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
151        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
152        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
153        assertTextInput("", "abc");
154
155        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element2);
156        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element3);
157        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
158        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
159        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
160        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
161        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
162        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
163        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element3);
164        assertTextInput("", "abc", "", "", "abc", "");
165
166        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element2);
167        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element3);
168        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
169        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
170        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
171        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
172        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
173        simulateEvent(new MouseClick(MouseClick.Button.LEFT), element3);
174        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
175       
176        // the pressing of the c is not completed. So it must be included in the resulting
177        // text input event but it may only be followed by the mouse click. The subsequent release
178        // of the c key is ignored and results in a removal of the event.
179        assertTextInput("", "abc", "", "", "abc", "", "", "", "abc", "");
180    }
181
182    /**
183     *
184     */
185    private void simulateEvent(IEventType eventType, IGUIElement guiElement) {
186        events.add(new Event(eventType, guiElement));
187    }
188
189    /**
190     *
191     */
192    private void assertTextInput(String... enteredTexts) {
193        TextInputDetector detector = new TextInputDetector();
194        List<Event> result = detector.detectTextInputs(events);
195       
196        assertEquals(enteredTexts.length, result.size());
197       
198        for (int i = 0; i < enteredTexts.length; i++) {
199            String enteredText = enteredTexts[i];
200           
201            if ((enteredText != null) && (!"".equals(enteredText))) {
202                assertTrue(result.get(i).getType() instanceof TextInput);
203                assertNotNull(((TextInput) result.get(i).getType()).getEnteredText());
204                assertEquals(enteredText, ((TextInput) result.get(i).getType()).getEnteredText());
205           
206                assertNotNull(((TextInput) result.get(i).getType()).getTextInputEvents());
207                assertTrue(((TextInput) result.get(i).getType()).getTextInputEvents().size() > 0);
208                //assertTrue
209                //    ((((TextInput) result.get(i).getType()).getTextInputEvents().size() % 2) == 0);
210            }
211            else {
212                assertFalse(result.get(i).getType() instanceof TextInput);
213            }
214        }
215    }
216}
Note: See TracBrowser for help on using the repository browser.