| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /**
- * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
- */
- /* global document */
- import escPressHandler from '../../src/bindings/escpresshandler';
- import DomEmitterMixin from '@ckeditor/ckeditor5-utils/src/dom/emittermixin';
- import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
- import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
- testUtils.createSinonSandbox();
- describe( 'escPressHandler', () => {
- let emitter, actionSpy, activator;
- beforeEach( () => {
- activator = testUtils.sinon.stub().returns( false );
- actionSpy = testUtils.sinon.spy();
- emitter = Object.create( DomEmitterMixin );
- escPressHandler( {
- emitter: emitter,
- activator: activator,
- callback: actionSpy
- } );
- } );
- afterEach( () => {
- emitter.stopListening();
- } );
- it( 'should fired callback after pressing `Esc` when listener is active', () => {
- activator.returns( true );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- sinon.assert.calledOnce( actionSpy );
- } );
- it( 'should not fired callback after pressing a key different than `Esc`', () => {
- activator.returns( true );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.ctrlKey );
- sinon.assert.notCalled( actionSpy );
- } );
- it( 'should not fired callback after pressing Esc when listener is not active', () => {
- activator.returns( false );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.enter );
- sinon.assert.notCalled( actionSpy );
- } );
- it( 'should not fired callback after pressing other than Esc key when listener is active', () => {
- activator.returns( false );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- sinon.assert.notCalled( actionSpy );
- } );
- it( 'should listen when model initial `ifActive` value was `true`', () => {
- const spy = testUtils.sinon.spy();
- activator.returns( true );
- emitter = Object.create( DomEmitterMixin );
- escPressHandler( {
- emitter: emitter,
- activator: activator,
- callback: spy
- } );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- sinon.assert.calledOnce( spy );
- } );
- it( 'should not listen when model initial `ifActive` value was `false`', () => {
- const spy = testUtils.sinon.spy();
- activator.returns( false );
- emitter = Object.create( DomEmitterMixin );
- escPressHandler( {
- emitter: emitter,
- activator: activator,
- callback: spy
- } );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- sinon.assert.notCalled( spy );
- } );
- it( 'should react on model `ifActive` property change', () => {
- activator.returns( true );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- sinon.assert.calledOnce( actionSpy );
- activator.returns( false );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- // Still called once, was not called second time.
- sinon.assert.calledOnce( actionSpy );
- activator.returns( true );
- dispatchKeyboardEvent( document, 'keydown', keyCodes.esc );
- // Called one more time.
- sinon.assert.calledTwice( actionSpy );
- } );
- } );
- // Creates and dispatches keyboard event with specified keyCode.
- //
- // @private
- // @param {EventTarget} eventTarget
- // @param {String} eventName
- // @param {Number} keyCode
- function dispatchKeyboardEvent( eventTarget, eventName, keyCode ) {
- const event = document.createEvent( 'Events' );
- event.initEvent( eventName, true, true );
- event.which = keyCode;
- event.keyCode = keyCode;
- eventTarget.dispatchEvent( event );
- }
|