key-sequence
Version:
Detect a sequence of keys being pressed.
126 lines (111 loc) • 4.29 kB
JavaScript
/**
* Created by ashish.shubham on 3/27/16.
*/
;
var onKeySequence = require('../index.js');
describe('getKeySequenceDetector', function () {
it('should match sequence without wildcards and call success cb with event', function() {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence(['a','b','c'], onSuccess);
detector('a', event);
detector('b', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should match sequence with wildcards and call success cb with event', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence(['a','b*','c'], onSuccess);
detector('a', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
detector('a', event);
detector('b', event);
detector('b', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should not match invalid sequence but should continue to match the valid one', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence(['a', 'b*', 'c'], onSuccess);
detector('a', event);
detector('d', event);
expect(onSuccess).not.toHaveBeenCalled();
detector('a', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should not match invalid sequence but if the sequence breaks at the start of a potential valid one, continue', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence(['a', 'b*', 'c'], onSuccess);
detector('a', event);
detector('b', event);
detector('a', event);
expect(onSuccess).not.toHaveBeenCalled();
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should match keycodes as well', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence([97, 'b*', 'c'], onSuccess);
detector('a', event);
detector('b', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
detector('a', event);
detector(98, event);
detector(98, event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should match keycodes with wildcards', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence([97, '98*', 'c'], onSuccess);
detector('a', event);
detector('b', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
detector(97, event);
detector(98, event);
detector(98, event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
});
it('should match special regex metacharacters', function () {
var onSuccess = jasmine.createSpy();
var event = {};
var detector = onKeySequence([97, '\\s+', 'c'], onSuccess);
detector('a', event);
detector(' ', event);
detector(' ', event);
detector('\t', event);
detector('\n', event);
detector('c', event);
expect(onSuccess).toHaveBeenCalledWith(event);
var onSuccess2 = jasmine.createSpy();
detector = onKeySequence([97, '\\s+', 'c'], onSuccess2);
detector('a', event);
detector(' ', event);
detector(' ', event);
detector('\t', event);
detector('\b', event);
detector('c', event);
expect(onSuccess2).not.toHaveBeenCalled();
var onSuccess3 = jasmine.createSpy();
var event3 = {};
detector = onKeySequence([97, '\\s+', '.', 'c'], onSuccess3);
detector('a', event3);
detector(' ', event3);
detector(' ', event3);
detector('\t', event3);
detector('\n', event3);
detector('x', event3);
detector('c', event3);
expect(onSuccess3).toHaveBeenCalledWith(event3);
})
});