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