@@ -120,4 +120,68 @@ public function provideKeyboardEventsModifiers()
120
120
'meta ' => array ('meta ' , '0 / 0 / 0 / 1 ' ),
121
121
);
122
122
}
123
+
124
+ /**
125
+ * @dataProvider provideKeyboardEventsPressKeyModifiers
126
+ */
127
+ public function testKeyboardEventsPressKey ($ modifier , $ char , array $ expected )
128
+ {
129
+ $ this ->getSession ()->visit ($ this ->pathTo ('/js_test.html ' ));
130
+ $ webAssert = $ this ->getAssertSession ();
131
+
132
+ $ input = $ webAssert ->elementExists ('css ' , '.elements input.input.fourth ' );
133
+ $ event = $ webAssert ->elementExists ('css ' , '.elements .text-event ' );
134
+
135
+ $ input ->pressKey ($ char , $ modifier );
136
+ $ this ->assertEquals ($ expected , array_map ('trim ' , array_filter (explode ('; ' , $ event ->getText ()))));
137
+ }
138
+
139
+ public function provideKeyboardEventsPressKeyModifiers ()
140
+ {
141
+ /**
142
+ * @see http://api.jquery.com/keypress/
143
+ *
144
+ * Note that keydown and keyup provide a code indicating which key is pressed,
145
+ * while keypress indicates which character was entered.
146
+ * For example, a lowercase "a" will be reported as 65 by keydown and keyup, but as 97 by keypress.
147
+ * An uppercase "A" is reported as 65 by all events.
148
+ */
149
+ return array (
150
+ 'none ' => array (null , 'u ' , array ( // u = 117 U = 85
151
+ 'event=keydown keyCode=85 modifier=0 / 0 / 0 / 0 ' ,
152
+ 'event=keypress keyCode=117 modifier=0 / 0 / 0 / 0 ' ,
153
+ 'event=keyup keyCode=85 modifier=0 / 0 / 0 / 0 '
154
+ )),
155
+ 'alt ' => array ('alt ' , 'a ' , array ( // a = 97 A = 65
156
+ 'event=keydown keyCode=18 modifier=1 / 0 / 0 / 0 ' ,
157
+ 'event=keydown keyCode=65 modifier=1 / 0 / 0 / 0 ' ,
158
+ 'event=keypress keyCode=97 modifier=1 / 0 / 0 / 0 ' ,
159
+ 'event=keyup keyCode=65 modifier=1 / 0 / 0 / 0 ' ,
160
+ 'event=keyup keyCode=18 modifier=0 / 0 / 0 / 0 '
161
+ )),
162
+ // do not use ctrl+r it will force browser to reload (firefox)
163
+ // jQuery considers ctrl as being a metaKey in the normalized event
164
+ 'ctrl ' => array ('ctrl ' , 'b ' , array ( // b = 98 B = 66
165
+ 'event=keydown keyCode=17 modifier=0 / 1 / 0 / 1 ' ,
166
+ 'event=keydown keyCode=66 modifier=0 / 1 / 0 / 1 ' ,
167
+ 'event=keypress keyCode=98 modifier=0 / 1 / 0 / 1 ' ,
168
+ 'event=keyup keyCode=66 modifier=0 / 1 / 0 / 1 ' ,
169
+ 'event=keyup keyCode=17 modifier=0 / 0 / 0 / 0 '
170
+ )),
171
+ 'shift ' => array ('shift ' , 'c ' , array ( // c = 99 C = 67
172
+ 'event=keydown keyCode=16 modifier=0 / 0 / 1 / 0 ' ,
173
+ 'event=keydown keyCode=67 modifier=0 / 0 / 1 / 0 ' ,
174
+ 'event=keypress keyCode=67 modifier=0 / 0 / 1 / 0 ' ,
175
+ 'event=keyup keyCode=67 modifier=0 / 0 / 1 / 0 ' ,
176
+ 'event=keyup keyCode=16 modifier=0 / 0 / 0 / 0 '
177
+ )),
178
+ 'meta ' => array ('meta ' , 'd ' , array ( // d = 100 D = 68
179
+ 'event=keydown keyCode=224 modifier=0 / 0 / 0 / 1 ' ,
180
+ 'event=keydown keyCode=68 modifier=0 / 0 / 0 / 1 ' ,
181
+ 'event=keypress keyCode=100 modifier=0 / 0 / 0 / 1 ' ,
182
+ 'event=keyup keyCode=68 modifier=0 / 0 / 0 / 1 ' ,
183
+ 'event=keyup keyCode=224 modifier=0 / 0 / 0 / 0 '
184
+ ))
185
+ );
186
+ }
123
187
}
0 commit comments