|
|
|
@ -459,4 +459,74 @@ describe('Key Event Handling', function () {
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xfe03, 'AltRight', true);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe('Missing Shift keyup on Windows', function () {
|
|
|
|
|
let origNavigator;
|
|
|
|
|
beforeEach(function () {
|
|
|
|
|
// window.navigator is a protected read-only property in many
|
|
|
|
|
// environments, so we need to redefine it whilst running these
|
|
|
|
|
// tests.
|
|
|
|
|
origNavigator = Object.getOwnPropertyDescriptor(window, "navigator");
|
|
|
|
|
if (origNavigator === undefined) {
|
|
|
|
|
// Object.getOwnPropertyDescriptor() doesn't work
|
|
|
|
|
// properly in any version of IE
|
|
|
|
|
this.skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(window, "navigator", {value: {}});
|
|
|
|
|
if (window.navigator.platform !== undefined) {
|
|
|
|
|
// Object.defineProperty() doesn't work properly in old
|
|
|
|
|
// versions of Chrome
|
|
|
|
|
this.skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
window.navigator.platform = "Windows x86_64";
|
|
|
|
|
|
|
|
|
|
this.clock = sinon.useFakeTimers();
|
|
|
|
|
});
|
|
|
|
|
afterEach(function () {
|
|
|
|
|
Object.defineProperty(window, "navigator", origNavigator);
|
|
|
|
|
this.clock.restore();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should fake a left Shift keyup', function () {
|
|
|
|
|
const kbd = new Keyboard(document);
|
|
|
|
|
kbd.onkeyevent = sinon.spy();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyDown(keyevent('keydown', {code: 'ShiftLeft', key: 'Shift', location: 1}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledOnce;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe1, 'ShiftLeft', true);
|
|
|
|
|
kbd.onkeyevent.resetHistory();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyDown(keyevent('keydown', {code: 'ShiftRight', key: 'Shift', location: 2}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledOnce;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe2, 'ShiftRight', true);
|
|
|
|
|
kbd.onkeyevent.resetHistory();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyUp(keyevent('keyup', {code: 'ShiftLeft', key: 'Shift', location: 1}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledTwice;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe2, 'ShiftRight', false);
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe1, 'ShiftLeft', false);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should fake a right Shift keyup', function () {
|
|
|
|
|
const kbd = new Keyboard(document);
|
|
|
|
|
kbd.onkeyevent = sinon.spy();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyDown(keyevent('keydown', {code: 'ShiftLeft', key: 'Shift', location: 1}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledOnce;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe1, 'ShiftLeft', true);
|
|
|
|
|
kbd.onkeyevent.resetHistory();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyDown(keyevent('keydown', {code: 'ShiftRight', key: 'Shift', location: 2}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledOnce;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe2, 'ShiftRight', true);
|
|
|
|
|
kbd.onkeyevent.resetHistory();
|
|
|
|
|
|
|
|
|
|
kbd._handleKeyUp(keyevent('keyup', {code: 'ShiftRight', key: 'Shift', location: 2}));
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledTwice;
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe2, 'ShiftRight', false);
|
|
|
|
|
expect(kbd.onkeyevent).to.have.been.calledWith(0xffe1, 'ShiftLeft', false);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|