@@ -2,6 +2,25 @@ const test = require('tap').test;
2
2
const Keyboard = require ( '../../src/io/keyboard' ) ;
3
3
const Runtime = require ( '../../src/engine/runtime' ) ;
4
4
5
+ function listenForKeyboardEvents ( rt ) {
6
+ const eventsEmitted = {
7
+ KEY_PRESSED : [ ] ,
8
+ KEY_ANY_PRESSED : [ ] ,
9
+ } ;
10
+
11
+ rt . on ( 'KEY_PRESSED' , event => {
12
+ eventsEmitted . KEY_PRESSED . push ( event ) ;
13
+ } ) ;
14
+
15
+ // Note that KEY_ANY_PRESSED doesn't emit any event details and so
16
+ // the event value should be `undefined`.
17
+ rt . on ( 'KEY_ANY_PRESSED' , event => {
18
+ eventsEmitted . KEY_ANY_PRESSED . push ( event ) ;
19
+ } ) ;
20
+
21
+ return eventsEmitted ;
22
+ }
23
+
5
24
test ( 'spec' , t => {
6
25
const rt = new Runtime ( ) ;
7
26
const k = new Keyboard ( rt ) ;
@@ -15,89 +34,154 @@ test('spec', t => {
15
34
test ( 'space key' , t => {
16
35
const rt = new Runtime ( ) ;
17
36
const k = new Keyboard ( rt ) ;
37
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
18
38
19
39
k . postData ( {
20
40
key : ' ' ,
21
41
isDown : true
22
42
} ) ;
43
+
23
44
t . strictDeepEquals ( k . _keysPressed , [ 'space' ] ) ;
45
+
24
46
t . strictEquals ( k . getKeyIsDown ( 'space' ) , true ) ;
25
47
t . strictEquals ( k . getKeyIsDown ( 'any' ) , true ) ;
48
+
49
+ t . same ( eventsEmitted . KEY_PRESSED , [ 'space' ] ) ;
50
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ undefined ] ) ;
51
+
26
52
t . end ( ) ;
27
53
} ) ;
28
54
29
55
test ( 'letter key' , t => {
30
56
const rt = new Runtime ( ) ;
31
57
const k = new Keyboard ( rt ) ;
58
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
32
59
33
60
k . postData ( {
34
61
key : 'a' ,
35
62
isDown : true
36
63
} ) ;
64
+
37
65
t . strictDeepEquals ( k . _keysPressed , [ 'A' ] ) ;
66
+
38
67
t . strictEquals ( k . getKeyIsDown ( 65 ) , true ) ;
39
68
t . strictEquals ( k . getKeyIsDown ( 'a' ) , true ) ;
40
69
t . strictEquals ( k . getKeyIsDown ( 'A' ) , true ) ;
41
70
t . strictEquals ( k . getKeyIsDown ( 'any' ) , true ) ;
71
+
72
+ t . same ( eventsEmitted . KEY_PRESSED , [ 'A' ] ) ;
73
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ undefined ] ) ;
74
+
42
75
t . end ( ) ;
43
76
} ) ;
44
77
45
78
test ( 'number key' , t => {
46
79
const rt = new Runtime ( ) ;
47
80
const k = new Keyboard ( rt ) ;
81
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
48
82
49
83
k . postData ( {
50
84
key : '1' ,
51
85
isDown : true
52
86
} ) ;
87
+
53
88
t . strictDeepEquals ( k . _keysPressed , [ '1' ] ) ;
89
+
54
90
t . strictEquals ( k . getKeyIsDown ( 49 ) , true ) ;
55
91
t . strictEquals ( k . getKeyIsDown ( '1' ) , true ) ;
56
92
t . strictEquals ( k . getKeyIsDown ( 'any' ) , true ) ;
93
+
94
+ t . same ( eventsEmitted . KEY_PRESSED , [ '1' ] ) ;
95
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ undefined ] ) ;
96
+
57
97
t . end ( ) ;
58
98
} ) ;
59
99
60
100
test ( 'non-english key' , t => {
61
101
const rt = new Runtime ( ) ;
62
102
const k = new Keyboard ( rt ) ;
103
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
63
104
64
105
k . postData ( {
65
106
key : '日' ,
66
107
isDown : true
67
108
} ) ;
109
+
68
110
t . strictDeepEquals ( k . _keysPressed , [ '日' ] ) ;
111
+
69
112
t . strictEquals ( k . getKeyIsDown ( '日' ) , true ) ;
70
113
t . strictEquals ( k . getKeyIsDown ( 'any' ) , true ) ;
114
+
115
+ t . same ( eventsEmitted . KEY_PRESSED , [ '日' ] ) ;
116
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ undefined ] ) ;
117
+
71
118
t . end ( ) ;
72
119
} ) ;
73
120
74
- test ( 'ignore modifier key' , t => {
121
+ test ( 'shift key' , t => {
75
122
const rt = new Runtime ( ) ;
76
123
const k = new Keyboard ( rt ) ;
124
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
77
125
78
126
k . postData ( {
79
127
key : 'Shift' ,
80
128
isDown : true
81
129
} ) ;
130
+
131
+ t . strictDeepEquals ( k . _keysPressed , [ 'shift' ] ) ;
132
+
133
+ t . strictEquals ( k . getKeyIsDown ( 'shift' ) , true ) ;
134
+ t . strictEquals ( k . getKeyIsDown ( 'any' ) , false ) ;
135
+
136
+ t . same ( eventsEmitted . KEY_PRESSED , [ 'shift' ] ) ;
137
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ ] ) ;
138
+
139
+ t . end ( ) ;
140
+ } ) ;
141
+
142
+ test ( 'ignore control key' , t => {
143
+ const rt = new Runtime ( ) ;
144
+ const k = new Keyboard ( rt ) ;
145
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
146
+
147
+ k . postData ( {
148
+ key : 'Control' ,
149
+ isDown : true
150
+ } ) ;
151
+
82
152
t . strictDeepEquals ( k . _keysPressed , [ ] ) ;
153
+
154
+ t . strictEquals ( k . getKeyIsDown ( 'control' ) , false ) ;
83
155
t . strictEquals ( k . getKeyIsDown ( 'any' ) , false ) ;
156
+
157
+ t . same ( eventsEmitted . KEY_PRESSED , [ ] ) ;
158
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ ] ) ;
159
+
84
160
t . end ( ) ;
85
161
} ) ;
86
162
87
163
test ( 'keyup' , t => {
88
164
const rt = new Runtime ( ) ;
89
165
const k = new Keyboard ( rt ) ;
166
+ const eventsEmitted = listenForKeyboardEvents ( rt ) ;
90
167
91
168
k . postData ( {
92
169
key : 'ArrowLeft' ,
93
170
isDown : true
94
171
} ) ;
172
+
95
173
k . postData ( {
96
174
key : 'ArrowLeft' ,
97
175
isDown : false
98
176
} ) ;
177
+
99
178
t . strictDeepEquals ( k . _keysPressed , [ ] ) ;
179
+
100
180
t . strictEquals ( k . getKeyIsDown ( 'left arrow' ) , false ) ;
101
181
t . strictEquals ( k . getKeyIsDown ( 'any' ) , false ) ;
182
+
183
+ t . same ( eventsEmitted . KEY_PRESSED , [ 'left arrow' ] ) ;
184
+ t . same ( eventsEmitted . KEY_ANY_PRESSED , [ undefined ] ) ;
185
+
102
186
t . end ( ) ;
103
187
} ) ;
0 commit comments