/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md. */ import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor'; import Delete from '../src/delete'; import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata'; describe( 'Delete feature', () => { let editor, viewDocument; beforeEach( () => { return VirtualTestEditor .create( { plugins: [ Delete ] } ) .then( newEditor => { editor = newEditor; viewDocument = editor.editing.view.document; } ); } ); afterEach( () => { return editor.destroy(); } ); it( 'creates two commands', () => { expect( editor.commands.get( 'delete' ) ).to.have.property( 'direction', 'backward' ); expect( editor.commands.get( 'forwardDelete' ) ).to.have.property( 'direction', 'forward' ); } ); it( 'listens to the editing view document delete event', () => { const spy = editor.execute = sinon.spy(); const viewDocument = editor.editing.view.document; const domEvt = getDomEvent(); viewDocument.fire( 'delete', new DomEventData( viewDocument, domEvt, { direction: 'forward', unit: 'character', sequence: 1 } ) ); expect( spy.calledOnce ).to.be.true; expect( spy.calledWithMatch( 'forwardDelete', { unit: 'character', sequence: 1 } ) ).to.be.true; expect( domEvt.preventDefault.calledOnce ).to.be.true; viewDocument.fire( 'delete', new DomEventData( viewDocument, getDomEvent(), { direction: 'backward', unit: 'character', sequence: 5 } ) ); expect( spy.calledTwice ).to.be.true; expect( spy.calledWithMatch( 'delete', { unit: 'character', sequence: 5 } ) ).to.be.true; } ); it( 'scrolls the editing document to the selection after executing the command', () => { const scrollSpy = sinon.stub( editor.editing.view, 'scrollToTheSelection' ); const executeSpy = editor.execute = sinon.spy(); viewDocument.fire( 'delete', new DomEventData( viewDocument, getDomEvent(), { direction: 'backward', unit: 'character' } ) ); sinon.assert.calledOnce( scrollSpy ); sinon.assert.callOrder( executeSpy, scrollSpy ); } ); function getDomEvent() { return { preventDefault: sinon.spy() }; } } );