Spaces:
Running
Running
const test = require('tap').test; | |
const Keyboard = require('../../src/io/keyboard'); | |
const Runtime = require('../../src/engine/runtime'); | |
test('extended spec', t => { | |
const rt = new Runtime(); | |
const k = new Keyboard(rt); | |
t.type(k.getLastKeyPressed, 'function'); | |
t.end(); | |
}); | |
test('extended key support', t => { | |
const rt = new Runtime(); | |
const k = new Keyboard(rt); | |
k.postData({ | |
key: 'Backspace', | |
isDown: true | |
}); | |
t.strictDeepEquals(k._keysPressed, ['backspace']); | |
t.strictEqual(k.getKeyIsDown('backspace'), true); | |
t.end(); | |
}); | |
test('last key pressed', t => { | |
const rt = new Runtime(); | |
const k = new Keyboard(rt); | |
t.strictEqual(k.getLastKeyPressed(), ''); | |
k.postData({ | |
key: 'a', | |
isDown: true | |
}); | |
t.strictEqual(k.getLastKeyPressed(), 'a'); | |
k.postData({ | |
key: 'b', | |
isDown: true | |
}); | |
t.strictEqual(k.getLastKeyPressed(), 'b'); | |
t.end(); | |
}); | |
test('holding shift and key, releasing shift, then releasing key', t => { | |
const rt = new Runtime(); | |
const k = new Keyboard(rt); | |
// Press Shift+2 to produce @ | |
k.postData({ | |
key: '@', | |
isDown: true, | |
keyCode: 50 | |
}); | |
t.equal(k.getKeyIsDown('2'), false); | |
t.equal(k.getKeyIsDown('@'), true); | |
t.equal(k.getKeyIsDown('any'), true); | |
// Release shift, then release 2 | |
k.postData({ | |
key: 'Shift', | |
isDown: false, | |
keyCode: 16 | |
}); | |
k.postData({ | |
key: '2', | |
isDown: false, | |
keyCode: 50 | |
}); | |
t.equal(k.getKeyIsDown('@'), false); | |
t.equal(k.getKeyIsDown('2'), false); | |
t.equal(k.getKeyIsDown('any'), false); | |
t.end(); | |
}); | |
test('holding shift and key, releasing shift, waiting, then releasing key', t => { | |
const rt = new Runtime(); | |
const k = new Keyboard(rt); | |
k.postData({ | |
key: '@', | |
isDown: true, | |
keyCode: 50 | |
}); | |
t.equal(k.getKeyIsDown('2'), false); | |
t.equal(k.getKeyIsDown('@'), true); | |
t.equal(k.getKeyIsDown('any'), true); | |
k.postData({ | |
key: 'Shift', | |
isDown: false, | |
keyCode: 16 | |
}); | |
// But 2 is still being held, so it will send a press event | |
k.postData({ | |
key: '2', | |
isDown: true, | |
keyCode: 50 | |
}); | |
t.equal(k.getKeyIsDown('@'), false); | |
t.equal(k.getKeyIsDown('2'), true); | |
t.equal(k.getKeyIsDown('any'), true); | |
// And now we release 2 | |
k.postData({ | |
key: '2', | |
isDown: false, | |
keyCode: 50 | |
}); | |
t.equal(k.getKeyIsDown('@'), false); | |
t.equal(k.getKeyIsDown('2'), false); | |
t.equal(k.getKeyIsDown('any'), false); | |
t.end(); | |
}); | |