Skip to content

Commit 8b583e0

Browse files
committed
added testKeyboardEventsPressKey
1 parent 28ac1a2 commit 8b583e0

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

tests/Js/EventsTest.php

+64
Original file line numberDiff line numberDiff line change
@@ -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
}

web-fixtures/js_test.html

+10
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<input class="input first" type="text" value="" />
3030
<input class="input second" type="text" value="" />
3131
<input class="input third" type="text" value="" />
32+
<input class="input fourth" type="text" value=""/>
3233
<div class="text-event"></div>
3334
</div>
3435

@@ -84,6 +85,15 @@
8485
$('.text-event').text('key upped:' + ev.which + ' / ' + ev.altKey * 1 + ' / ' + ev.ctrlKey * 1 + ' / ' + ev.shiftKey * 1 + ' / ' + ev.metaKey * 1);
8586
});
8687

88+
$('.elements input.input.fourth').bind('keydown keypress keyup', function(ev) {
89+
$('.text-event').append([
90+
'event=' + ev.type,
91+
// chrome and firefox are returning different values on keypress
92+
'keyCode=' + (ev.keyCode || ev.charCode || ev.key),
93+
'modifier=' + ((ev.altKey * 1) + ' / ' + (ev.ctrlKey * 1) + ' / ' + (ev.shiftKey * 1) + ' / ' + (ev.metaKey * 1))
94+
].join(' ') + ';');
95+
});
96+
8797
$( "#draggable" ).draggable();
8898
$( "#droppable" ).droppable({
8999
drop: function( event, ui ) {

0 commit comments

Comments
 (0)