浏览代码

ChangeBuffer should not break on changes without batches.

Piotrek Koszuliński 9 年之前
父节点
当前提交
db76b3ab4f
共有 2 个文件被更改,包括 22 次插入1 次删除
  1. 7 1
      packages/ckeditor5-typing/src/changebuffer.js
  2. 15 0
      packages/ckeditor5-typing/tests/changebuffer.js

+ 7 - 1
packages/ckeditor5-typing/src/changebuffer.js

@@ -59,7 +59,13 @@ export default class ChangeBuffer {
 		 */
 		this.limit = limit;
 
-		this._changeCallback = ( evt, type, changes, batch ) => this._onBatch( batch );
+		this._changeCallback = ( evt, type, changes, batch ) => {
+			// See #7.
+			if ( batch ) {
+				this._onBatch( batch );
+			}
+		};
+
 		doc.on( 'change', this._changeCallback );
 
 		/**

+ 15 - 0
packages/ckeditor5-typing/tests/changebuffer.js

@@ -9,6 +9,8 @@ import ChangeBuffer from '/ckeditor5/typing/changebuffer.js';
 import Document from '/ckeditor5/engine/model/document.js';
 import Batch from '/ckeditor5/engine/model/batch.js';
 import Position from '/ckeditor5/engine/model/position.js';
+import InsertDelta from '/ckeditor5/engine/model/delta/insertdelta.js';
+import InsertOperation from '/ckeditor5/engine/model/operation/insertoperation.js';
 
 describe( 'ChangeBuffer', () => {
 	const CHANGE_LIMIT = 3;
@@ -89,6 +91,19 @@ describe( 'ChangeBuffer', () => {
 			doc.batch().insert( Position.createAt( root, 0 ), 'c' );
 			expect( buffer.batch ).to.not.equal( bufferBatch );
 		} );
+
+		// See #7.
+		it( 'is not reset when changes are applied without a batch', () => {
+			const bufferBatch = buffer.batch;
+
+			const delta = new InsertDelta();
+			const insert = new InsertOperation( Position.createAt( root, 0 ), 'a', doc.version );
+
+			delta.addOperation( insert );
+			doc.applyOperation( insert );
+
+			expect( buffer.batch ).to.equal( bufferBatch );
+		} );
 	} );
 
 	describe( 'destory', () => {