Przeglądaj źródła

Tests: missing tests for model-to-view-converters.

Szymon Cofalik 9 lat temu
rodzic
commit
43312012c8

+ 53 - 0
packages/ckeditor5-engine/tests/conversion/model-to-view-converters.js

@@ -335,6 +335,33 @@ describe( 'move', () => {
 		expect( viewToString( viewRoot ) ).to.equal( '<div><div>bar</div><div>foo<img></img>xxyy</div></div>' );
 	} );
 
+	it( 'should not execute if value was already consumed', () => {
+		const modelDivA = new ModelElement( 'div', null, new ModelText( 'foo' ) );
+		const modelDivB = new ModelElement( 'div', null, new ModelText( 'xxyy' ) );
+
+		modelRoot.appendChildren( [ modelDivA, modelDivB ] );
+		dispatcher.on( 'insert:div', insertElement( new ViewContainerElement( 'div' ) ) );
+		dispatcher.on( 'insert:$text', insertText() );
+		dispatcher.on( 'move', move() );
+		dispatcher.on( 'move', ( evt, data, consumable ) => {
+			consumable.consume( data.item, 'move' );
+		}, 'high' );
+
+		dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
+
+		expect( viewToString( viewRoot ) ).to.equal( '<div><div>foo</div><div>xxyy</div></div>' );
+
+		const removedNodes = modelDivA.removeChildren( 0, 1 );
+		modelDivB.insertChildren( 0, removedNodes );
+
+		dispatcher.convertMove(
+			ModelPosition.createFromParentAndOffset( modelDivA, 0 ),
+			ModelRange.createFromParentsAndOffsets( modelDivB, 0, modelDivB, 3 )
+		);
+
+		expect( viewToString( viewRoot ) ).to.equal( '<div><div>foo</div><div>xxyy</div></div>' );
+	} );
+
 	it( 'should support unicode', () => {
 		const modelDivA = new ModelElement( 'div', null, 'நிலைக்கு' );
 		const modelDivB = new ModelElement( 'div' );
@@ -387,6 +414,32 @@ describe( 'remove', () => {
 		expect( viewToString( viewRoot ) ).to.equal( '<div><div>bar</div></div>' );
 	} );
 
+	it( 'should not execute if value was already consumed', () => {
+		const modelDiv = new ModelElement( 'div', null, new ModelText( 'foo' ) );
+
+		modelRoot.appendChildren( modelDiv );
+		dispatcher.on( 'insert:div', insertElement( new ViewContainerElement( 'div' ) ) );
+		dispatcher.on( 'insert:$text', insertText() );
+		dispatcher.on( 'remove', remove() );
+		dispatcher.on( 'remove', ( evt, data, consumable ) => {
+			consumable.consume( data.item, 'remove' );
+		}, 'high' );
+
+		dispatcher.convertInsertion( ModelRange.createIn( modelRoot ) );
+
+		expect( viewToString( viewRoot ) ).to.equal( '<div><div>foo</div></div>' );
+
+		const removedNodes = modelDiv.removeChildren( 0, 1 );
+		modelDoc.graveyard.insertChildren( 0, removedNodes );
+
+		dispatcher.convertRemove(
+			ModelPosition.createFromParentAndOffset( modelDiv, 0 ),
+			ModelRange.createFromParentsAndOffsets( modelDoc.graveyard, 0, modelDoc.graveyard, 3 )
+		);
+
+		expect( viewToString( viewRoot ) ).to.equal( '<div><div>foo</div></div>' );
+	} );
+
 	it( 'should support unicode', () => {
 		const modelDiv = new ModelElement( 'div', null, 'நிலைக்கு' );