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

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