Przeglądaj źródła

Aligned most of tests to new view->model conversion.

Oskar Wróbel 7 lat temu
rodzic
commit
53577af433

+ 42 - 41
packages/ckeditor5-engine/tests/conversion/buildviewconverter.js

@@ -23,7 +23,6 @@ import ViewConversionDispatcher from '../../src/conversion/viewconversiondispatc
 import CKEditorError from '@ckeditor/ckeditor5-utils/src/ckeditorerror';
 
 import { convertToModelFragment, convertText } from '../../src/conversion/view-to-model-converters';
-import { stringify } from '../../src/dev-utils/model';
 
 function modelAttributesToString( item ) {
 	let result = '';
@@ -63,13 +62,13 @@ const textAttributes = [ 'linkHref', 'linkTitle', 'bold', 'italic', 'style' ];
 const pAttributes = [ 'class', 'important', 'theme', 'decorated', 'size' ];
 
 describe( 'View converter builder', () => {
-	let dispatcher, model, schema, additionalData;
+	let dispatcher, model, schema, context;
 
 	beforeEach( () => {
 		model = new Model();
 
-		// `additionalData` parameter for `.convert` calls.
-		additionalData = { context: [ '$root' ] };
+		// `context` parameter for `.convert` calls.
+		context = [ '$root' ];
 
 		schema = model.schema;
 
@@ -111,7 +110,7 @@ describe( 'View converter builder', () => {
 	it( 'should convert from view element to model element', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
 
-		const conversionResult = dispatcher.convert( new ViewContainerElement( 'p', null, new ViewText( 'foo' ) ), additionalData );
+		const conversionResult = dispatcher.convert( new ViewContainerElement( 'p', null, new ViewText( 'foo' ) ), context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	} );
@@ -121,7 +120,7 @@ describe( 'View converter builder', () => {
 			.fromElement( 'img' )
 			.toElement( viewElement => new ModelElement( 'image', { src: viewElement.getAttribute( 'src' ) } ) );
 
-		const conversionResult = dispatcher.convert( new ViewContainerElement( 'img', { src: 'foo.jpg' } ), additionalData );
+		const conversionResult = dispatcher.convert( new ViewContainerElement( 'img', { src: 'foo.jpg' } ), context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<image src="foo.jpg"></image>' );
 	} );
@@ -130,7 +129,7 @@ describe( 'View converter builder', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'strong' ).toAttribute( 'bold', true );
 
 		const conversionResult = dispatcher.convert(
-			new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+			new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), context
 		);
 
 		// Have to check root because result is a ModelText.
@@ -143,7 +142,7 @@ describe( 'View converter builder', () => {
 			.toAttribute( viewElement => ( { key: 'linkHref', value: viewElement.getAttribute( 'href' ) } ) );
 
 		const conversionResult = dispatcher.convert(
-			new ViewAttributeElement( 'a', { href: 'foo.html' }, new ViewText( 'foo' ) ), additionalData
+			new ViewAttributeElement( 'a', { href: 'foo.html' }, new ViewText( 'foo' ) ), context
 		);
 
 		// Have to check root because result is a ModelText.
@@ -158,7 +157,7 @@ describe( 'View converter builder', () => {
 			.toAttribute( viewElement => ( { key: 'class', value: viewElement.getAttribute( 'class' ) } ) );
 
 		const conversionResult = dispatcher.convert(
-			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), additionalData
+			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), context
 		);
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph class="myClass">foo</paragraph>' );
@@ -180,7 +179,7 @@ describe( 'View converter builder', () => {
 			new ViewContainerElement( 'p', { 'data-type': 'foo' }, new ViewText( 'xyz' ) )
 		] );
 
-		const conversionResult = dispatcher.convert( viewStructure, additionalData );
+		const conversionResult = dispatcher.convert( viewStructure, context );
 
 		expect( modelToString( conversionResult ) ).to.equal(
 			'<paragraph important="true">foo</paragraph>' +
@@ -206,7 +205,7 @@ describe( 'View converter builder', () => {
 			new ViewContainerElement( 'span', { style: 'font-weight:bold; font-size:20px' }, new ViewText( 'ddd' ) )
 		] );
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph><$text bold="true">aaabbbcccddd</$text></paragraph>' );
 	} );
@@ -223,12 +222,13 @@ describe( 'View converter builder', () => {
 			new ViewText( 'r' )
 		] );
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		const markerSearch = conversionResult.markers.get( 'search' );
 
 		expect( conversionResult.markers.size ).to.equal( 1 );
-		expect( stringify( conversionResult, markerSearch ) ).to.equal( '<paragraph>Fo[o ba]r</paragraph>' );
+		expect( markerSearch.start.path ).to.deep.equal( [ 0, 2 ] );
+		expect( markerSearch.end.path ).to.deep.equal( [ 0, 6 ] );
 	} );
 
 	it( 'should convert from element to marker using creator function', () => {
@@ -245,12 +245,13 @@ describe( 'View converter builder', () => {
 			new ViewText( 'r' )
 		] );
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		const markerSearch = conversionResult.markers.get( 'search' );
 
 		expect( conversionResult.markers.size ).to.equal( 1 );
-		expect( stringify( conversionResult, markerSearch ) ).to.equal( '<paragraph>Fo[o ba]r</paragraph>' );
+		expect( markerSearch.start.path ).to.deep.equal( [ 0, 2 ] );
+		expect( markerSearch.end.path ).to.deep.equal( [ 0, 6 ] );
 	} );
 
 	it( 'should convert from multiple view entities to marker', () => {
@@ -271,16 +272,16 @@ describe( 'View converter builder', () => {
 			new ViewText( 'r' )
 		] );
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement );
 
 		const marker1 = conversionResult.markers.get( 'marker1' );
 		const marker2 = conversionResult.markers.get( 'marker2' );
 		const marker3 = conversionResult.markers.get( 'marker3' );
 
 		expect( conversionResult.markers.size ).to.equal( 3 );
-		expect( stringify( conversionResult, marker1 ) ).to.equal( '<paragraph>Fo[]o bar</paragraph>' );
-		expect( stringify( conversionResult, marker2 ) ).to.equal( '<paragraph>Foo b[]ar</paragraph>' );
-		expect( stringify( conversionResult, marker3 ) ).to.equal( '<paragraph>Foo ba[]r</paragraph>' );
+		expect( marker1.start.path ).to.deep.equal( marker1.end.path ).to.deep.equal( [ 0, 2 ] );
+		expect( marker2.start.path ).to.deep.equal( marker2.end.path ).to.deep.equal( [ 0, 5 ] );
+		expect( marker3.start.path ).to.deep.equal( marker3.end.path ).to.deep.equal( [ 0, 6 ] );
 	} );
 
 	it( 'should do nothing when there is no element matching to marker pattern', () => {
@@ -288,7 +289,7 @@ describe( 'View converter builder', () => {
 
 		const element = new ViewAttributeElement( 'span' );
 
-		const result = dispatcher.convert( element, additionalData );
+		const result = dispatcher.convert( element );
 
 		expect( result ).to.be.instanceof( ModelDocumentFragment );
 		expect( result.childCount ).to.equal( 0 );
@@ -300,7 +301,7 @@ describe( 'View converter builder', () => {
 		const element = new ViewAttributeElement( 'marker', { class: 'search' } );
 
 		expect( () => {
-			dispatcher.convert( element, additionalData );
+			dispatcher.convert( element, context );
 		} ).to.throw( CKEditorError, /^build-view-converter-invalid-marker/ );
 	} );
 
@@ -312,7 +313,7 @@ describe( 'View converter builder', () => {
 		const element = new ViewAttributeElement( 'marker', { 'data-name': 'search' } );
 
 		expect( () => {
-			dispatcher.convert( element, additionalData );
+			dispatcher.convert( element, context );
 		} ).to.throw( CKEditorError, /^build-view-converter-invalid-marker/ );
 	} );
 
@@ -324,7 +325,7 @@ describe( 'View converter builder', () => {
 		const element = new ViewAttributeElement( 'marker', { 'data-name': 'search' } );
 
 		expect( () => {
-			dispatcher.convert( element, additionalData );
+			dispatcher.convert( element, context );
 		} ).to.throw( CKEditorError, /^build-view-converter-invalid-marker/ );
 	} );
 
@@ -341,7 +342,7 @@ describe( 'View converter builder', () => {
 
 		// Not quite megatron.
 		result = dispatcher.convert(
-			new ViewContainerElement( 'span', { class: 'megatron' }, new ViewText( 'foo' ) ), additionalData
+			new ViewContainerElement( 'span', { class: 'megatron' }, new ViewText( 'foo' ) ), context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<span>foo</span>' );
@@ -349,7 +350,7 @@ describe( 'View converter builder', () => {
 		// Almost a megatron. Missing a head.
 		result = dispatcher.convert(
 			new ViewContainerElement( 'span', { class: 'megatron', body: 'megatron', legs: 'megatron' }, new ViewText( 'foo' ) ),
-			additionalData
+			context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<span>foo</span>' );
@@ -361,7 +362,7 @@ describe( 'View converter builder', () => {
 				{ class: 'megatron', body: 'megatron', legs: 'megatron', head: 'megatron' },
 				new ViewText( 'foo' )
 			),
-			additionalData
+			context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<paragraph>foo</paragraph>' );
@@ -373,7 +374,7 @@ describe( 'View converter builder', () => {
 				{ class: 'megatron', body: 'megatron', legs: 'megatron', head: 'megatron' },
 				new ViewText( 'foo' )
 			),
-			additionalData
+			context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<MEGATRON>foo</MEGATRON>' );
@@ -393,7 +394,7 @@ describe( 'View converter builder', () => {
 			new ViewText( 'foo' )
 		);
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<span transformer="megatron">foo</span>' );
 	} );
@@ -403,7 +404,7 @@ describe( 'View converter builder', () => {
 
 		const viewElement = new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) );
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( conversionResult.is( 'documentFragment' ) ).to.be.true;
 	} );
@@ -415,7 +416,7 @@ describe( 'View converter builder', () => {
 		buildViewConverter().for( dispatcher ).fromElement( 'p' ).toElement( 'paragraph' );
 
 		const conversionResult = dispatcher.convert(
-			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), additionalData
+			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), context
 		);
 
 		// Element converter was fired first even though attribute converter was added first.
@@ -431,7 +432,7 @@ describe( 'View converter builder', () => {
 		let result;
 
 		result = dispatcher.convert(
-			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), additionalData
+			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<paragraph class="myClass">foo</paragraph>' );
@@ -441,7 +442,7 @@ describe( 'View converter builder', () => {
 			.toElement( 'customP' );
 
 		result = dispatcher.convert(
-			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), additionalData
+			new ViewContainerElement( 'p', { class: 'myClass' }, new ViewText( 'foo' ) ), context
 		);
 
 		expect( modelToString( result ) ).to.equal( '<customP>foo</customP>' );
@@ -462,7 +463,7 @@ describe( 'View converter builder', () => {
 			.toAttribute( 'size', 'small' );
 
 		const viewElement = new ViewContainerElement( 'p', { class: 'decorated small' }, new ViewText( 'foo' ) );
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		// P element and it's children got converted by the converter (1) and the converter (1) got fired
 		// because P name was not consumed in converter (2). Converter (3) could consume class="small" because
@@ -485,7 +486,7 @@ describe( 'View converter builder', () => {
 			new ViewContainerElement( 'abcd', null, new ViewText( 'foo' ) )
 		] );
 
-		const conversionResult = dispatcher.convert( viewStructure, additionalData );
+		const conversionResult = dispatcher.convert( viewStructure, context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<div class="myClass"><abcd>foo</abcd></div>' );
 	} );
@@ -509,7 +510,7 @@ describe( 'View converter builder', () => {
 			)
 		);
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	} );
@@ -536,7 +537,7 @@ describe( 'View converter builder', () => {
 	// 		)
 	// 	);
 
-	// 	const conversionResult = dispatcher.convert( viewElement, additionalData );
+	// 	const conversionResult = dispatcher.convert( viewElement, context );
 
 	// 	expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	// } );
@@ -551,7 +552,7 @@ describe( 'View converter builder', () => {
 			)
 		);
 
-		const conversionResult = dispatcher.convert( viewElement, additionalData );
+		const conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph>foo</paragraph>' );
 	} );
@@ -565,11 +566,11 @@ describe( 'View converter builder', () => {
 			} );
 
 		const viewElement = new ViewContainerElement( 'p' );
-		let conversionResult = dispatcher.convert( viewElement, additionalData );
+		let conversionResult = dispatcher.convert( viewElement, context );
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph></paragraph>' );
 
 		viewElement.setAttribute( 'stop', true );
-		conversionResult = dispatcher.convert( viewElement, additionalData );
+		conversionResult = dispatcher.convert( viewElement, context );
 
 		expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 		expect( conversionResult.childCount ).to.equal( 0 );
@@ -587,11 +588,11 @@ describe( 'View converter builder', () => {
 		} );
 
 		const viewElement = new ViewContainerElement( 'p', { 'data-type': 'foo' } );
-		let conversionResult = dispatcher.convert( viewElement, additionalData );
+		let conversionResult = dispatcher.convert( viewElement, context );
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph type="foo"></paragraph>' );
 
 		viewElement.setAttribute( 'data-type', 'stop' );
-		conversionResult = dispatcher.convert( viewElement, additionalData );
+		conversionResult = dispatcher.convert( viewElement, context );
 		expect( modelToString( conversionResult ) ).to.equal( '<paragraph></paragraph>' );
 	} );
 } );

+ 18 - 18
packages/ckeditor5-engine/tests/conversion/definition-based-converters.js

@@ -95,14 +95,14 @@ function viewToString( item ) {
 }
 
 describe( 'definition-based-converters', () => {
-	let model, dispatcher, modelDoc, modelRoot, viewRoot, controller, additionalData, schema;
+	let model, dispatcher, modelDoc, modelRoot, viewRoot, controller, context, schema;
 
 	beforeEach( () => {
 		model = new Model();
 	} );
 
 	function setupViewToModelTests() {
-		additionalData = { context: [ '$root' ] };
+		context = [ '$root' ];
 		schema = model.schema;
 		dispatcher = new ViewConversionDispatcher( model, { schema } );
 	}
@@ -229,7 +229,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelAttribute( 'foo', { model: 'bar', view: 'strong' }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -239,7 +239,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelAttribute( 'foo', { model: 'bar', view: { name: 'strong' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -249,7 +249,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelAttribute( 'foo', { model: 'bar', view: { name: 'span', class: 'foo' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'span', { class: 'foo' }, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'span', { class: 'foo' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -262,7 +262,7 @@ describe( 'definition-based-converters', () => {
 				}, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'span', { class: 'foo bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'span', { class: 'foo bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -275,7 +275,7 @@ describe( 'definition-based-converters', () => {
 				}, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'span', { style: 'font-weight:bold' }, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'span', { style: 'font-weight:bold' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -288,7 +288,7 @@ describe( 'definition-based-converters', () => {
 				}, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -305,7 +305,7 @@ describe( 'definition-based-converters', () => {
 				}, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -316,7 +316,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelAttribute( 'foo', { model: 'bar', view: { name: 'strong', priority: 'high' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewAttributeElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<$text foo="bar">foo</$text>' );
@@ -396,7 +396,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: 'strong' }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -406,7 +406,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'strong' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -416,7 +416,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'span', class: 'foo' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'span', { class: 'foo' }, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'span', { class: 'foo' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -426,7 +426,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'span', class: [ 'foo', 'bar' ] } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'span', { class: 'foo bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'span', { class: 'foo bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -436,7 +436,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'span', style: { 'font-weight': 'bold' } } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'span', { style: 'font-weight:bold' }, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'span', { style: 'font-weight:bold' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -446,7 +446,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'span', attribute: { 'data-foo': 'bar' } } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -463,7 +463,7 @@ describe( 'definition-based-converters', () => {
 				}, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'span', { 'data-foo': 'bar' }, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );
@@ -474,7 +474,7 @@ describe( 'definition-based-converters', () => {
 				viewToModelElement( { model: 'bar', view: { name: 'strong', priority: 'high' } }, [ dispatcher ] );
 
 				const conversionResult = dispatcher.convert(
-					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), additionalData
+					new ViewElement( 'strong', null, new ViewText( 'foo' ) ), context
 				);
 
 				expect( modelToString( conversionResult ) ).to.equal( '<bar>foo</bar>' );

+ 14 - 11
packages/ckeditor5-engine/tests/conversion/view-to-model-converters.js

@@ -12,11 +12,12 @@ import Model from '../../src/model/model';
 import ModelDocumentFragment from '../../src/model/documentfragment';
 import ModelElement from '../../src/model/element';
 import ModelText from '../../src/model/text';
+import ModelRange from '../../src/model/range';
 
 import { convertToModelFragment, convertText } from '../../src/conversion/view-to-model-converters';
 
 describe( 'view-to-model-converters', () => {
-	let dispatcher, schema, additionalData, model;
+	let dispatcher, schema, context, model;
 
 	beforeEach( () => {
 		model = new Model();
@@ -25,7 +26,7 @@ describe( 'view-to-model-converters', () => {
 		schema.register( 'paragraph', { inheritAllFrom: '$block' } );
 		schema.extend( '$text', { allowIn: '$root' } );
 
-		additionalData = { context: [ '$root' ] };
+		context = [ '$root' ];
 
 		dispatcher = new ViewConversionDispatcher( model, { schema } );
 	} );
@@ -36,7 +37,7 @@ describe( 'view-to-model-converters', () => {
 
 			dispatcher.on( 'text', convertText() );
 
-			const conversionResult = dispatcher.convert( viewText, additionalData );
+			const conversionResult = dispatcher.convert( viewText, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.getChild( 0 ) ).to.be.instanceof( ModelText );
@@ -49,13 +50,15 @@ describe( 'view-to-model-converters', () => {
 			// Default converter for elements. Returns just converted children. Added with lowest priority.
 			dispatcher.on( 'text', convertText(), { priority: 'lowest' } );
 			// Added with normal priority. Should make the above converter not fire.
-			dispatcher.on( 'text', ( evt, data, consumable ) => {
+			dispatcher.on( 'text', ( evt, data, consumable, conversionApi ) => {
 				if ( consumable.consume( data.input ) ) {
-					data.output = new ModelText( data.input.data.replace( /fuck/gi, '****' ) );
+					const text = conversionApi.writer.createText( data.input.data.replace( /fuck/gi, '****' ) );
+					conversionApi.writer.insert( text, data.position );
+					data.output = ModelRange.createFromPositionAndShift( data.position, text.offsetSize );
 				}
 			} );
 
-			const conversionResult = dispatcher.convert( viewText, additionalData );
+			const conversionResult = dispatcher.convert( viewText, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.getChild( 0 ) ).to.be.instanceof( ModelText );
@@ -72,12 +75,12 @@ describe( 'view-to-model-converters', () => {
 			const viewText = new ViewText( 'foobar' );
 			dispatcher.on( 'text', convertText() );
 
-			let conversionResult = dispatcher.convert( viewText, additionalData );
+			let conversionResult = dispatcher.convert( viewText, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.childCount ).to.equal( 0 );
 
-			conversionResult = dispatcher.convert( viewText, { context: [ '$block' ] } );
+			conversionResult = dispatcher.convert( viewText, [ '$block' ] );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.childCount ).to.equal( 1 );
@@ -90,7 +93,7 @@ describe( 'view-to-model-converters', () => {
 
 			dispatcher.on( 'text', convertText() );
 
-			const conversionResult = dispatcher.convert( viewText, additionalData );
+			const conversionResult = dispatcher.convert( viewText, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.getChild( 0 ) ).to.be.instanceof( ModelText );
@@ -111,7 +114,7 @@ describe( 'view-to-model-converters', () => {
 			dispatcher.on( 'element', convertToModelFragment() );
 			dispatcher.on( 'documentFragment', convertToModelFragment() );
 
-			const conversionResult = dispatcher.convert( viewFragment, additionalData );
+			const conversionResult = dispatcher.convert( viewFragment, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.maxOffset ).to.equal( 6 );
@@ -136,7 +139,7 @@ describe( 'view-to-model-converters', () => {
 				}
 			} );
 
-			const conversionResult = dispatcher.convert( viewP, additionalData );
+			const conversionResult = dispatcher.convert( viewP, context );
 
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
 			expect( conversionResult.getChild( 0 ) ).to.be.instanceof( ModelElement );

+ 21 - 13
packages/ckeditor5-engine/tests/conversion/viewconversiondispatcher.js

@@ -12,6 +12,8 @@ import Model from '../../src/model/model';
 import ModelText from '../../src/model/text';
 import ModelElement from '../../src/model/element';
 import ModelDocumentFragment from '../../src/model/documentfragment';
+import ModelPosition from '../../src/model/position';
+import ModelRange from '../../src/model/range';
 import { stringify } from '../../src/dev-utils/model';
 
 import log from '@ckeditor/ckeditor5-utils/src/log';
@@ -86,7 +88,7 @@ describe( 'ViewConversionDispatcher', () => {
 				// Check correctness of passed parameters.
 				expect( evt.name ).to.equal( 'text' );
 				expect( data.input ).to.equal( viewText );
-				expect( data.foo ).to.equal( 'bar' );
+				expect( data.position ).to.instanceof( ModelPosition );
 
 				// Check whether consumable has appropriate value to consume.
 				expect( consumable.consume( data.input ) ).to.be.true;
@@ -94,18 +96,21 @@ describe( 'ViewConversionDispatcher', () => {
 				// Check whether conversionApi of `dispatcher` has been passed.
 				expect( conversionApi ).to.equal( dispatcher.conversionApi );
 
+				const text = conversionApi.writer.createText( data.input.data );
+				conversionApi.writer.insert( text, data.position );
+
 				// Set conversion result to `output` property of `data`.
 				// Later we will check if it was returned by `convert` method.
-				data.output = new ModelText( data.foo );
+				data.output = ModelRange.createOn( text );
 			} );
 
 			// Use `additionalData` parameter to check if it was passed to the event.
-			const conversionResult = dispatcher.convert( viewText, { foo: 'bar' } );
+			const conversionResult = dispatcher.convert( viewText );
 
 			// Check conversion result.
 			// Result should be wrapped in document fragment.
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
-			expect( conversionResult.getChild( 0 ).data ).to.equal( 'bar' );
+			expect( conversionResult.getChild( 0 ).data ).to.equal( 'foobar' );
 			expect( spy.calledOnce ).to.be.true;
 		} );
 
@@ -120,7 +125,7 @@ describe( 'ViewConversionDispatcher', () => {
 				// Check correctness of passed parameters.
 				expect( evt.name ).to.equal( 'element:p' );
 				expect( data.input ).to.equal( viewElement );
-				expect( data.foo ).to.equal( 'bar' );
+				expect( data.position ).to.instanceof( ModelPosition );
 
 				// Check whether consumable has appropriate value to consume.
 				expect( consumable.consume( data.input, { name: true } ) ).to.be.true;
@@ -129,13 +134,16 @@ describe( 'ViewConversionDispatcher', () => {
 				// Check whether conversionApi of `dispatcher` has been passed.
 				expect( conversionApi ).to.equal( dispatcher.conversionApi );
 
+				const paragraph = conversionApi.writer.createElement( 'paragraph' );
+				conversionApi.writer.insert( paragraph, data.position );
+
 				// Set conversion result to `output` property of `data`.
 				// Later we will check if it was returned by `convert` method.
-				data.output = new ModelElement( 'paragraph' );
+				data.output = ModelRange.createOn( paragraph );
 			} );
 
 			// Use `additionalData` parameter to check if it was passed to the event.
-			const conversionResult = dispatcher.convert( viewElement, { foo: 'bar' } );
+			const conversionResult = dispatcher.convert( viewElement );
 
 			// Check conversion result.
 			// Result should be wrapped in document fragment.
@@ -155,7 +163,7 @@ describe( 'ViewConversionDispatcher', () => {
 				// Check correctness of passed parameters.
 				expect( evt.name ).to.equal( 'documentFragment' );
 				expect( data.input ).to.equal( viewFragment );
-				expect( data.foo ).to.equal( 'bar' );
+				expect( data.position ).to.instanceof( ModelPosition );
 
 				// Check whether consumable has appropriate value to consume.
 				expect( consumable.consume( data.input ) ).to.be.true;
@@ -169,7 +177,7 @@ describe( 'ViewConversionDispatcher', () => {
 			} );
 
 			// Use `additionalData` parameter to check if it was passed to the event.
-			const conversionResult = dispatcher.convert( viewFragment, { foo: 'bar' } );
+			const conversionResult = dispatcher.convert( viewFragment );
 
 			// Check conversion result.
 			expect( conversionResult ).to.be.instanceof( ModelDocumentFragment );
@@ -263,11 +271,11 @@ describe( 'ViewConversionDispatcher', () => {
 				dispatcher.on( 'documentFragment', ( evt, data, consumable, conversionApi ) => {
 					spy();
 
-					expect( conversionApi.convertItem( viewP, consumableMock, data ) ).to.equal( modelP );
-					expect( conversionApi.convertItem( viewText, consumableMock, data ) ).to.equal( modelText );
+					expect( conversionApi.convertItem( viewP, consumableMock, data.position ) ).to.equal( modelP );
+					expect( conversionApi.convertItem( viewText, consumableMock, data.position ) ).to.equal( modelText );
 				} );
 
-				dispatcher.convert( new ViewDocumentFragment(), { foo: 'bar' } );
+				dispatcher.convert( new ViewDocumentFragment() );
 
 				expect( spy.calledOnce ).to.be.true;
 				expect( spyP.calledOnce ).to.be.true;
@@ -349,7 +357,7 @@ describe( 'ViewConversionDispatcher', () => {
 					expect( result.getChild( 1 ) ).to.equal( modelText );
 				} );
 
-				dispatcher.convert( new ViewDocumentFragment( [ viewArray, viewP, viewDiv, viewText, viewNull ] ), { foo: 'bar' } );
+				dispatcher.convert( new ViewDocumentFragment( [ viewArray, viewP, viewDiv, viewText, viewNull ] ) );
 
 				expect( spy.calledOnce ).to.be.true;
 				expect( spyNull.calledOnce ).to.be.true;