@@ -120,4 +120,68 @@ public function provideKeyboardEventsModifiers()
120120 'meta ' => array ('meta ' , '0 / 0 / 0 / 1 ' ),
121121 );
122122 }
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+ }
123187}
0 commit comments