Răsfoiți Sursa

Tests: delete command and input buffer un/lock test.

Krzysztof Krztoń 9 ani în urmă
părinte
comite
058372aa96

+ 17 - 1
packages/ckeditor5-typing/tests/deletecommand.js

@@ -6,10 +6,13 @@
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import DeleteCommand from '../src/deletecommand';
 import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
+import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 
 describe( 'DeleteCommand', () => {
 	let editor, doc;
 
+	testUtils.createSinonSandbox();
+
 	beforeEach( () => {
 		return ModelTestEditor.create( )
 			.then( newEditor => {
@@ -33,13 +36,26 @@ describe( 'DeleteCommand', () => {
 		it( 'uses enqueueChanges', () => {
 			setData( doc, '<p>foo[]bar</p>' );
 
-			const spy = sinon.spy( doc, 'enqueueChanges' );
+			const spy = testUtils.sinon.spy( doc, 'enqueueChanges' );
 
 			editor.execute( 'delete' );
 
 			expect( spy.calledOnce ).to.be.true;
 		} );
 
+		it( 'locks buffer when executing', () => {
+			setData( doc, '<p>foo[]bar</p>' );
+
+			const buffer = editor.commands.get( 'delete' )._buffer;
+			const lockSpy = testUtils.sinon.spy( buffer, 'lock' );
+			const unlockSpy = testUtils.sinon.spy( buffer, 'unlock' );
+
+			editor.execute( 'delete' );
+
+			expect( lockSpy.calledOnce ).to.be.true;
+			expect( unlockSpy.calledOnce ).to.be.true;
+		} );
+
 		it( 'deletes previous character when selection is collapsed', () => {
 			setData( doc, '<p>foo[]bar</p>' );
 

+ 44 - 0
packages/ckeditor5-typing/tests/input.js

@@ -23,6 +23,8 @@ import { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';
 import { getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 
+import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
+
 describe( 'Input feature', () => {
 	let editor, model, modelRoot, view, viewRoot, listenter;
 
@@ -434,6 +436,48 @@ describe( 'Input feature', () => {
 
 			expect( getModelData( model ) ).to.equal( '<paragraph>foo[]bar</paragraph>' );
 		} );
+
+		it( 'should lock buffer if selection is not collapsed', () => {
+			const buffer = editor.plugins.get( Input )._buffer;
+			const lockSpy = testUtils.sinon.spy( buffer, 'lock' );
+			const unlockSpy = testUtils.sinon.spy( buffer, 'unlock' );
+
+			model.enqueueChanges( () => {
+				model.selection.setRanges( [
+					ModelRange.createFromParentsAndOffsets( modelRoot.getChild( 0 ), 2, modelRoot.getChild( 0 ), 4 ) ] );
+			} );
+
+			view.fire( 'keydown', { keyCode: getCode( 'y' ) } );
+
+			expect( lockSpy.calledOnce ).to.be.true;
+			expect( unlockSpy.calledOnce ).to.be.true;
+		} );
+
+		it( 'should not lock buffer on non printable keys', () => {
+			const buffer = editor.plugins.get( Input )._buffer;
+			const lockSpy = testUtils.sinon.spy( buffer, 'lock' );
+			const unlockSpy = testUtils.sinon.spy( buffer, 'unlock' );
+
+			view.fire( 'keydown', { keyCode: 16 } ); // Shift
+			view.fire( 'keydown', { keyCode: 35 } ); // Home
+			view.fire( 'keydown', { keyCode: 112 } ); // F1
+
+			expect( lockSpy.callCount ).to.be.equal( 0 );
+			expect( unlockSpy.callCount ).to.be.equal( 0 );
+		} );
+
+		it( 'should not lock buffer on collapsed selection', () => {
+			const buffer = editor.plugins.get( Input )._buffer;
+			const lockSpy = testUtils.sinon.spy( buffer, 'lock' );
+			const unlockSpy = testUtils.sinon.spy( buffer, 'unlock' );
+
+			view.fire( 'keydown', { keyCode: getCode( 'b' ) } );
+			view.fire( 'keydown', { keyCode: getCode( 'a' ) } );
+			view.fire( 'keydown', { keyCode: getCode( 'z' ) } );
+
+			expect( lockSpy.callCount ).to.be.equal( 0 );
+			expect( unlockSpy.callCount ).to.be.equal( 0 );
+		} );
 	} );
 } );