Skip to content

Commit

Permalink
fixes for keyboard key matching and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jhchen committed Mar 29, 2017
1 parent 002da30 commit 03eeedd
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 5 deletions.
11 changes: 6 additions & 5 deletions modules/keyboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,8 @@ const SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';
class Keyboard extends Module {
static match(evt, binding) {
binding = normalize(binding);
if (binding.shortKey != null && !!binding.shortKey !== evt[SHORTKEY] && !!binding[SHORTKEY] !== evt[SHORTKEY]) {
return false;
}
if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function(key) {
return (key != SHORTKEY && !!binding[key] !== evt[key] && binding[key] !== null);
return (!!binding[key] !== evt[key] && binding[key] !== null);
})) {
return false;
}
Expand Down Expand Up @@ -395,8 +392,12 @@ function normalize(binding) {
return null;
}
}
if (binding.shortKey) {
binding[SHORTKEY] = binding.shortKey;
delete binding.shortKey;
}
return binding;
}


export default Keyboard;
export { Keyboard as default, SHORTKEY };
1 change: 1 addition & 0 deletions test/unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import './unit/formats/bold';

import './unit/modules/clipboard';
import './unit/modules/history';
import './unit/modules/keyboard';
import './unit/modules/toolbar';

import './unit/ui/picker';
Expand Down
112 changes: 112 additions & 0 deletions test/unit/modules/keyboard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import Keyboard, { SHORTKEY } from '../../../modules/keyboard';


describe('Keyboard', function() {
describe('match', function() {
it('no modifiers', function() {
let binding = {
key: 'a'
};
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(true);
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: true,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(false);
});

it('simple modifier', function() {
let binding = {
key: 'a',
shiftKey: true
};
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(false);
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: true,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(true);
});

it('optional modifier', function() {
let binding = {
key: 'a',
shiftKey: null
};
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(true);
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: true,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(true);
});

it('shortkey modifier', function() {
let binding = {
key: 'a',
shortKey: true
};
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(false);
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false,
[SHORTKEY]: true
}, binding)).toBe(true);
});

it('native shortkey modifier', function() {
let binding = {
key: 'a',
[SHORTKEY]: true
};
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false
}, binding)).toBe(false);
expect(Keyboard.match({
keyCode: 'A'.charCodeAt(0),
shiftKey: false,
metaKey: false,
ctrlKey: false,
altKey: false,
[SHORTKEY]: true
}, binding)).toBe(true);
});
});
});

0 comments on commit 03eeedd

Please sign in to comment.