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

Added tests and aligned documentation to DataController method's capabilities.

Piotrek Koszuliński 9 лет назад
Родитель
Сommit
aef37d3b6e

+ 15 - 11
packages/ckeditor5-engine/src/controller/datacontroller.js

@@ -138,34 +138,38 @@ export default class DataController {
 	}
 
 	/**
-	 * Returns the content of the given {@link module:engine/model/element~Element model's element} converted by the
+	 * Returns the content of the given {@link module:engine/model/element~Element model's element} or
+	 * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the
 	 * {@link #modelToView model to view converters} and formatted by the
 	 * {@link #processor data processor}.
 	 *
-	 * @param {module:engine/model/element~Element} modelElement Element which content will be stringified.
+	 * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} modelElementOrFragment
+	 * Element which content will be stringified.
 	 * @returns {String} Output data.
 	 */
-	stringify( modelElement ) {
+	stringify( modelElementOrFragment ) {
 		// model -> view
-		const viewDocumentFragment = this.toView( modelElement );
+		const viewDocumentFragment = this.toView( modelElementOrFragment );
 
 		// view -> data
 		return this.processor.toData( viewDocumentFragment );
 	}
 
 	/**
-	 * Returns the content of the given {@link module:engine/model/element~Element model's element} converted by the
-	 * {@link #modelToView model to view converters} to the
-	 * {@link module:engine/view/documentfragment~DocumentFragment view DocumentFragment}.
+	 * Returns the content of the given {@link module:engine/model/element~Element model element} or
+	 * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the
+	 * {@link #modelToView model to view converters} to a
+	 * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}.
 	 *
-	 * @param {module:engine/model/element~Element} modelElement Element which content will be stringified.
+	 * @param {module:engine/model/element~Element|module:engine/model/documentfragment~DocumentFragment} modelElementOrFragment
+	 * Element or document fragment which content will be converted.
 	 * @returns {module:engine/view/documentfragment~DocumentFragment} Output view DocumentFragment.
 	 */
-	toView( modelElement ) {
-		const modelRange = ModelRange.createIn( modelElement );
+	toView( modelElementOrFragment ) {
+		const modelRange = ModelRange.createIn( modelElementOrFragment );
 
 		const viewDocumentFragment = new ViewDocumentFragment();
-		this.mapper.bindElements( modelElement, viewDocumentFragment );
+		this.mapper.bindElements( modelElementOrFragment, viewDocumentFragment );
 
 		this.modelToView.convertInsertion( modelRange );
 

+ 38 - 5
packages/ckeditor5-engine/tests/controller/datacontroller.js

@@ -14,6 +14,8 @@ import ModelDocumentFragment from 'ckeditor5/engine/model/documentfragment.js';
 import ModelText from 'ckeditor5/engine/model/text.js';
 import ModelSelection from 'ckeditor5/engine/model/selection.js';
 
+import ViewDocumentFragment from 'ckeditor5/engine/view/documentfragment.js';
+
 import { getData, setData, stringify, parse } from 'ckeditor5/engine/dev-utils/model.js';
 
 import count from 'ckeditor5/utils/count.js';
@@ -293,26 +295,57 @@ describe( 'DataController', () => {
 	} );
 
 	describe( 'stringify', () => {
-		it( 'should get paragraph with text', () => {
+		beforeEach( () => {
 			modelDocument.schema.registerItem( 'paragraph', '$block' );
 			modelDocument.schema.registerItem( 'div', '$block' );
-			const modelElement = parse( '<div><paragraph>foo</paragraph></div>', modelDocument.schema );
 
 			buildModelConverter().for( data.modelToView ).fromElement( 'paragraph' ).toElement( 'p' );
+		} );
+
+		it( 'should stringify a content of an element', () => {
+			const modelElement = parse( '<div><paragraph>foo</paragraph></div>', modelDocument.schema );
 
 			expect( data.stringify( modelElement ) ).to.equal( '<p>foo</p>' );
 		} );
+
+		it( 'should stringify a content of a document fragment', () => {
+			const modelDocumentFragment = parse( '<paragraph>foo</paragraph><paragraph>bar</paragraph>', modelDocument.schema );
+
+			expect( data.stringify( modelDocumentFragment ) ).to.equal( '<p>foo</p><p>bar</p>' );
+		} );
 	} );
 
 	describe( 'toView', () => {
-		it( 'should get view element P with text', () => {
+		beforeEach( () => {
 			modelDocument.schema.registerItem( 'paragraph', '$block' );
 			modelDocument.schema.registerItem( 'div', '$block' );
-			const modelElement = parse( '<div><paragraph>foo</paragraph></div>', modelDocument.schema );
 
 			buildModelConverter().for( data.modelToView ).fromElement( 'paragraph' ).toElement( 'p' );
+		} );
+
+		it( 'should convert a content of an element', () => {
+			const modelElement = parse( '<div><paragraph>foo</paragraph></div>', modelDocument.schema );
+
+			const viewDocumentFragment = data.toView( modelElement );
+
+			expect( viewDocumentFragment ).to.be.instanceOf( ViewDocumentFragment );
+
+			const viewElement = viewDocumentFragment.getChild( 0 );
+
+			expect( viewElement.name ).to.equal( 'p' );
+			expect( viewElement.childCount ).to.equal( 1 );
+			expect( viewElement.getChild( 0 ).data ).to.equal( 'foo' );
+		} );
+
+		it( 'should convert a document fragment', () => {
+			const modelDocumentFragment = parse( '<paragraph>foo</paragraph><paragraph>bar</paragraph>', modelDocument.schema );
+
+			const viewDocumentFragment = data.toView( modelDocumentFragment );
+
+			expect( viewDocumentFragment ).to.be.instanceOf( ViewDocumentFragment );
+			expect( viewDocumentFragment ).to.have.property( 'childCount', 2 );
 
-			const viewElement = data.toView( modelElement ).getChild( 0 );
+			const viewElement = viewDocumentFragment.getChild( 0 );
 
 			expect( viewElement.name ).to.equal( 'p' );
 			expect( viewElement.childCount ).to.equal( 1 );