| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- import {
- _getRefCount,
- _resetState,
- isPressed,
- isPressedCtrlKey,
- startObserving,
- stopObserving,
- } from 'handsontable/utils/keyStateObserver';
- describe('keyStateObserver', () => {
- afterEach(() => {
- _resetState();
- });
- describe('.startObserving', () => {
- it('should internally keep calls count to make the dom listener removable', () => {
- startObserving();
- startObserving();
- startObserving();
- startObserving();
- expect(_getRefCount()).toBe(4);
- });
- });
- describe('.stopObserving', () => {
- it('should internally keep calls count to make the dom listener removable', () => {
- startObserving();
- startObserving();
- startObserving();
- startObserving();
- expect(_getRefCount()).toBe(4);
- stopObserving();
- stopObserving();
- stopObserving();
- stopObserving();
- stopObserving();
- stopObserving();
- expect(_getRefCount()).toBe(0);
- });
- it('should reset all key states after the last stopObserving function is called', () => {
- startObserving();
- expect(isPressed('ENTER')).toBe(false);
- expect(isPressed('BACKSPACE')).toBe(false);
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 8 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 91 }));
- expect(isPressed('ENTER')).toBe(true);
- expect(isPressed('BACKSPACE')).toBe(true);
- expect(isPressedCtrlKey()).toBe(true);
- stopObserving();
- expect(isPressed('ENTER')).toBe(false);
- expect(isPressed('BACKSPACE')).toBe(false);
- expect(isPressedCtrlKey()).toBe(false);
- });
- });
- describe('.isPressedCtrlKey', () => {
- it('should return `true` when CTRL key is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
- expect(isPressedCtrlKey()).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 17 }));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `true` when left CMD key is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 91 }));
- expect(isPressedCtrlKey()).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 91 }));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `true` when right CMD key is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 93 }));
- expect(isPressedCtrlKey()).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 93 }));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `true` when CMD key is pressed (macOS on FF)', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 224 }));
- expect(isPressedCtrlKey()).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 224 }));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when left CMD key AND F is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 91 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when right CMD key AND F is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 93 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when CMD key AND F is pressed (macOS on FF)', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 224 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when CTRL key AND F is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 70 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when left CMD key AND D is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 91 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 68 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when right CMD key AND D is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 93 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 68 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when CMD key AND D is pressed (macOS on FF)', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 224 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 68 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- it('should return `false` when CTRL key AND D is pressed', () => {
- startObserving();
- expect(isPressedCtrlKey()).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 17 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 68 }));
- window.dispatchEvent(new FocusEvent('blur'));
- expect(isPressedCtrlKey()).toBe(false);
- });
- });
- describe('.isPressed', () => {
- it('should return `true` when ENTER key is pressed', () => {
- startObserving();
- expect(isPressed('ENTER')).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13 }));
- expect(isPressed('ENTER')).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 13 }));
- expect(isPressed('ENTER')).toBe(false);
- });
- it('should return `true` when multiple expected keys are pressed', () => {
- startObserving();
- expect(isPressed('ENTER|BACKSPACE')).toBe(false);
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13 }));
- expect(isPressed('ENTER|BACKSPACE')).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 13 }));
- document.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 8 }));
- expect(isPressed('ENTER|BACKSPACE')).toBe(true);
- document.dispatchEvent(new KeyboardEvent('keyup', { keyCode: 8 }));
- });
- });
- });
|