Преглед изворни кода

Added test for the play method.

Maciej Bukowski пре 8 година
родитељ
комит
11c0d63511

+ 15 - 8
packages/ckeditor5-engine/src/dev-utils/deltareplayer.js

@@ -48,16 +48,23 @@ export default class DeltaReplayer {
 	/**
 	 * Applies all deltas with delay between actions.
 	 *
-	 * @param {Number} timeInterval
+	 * @param {Number} timeInterval Time between applying deltas.
+	 * @param {Function} [cb] Callback.
 	 */
-	play( timeInterval = 1000 ) {
-		if ( this._deltasToReplay.length === 0 ) {
-			return;
-		}
+	play( timeInterval = 1000, cb = () => {} ) {
+		const deltaReplayer = this;
 
-		this.applyNextDelta().then( () => {
-			setTimeout( () => this.play(), timeInterval );
-		} );
+		play();
+
+		function play() {
+			if ( deltaReplayer._deltasToReplay.length === 0 ) {
+				return cb();
+			}
+
+			deltaReplayer.applyNextDelta().then( () => {
+				setTimeout( play, timeInterval );
+			}, cb );
+		}
 	}
 
 	/**

+ 18 - 0
packages/ckeditor5-engine/tests/dev-utils/deltareplayer.js

@@ -110,6 +110,24 @@ describe( 'DeltaReplayer', () => {
 			} );
 		} );
 	} );
+
+	describe( 'play', () => {
+		it( 'should play deltas with time interval', ( done ) => {
+			const doc = getDocument();
+
+			const stringifiedDeltas = [ getFirstDelta(), getSecondDelta() ]
+				.map( d => JSON.stringify( d ) )
+				.join( '---' );
+
+			const deltaReplayer = new DeltaReplayer( doc, '---', stringifiedDeltas );
+
+			deltaReplayer.play( 0, () => {
+				expect( deltaReplayer.getDeltasToReplay().length ).to.equal( 0 );
+
+				done();
+			} );
+		} );
+	} );
 } );
 
 function getDocument() {