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