浏览代码

Do not check if range/text is not set.

Krzysztof Krztoń 8 年之前
父节点
当前提交
1526542a20
共有 2 个文件被更改,包括 27 次插入30 次删除
  1. 18 20
      packages/ckeditor5-typing/src/inputcommand.js
  2. 9 10
      packages/ckeditor5-typing/tests/inputcommand.js

+ 18 - 20
packages/ckeditor5-typing/src/inputcommand.js

@@ -61,7 +61,7 @@ export default class InputCommand extends Command {
 	 * on the beginning of the range (which after removal is a collapsed range).
 	 *
 	 * @param {Object} [options] The command options.
-	 * @param {String} [options.text] Text to be inserted.
+	 * @param {String} options.text Text to be inserted.
 	 * @param {module:engine/model/range~Range} [options.range] Range in which the text is inserted. Defaults
 	 * to the first range in the current selection.
 	 * @param {module:engine/model/position~Position} [options.resultPosition] Position at which the selection
@@ -76,28 +76,26 @@ export default class InputCommand extends Command {
 
 		let textInsertions = 0;
 
-		if ( range && text !== undefined ) {
-			doc.enqueueChanges( () => {
-				const isCollapsedRange = range.isCollapsed;
+		doc.enqueueChanges( () => {
+			const isCollapsedRange = range.isCollapsed;
 
-				if ( !isCollapsedRange ) {
-					this._buffer.batch.remove( range );
-				}
+			if ( !isCollapsedRange ) {
+				this._buffer.batch.remove( range );
+			}
 
-				if ( text && text.length ) {
-					textInsertions = text.length;
-					this._buffer.batch.weakInsert( range.start, text );
-				}
+			if ( text && text.length ) {
+				textInsertions = text.length;
+				this._buffer.batch.weakInsert( range.start, text );
+			}
 
-				if ( resultPosition ) {
-					this.editor.data.model.selection.collapse( resultPosition );
-				} else if ( isCollapsedRange ) {
-					// If range was collapsed just shift the selection by the number of inserted characters.
-					this.editor.data.model.selection.collapse( range.start.getShiftedBy( textInsertions ) );
-				}
+			if ( resultPosition ) {
+				this.editor.data.model.selection.collapse( resultPosition );
+			} else if ( isCollapsedRange ) {
+				// If range was collapsed just shift the selection by the number of inserted characters.
+				this.editor.data.model.selection.collapse( range.start.getShiftedBy( textInsertions ) );
+			}
 
-				this._buffer.input( textInsertions );
-			} );
-		}
+			this._buffer.input( textInsertions );
+		} );
 	}
 }

+ 9 - 10
packages/ckeditor5-typing/tests/inputcommand.js

@@ -154,28 +154,27 @@ describe( 'InputCommand', () => {
 			expect( buffer.size ).to.be.equal( 0 );
 		} );
 
-		it( 'does nothing when there is no range', () => {
+		it( 'only removes content when no text given (with default non-collapsed range)', () => {
 			setData( doc, '<p>[fo]obar</p>' );
 
-			testUtils.sinon.stub( editor.document.selection, 'getFirstRange' ).returns( null );
+			const spy = testUtils.sinon.spy( doc, 'enqueueChanges' );
 
-			editor.execute( 'input', {
-				text: 'baz'
-			} );
+			editor.execute( 'input' );
 
-			expect( getData( doc, { selection: true } ) ).to.be.equal( '<p>[fo]obar</p>' );
+			expect( spy.callCount ).to.be.equal( 1 );
+			expect( getData( doc, { selection: true } ) ).to.be.equal( '<p>[]obar</p>' );
 			expect( buffer.size ).to.be.equal( 0 );
 		} );
 
-		it( 'does nothing when there is no options object provided', () => {
-			setData( doc, '<p>[fo]obar</p>' );
+		it( 'does not change selection and content when no text given (with default collapsed range)', () => {
+			setData( doc, '<p>fo[]obar</p>' );
 
 			const spy = testUtils.sinon.spy( doc, 'enqueueChanges' );
 
 			editor.execute( 'input' );
 
-			expect( spy.callCount ).to.be.equal( 0 );
-			expect( getData( doc, { selection: true } ) ).to.be.equal( '<p>[fo]obar</p>' );
+			expect( spy.callCount ).to.be.equal( 1 );
+			expect( getData( doc, { selection: true } ) ).to.be.equal( '<p>fo[]obar</p>' );
 			expect( buffer.size ).to.be.equal( 0 );
 		} );
 	} );