Przeglądaj źródła

Merge branch 't/ckeditor5/185'

Piotrek Koszuliński 9 lat temu
rodzic
commit
c1530f0a1d

+ 6 - 4
packages/ckeditor5-engine/src/datacontroller.js

@@ -38,7 +38,7 @@ export default class DataController {
 	 * Creates data controller instance.
 	 *
 	 * @param {engine.model.Document} model Document model.
-	 * @param {engine.dataProcessor.DataProcessor} dataProcessor Data processor which should used by the controller.
+	 * @param {engine.dataProcessor.DataProcessor} [dataProcessor] Data processor which should used by the controller.
 	 */
 	constructor( model, dataProcessor ) {
 		/**
@@ -170,9 +170,11 @@ export default class DataController {
 		// Save to model.
 		const modelRoot = this.model.getRoot( rootName );
 
-		this.model.batch()
-			.remove( ModelRange.createFromElement( modelRoot ) )
-			.insert( ModelPosition.createAt( modelRoot, 0 ), this.parse( data ) );
+		this.model.enqueueChanges( () => {
+			this.model.batch()
+				.remove( ModelRange.createFromElement( modelRoot ) )
+				.insert( ModelPosition.createAt( modelRoot, 0 ), this.parse( data ) );
+		} );
 	}
 
 	/**

+ 19 - 0
packages/ckeditor5-engine/tests/datacontroller.js

@@ -33,6 +33,14 @@ describe( 'DataController', () => {
 		schema = modelDocument.schema;
 	} );
 
+	describe( 'constructor', () => {
+		it( 'works without data processor', () => {
+			const data = new DataController( modelDocument );
+
+			expect( data.processor ).to.be.undefined;
+		} );
+	} );
+
 	describe( 'parse', () => {
 		it( 'should set text', () => {
 			schema.allow( { name: '$text', inside: '$root' } );
@@ -91,6 +99,17 @@ describe( 'DataController', () => {
 			expect( count( modelDocument.history.getDeltas() ) ).to.equal( 1 );
 		} );
 
+		it( 'should fire #changesDone', () => {
+			const spy = sinon.spy();
+
+			schema.allow( { name: '$text', inside: '$root' } );
+			modelDocument.on( 'changesDone', spy );
+
+			data.set( 'foo' );
+
+			expect( spy.calledOnce ).to.be.true;
+		} );
+
 		it( 'should get root name as a parameter', () => {
 			schema.allow( { name: '$text', inside: '$root' } );
 			data.set( 'foo', 'main' );