8
0
Просмотр исходного кода

Added tests for change and enqueueChange methods. Change writer.batch to public. Fix small bugs.

Piotr Jasiun 8 лет назад
Родитель
Сommit
b70da305ea

+ 1 - 8
packages/ckeditor5-engine/src/model/model.js

@@ -12,7 +12,6 @@ import Writer from './writer';
 import Schema from './schema';
 import Schema from './schema';
 import Document from './document';
 import Document from './document';
 import MarkerCollection from './markercollection';
 import MarkerCollection from './markercollection';
-import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
 import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
 import ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';
 import mix from '@ckeditor/ckeditor5-utils/src/mix';
 import mix from '@ckeditor/ckeditor5-utils/src/mix';
 
 
@@ -58,12 +57,10 @@ export default class Model {
 			batchOrType = new Batch();
 			batchOrType = new Batch();
 		}
 		}
 
 
-		this._pendingChanges.push( { batchOrType, callback } );
+		this._pendingChanges.push( { batch: batchOrType, callback } );
 
 
 		if ( this._pendingChanges.length == 1 ) {
 		if ( this._pendingChanges.length == 1 ) {
 			this._runPendingChanges();
 			this._runPendingChanges();
-
-			this.fire( 'changesDone' );
 		}
 		}
 	}
 	}
 
 
@@ -90,10 +87,6 @@ export default class Model {
 	applyOperation( operation ) {
 	applyOperation( operation ) {
 		return operation._execute();
 		return operation._execute();
 	}
 	}
-
-	transformDeltas() {
-		// ...
-	}
 }
 }
 
 
 mix( Model, ObservableMixin );
 mix( Model, ObservableMixin );

+ 1 - 2
packages/ckeditor5-engine/src/model/writer.js

@@ -69,10 +69,9 @@ export default class Writer {
 		this.model = model;
 		this.model = model;
 
 
 		/**
 		/**
-		 * @protected
 		 * @type {module:engine/model/batch~Batch}
 		 * @type {module:engine/model/batch~Batch}
 		 */
 		 */
-		this._batch = batch;
+		this.batch = batch;
 	}
 	}
 
 
 	/**
 	/**

+ 147 - 0
packages/ckeditor5-engine/tests/model/model.js

@@ -156,5 +156,152 @@ describe( 'Model', () => {
 				} );
 				} );
 			}
 			}
 		} );
 		} );
+
+		it( 'should be possible to nest enqueueChanges in enqueueChanges event', () => {
+			model.once( 'change', () => {
+				model.enqueueChange( () => {
+					changes += 'C';
+				} );
+
+				changes += 'B';
+			} );
+
+			model.on( 'changesDone', () => {
+				changes += 'D';
+			} );
+
+			model.enqueueChange( () => {
+				changes += 'A';
+			} );
+
+			expect( changes ).to.equal( 'ABCD' );
+		} );
+
+		it( 'should be possible to nest enqueueChanges in changes event', () => {
+			model.once( 'change', () => {
+				model.enqueueChange( () => {
+					changes += 'C';
+				} );
+
+				changes += 'B';
+			} );
+
+			model.on( 'changesDone', () => {
+				changes += 'D';
+			} );
+
+			model.change( () => {
+				changes += 'A';
+			} );
+
+			expect( changes ).to.equal( 'ABCD' );
+		} );
+
+		it( 'should be possible to nest changes in enqueueChanges event', () => {
+			model.once( 'change', () => {
+				model.change( () => {
+					changes += 'B';
+				} );
+
+				changes += 'C';
+			} );
+
+			model.on( 'changesDone', () => {
+				changes += 'D';
+			} );
+
+			model.enqueueChange( () => {
+				changes += 'A';
+			} );
+
+			expect( changes ).to.equal( 'ABCD' );
+		} );
+
+		it( 'should be possible to nest changes in changes event', () => {
+			model.once( 'change', () => {
+				model.change( () => {
+					changes += 'B';
+				} );
+
+				changes += 'C';
+			} );
+
+			model.on( 'changesDone', () => {
+				changes += 'D';
+			} );
+
+			model.change( () => {
+				changes += 'A';
+			} );
+
+			expect( changes ).to.equal( 'ABCD' );
+		} );
+
+		it( 'should let mix blocks', () => {
+			model.once( 'change', () => {
+				model.change( () => {
+					changes += 'B';
+
+					nestedEnqueue();
+				} );
+
+				model.change( () => {
+					changes += 'C';
+				} );
+
+				changes += 'D';
+			} );
+
+			model.on( 'changesDone', () => {
+				changes += 'F';
+			} );
+
+			model.change( () => {
+				changes += 'A';
+			} );
+
+			expect( changes ).to.equal( 'ABCDEF' );
+
+			function nestedEnqueue() {
+				model.enqueueChange( () => {
+					changes += 'E';
+				} );
+			}
+		} );
+
+		it( 'should use the same writer in all change blocks (change & change)', () => {
+			model.change( outerWriter => {
+				model.change( innerWriter => {
+					expect( innerWriter ).to.equal( outerWriter );
+				} );
+			} );
+		} );
+
+		it( 'should create new writer in enqueue block', () => {
+			model.change( outerWriter => {
+				model.enqueueChange( innerWriter => {
+					expect( innerWriter ).to.not.equal( outerWriter );
+					expect( innerWriter.batch ).to.not.equal( outerWriter.batch );
+				} );
+			} );
+		} );
+
+		it( 'should let you pass batch', () => {
+			let outerBatch;
+
+			model.change( outerWriter => {
+				outerBatch = outerWriter.batch;
+
+				model.enqueueChange( outerBatch, innerWriter => {
+					expect( innerWriter.batch ).to.equal( outerBatch );
+				} );
+			} );
+		} );
+
+		it( 'should let you create transparent batch', () => {
+			model.enqueueChange( 'transparent', writer => {
+				expect( writer.batch.type ).to.equal( 'transparent' );
+			} );
+		} );
 	} );
 	} );
 } );
 } );