Procházet zdrojové kódy

Merge pull request #525 from ckeditor/t/433

Parsing empty document fragment in testing tools
Szymon Cofalik před 9 roky
rodič
revize
01dfc24a0d

+ 1 - 1
packages/ckeditor5-engine/src/view/node.js

@@ -123,7 +123,7 @@ export default class Node {
 		const ancestors = [];
 		const ancestors = [];
 		let parent = options.includeNode ? this : this.parent;
 		let parent = options.includeNode ? this : this.parent;
 
 
-		while ( parent !== null ) {
+		while ( parent ) {
 			ancestors[ options.parentFirst ? 'push' : 'unshift' ]( parent );
 			ancestors[ options.parentFirst ? 'push' : 'unshift' ]( parent );
 			parent = parent.parent;
 			parent = parent.parent;
 		}
 		}

+ 36 - 0
packages/ckeditor5-engine/tests/_utils-tests/model.js

@@ -301,6 +301,42 @@ describe( 'model test utils', () => {
 	} );
 	} );
 
 
 	describe( 'parse', () => {
 	describe( 'parse', () => {
+		test( 'creates empty DocumentFragment from empty string', {
+			data: '',
+			check( fragment ) {
+				expect( fragment ).to.be.instanceOf( DocumentFragment );
+			}
+		} );
+
+		test( 'creates empty DocumentFragment with selection', {
+			data: '<selection />',
+			check( fragment, selection ) {
+				expect( fragment ).to.be.instanceOf( DocumentFragment );
+				expect( fragment.getChildCount() ).to.equal( 0 );
+				expect( selection.rangeCount ).to.equal( 1 );
+				expect( selection.getFirstRange().isEqual( Range.createFromParentsAndOffsets( fragment, 0, fragment, 0 ) ) ).to.be.true;
+			}
+		} );
+
+		test( 'returns Element if range is around single element', {
+			data: '<selection><a></a></selection>',
+			check( el, selection ) {
+				const fragment = el.parent;
+				expect( el ).to.be.instanceOf( Element );
+				expect( fragment ).to.be.instanceOf( DocumentFragment );
+				expect( selection.rangeCount ).to.equal( 1 );
+				expect( selection.getFirstRange().isEqual( Range.createFromParentsAndOffsets( fragment, 0, fragment, 1 ) ) ).to.be.true;
+			}
+		} );
+
+		test( 'returns DocumentFragment when multiple elements on root', {
+			data: '<a></a><b></b>',
+			check( fragment ) {
+				expect( fragment ).to.be.instanceOf( DocumentFragment );
+				expect( fragment.getChildCount() ).to.equal( 2 );
+			}
+		} );
+
 		test( 'creates elements', {
 		test( 'creates elements', {
 			data: '<a></a><b><c></c></b>'
 			data: '<a></a><b><c></c></b>'
 		} );
 		} );

+ 33 - 15
packages/ckeditor5-engine/tests/_utils-tests/view.js

@@ -311,6 +311,39 @@ describe( 'view test utils', () => {
 	} );
 	} );
 
 
 	describe( 'parse', () => {
 	describe( 'parse', () => {
+		it( 'should return empty DocumentFragment for empty string', () => {
+			const fragment = parse( '' );
+
+			expect( fragment ).to.be.instanceOf( DocumentFragment );
+			expect( fragment.getChildCount() ).to.equal( 0 );
+		} );
+
+		it( 'should return empty DocumentFragment and Selection for string containing range only', () => {
+			const { view, selection } = parse( '[]' );
+
+			expect( view ).to.be.instanceOf( DocumentFragment );
+			expect( selection.rangeCount ).to.equal( 1 );
+			expect( selection.getFirstRange().isEqual( Range.createFromParentsAndOffsets( view, 0, view, 0 ) ) ).to.be.true;
+		} );
+
+		it( 'should return Element if range is around single element', () => {
+			const { view, selection } = parse( '[<b>foobar</b>]' );
+			const parent = view.parent;
+
+			expect( view ).to.be.instanceOf( Element );
+			expect( parent ).to.be.instanceOf( DocumentFragment );
+			expect( selection.rangeCount ).to.equal( 1 );
+			expect( selection.getFirstRange().isEqual( Range.createFromParentsAndOffsets( parent, 0, parent, 1 ) ) ).to.be.true;
+		} );
+
+		it( 'should create DocumentFragment when multiple elements on root', () => {
+			const view = parse( '<b></b><i></i>' );
+			expect( view ).to.be.instanceOf( DocumentFragment );
+			expect( view.getChildCount() ).to.equal( 2 );
+			expect( view.getChild( 0 ).isSimilar( new Element( 'b' ) ) ).to.be.true;
+			expect( view.getChild( 1 ).isSimilar( new Element( 'i' ) ) ).to.be.true;
+		} );
+
 		it( 'should parse text', () => {
 		it( 'should parse text', () => {
 			const text = parse( 'foobar' );
 			const text = parse( 'foobar' );
 			expect( text ).to.be.instanceOf( Text );
 			expect( text ).to.be.instanceOf( Text );
@@ -369,14 +402,6 @@ describe( 'view test utils', () => {
 			expect( parsed2.isSimilar( attribute2 ) ).to.be.true;
 			expect( parsed2.isSimilar( attribute2 ) ).to.be.true;
 		} );
 		} );
 
 
-		it( 'should create DocumentFragment when multiple elements on root', () => {
-			const view = parse( '<b></b><i></i>' );
-			expect( view ).to.be.instanceOf( DocumentFragment );
-			expect( view.getChildCount() ).to.equal( 2 );
-			expect( view.getChild( 0 ).isSimilar( new Element( 'b' ) ) ).to.be.true;
-			expect( view.getChild( 1 ).isSimilar( new Element( 'i' ) ) ).to.be.true;
-		} );
-
 		it( 'should paste nested elements and texts', () => {
 		it( 'should paste nested elements and texts', () => {
 			const parsed = parse( '<container:p>foo<b:12>bar<i:25>qux</i:25></b:12></container:p>' );
 			const parsed = parse( '<container:p>foo<b:12>bar<i:25>qux</i:25></b:12></container:p>' );
 			expect( parsed.isSimilar( new ContainerElement( 'p' ) ) ).to.be.true;
 			expect( parsed.isSimilar( new ContainerElement( 'p' ) ) ).to.be.true;
@@ -473,13 +498,6 @@ describe( 'view test utils', () => {
 			expect( selection.focus.isEqual( ranges[ 2 ].start ) ).to.be.true;
 			expect( selection.focus.isEqual( ranges[ 2 ].start ) ).to.be.true;
 		} );
 		} );
 
 
-		it( 'should return DocumentFragment if range is around single element', () => {
-			const { view, selection } = parse( '[<b>foobar</b>]' );
-			expect( view ).to.be.instanceOf( DocumentFragment );
-			expect( selection.rangeCount ).to.equal( 1 );
-			expect( selection.getFirstRange().isEqual( Range.createFromParentsAndOffsets( view, 0, view, 1 ) ) ).to.be.true;
-		} );
-
 		it( 'should throw when ranges order does not include all ranges', () => {
 		it( 'should throw when ranges order does not include all ranges', () => {
 			expect( () => {
 			expect( () => {
 				parse( '{}foobar{}', { order: [ 1 ] } );
 				parse( '{}foobar{}', { order: [ 1 ] } );

+ 28 - 1
packages/ckeditor5-engine/tests/_utils/view.js

@@ -235,6 +235,17 @@ export function stringify( node, selectionOrPositionOrRange = null, options = {}
  *
  *
  *		const { root, selection } = parse( `{foo}bar{baz}`, { lastRangeBackward: true } );
  *		const { root, selection } = parse( `{foo}bar{baz}`, { lastRangeBackward: true } );
  *
  *
+ * Other examples and edge cases:
+ *
+ *		// Returns empty DocumentFragment.
+ *		parse( '' );
+ *
+ *		// Returns empty DocumentFragment and collapsed selection.
+ *		const { root, selection } = parse( '[]' );
+ *
+ *		// Returns Element and selection that is placed inside of DocumentFragment containing that element.
+ *		const { root, selection } = parse( '[<a></a>]' );
+ *
  * @param {String} data HTML-like string to be parsed.
  * @param {String} data HTML-like string to be parsed.
  * @param {Object} options
  * @param {Object} options
  * @param {Array.<Number>} [options.order] Array with order of parsed ranges added to returned
  * @param {Array.<Number>} [options.order] Array with order of parsed ranges added to returned
@@ -254,9 +265,20 @@ export function parse( data, options = {} ) {
 	const viewParser = new ViewParser();
 	const viewParser = new ViewParser();
 	const rangeParser = new RangeParser();
 	const rangeParser = new RangeParser();
 
 
-	const view = viewParser.parse( data, options.rootElement );
+	let view = viewParser.parse( data, options.rootElement );
+
+	// If single Element or Text is returned - move it to the DocumentFragment.
+	if ( !options.rootElement && ( view instanceof ViewText || view instanceof ViewElement ) ) {
+		view = new ViewDocumentFragment( view );
+	}
+
 	const ranges = rangeParser.parse( view, options.order );
 	const ranges = rangeParser.parse( view, options.order );
 
 
+	// If only one element is returned inside DocumentFragment - return that element.
+	if ( view instanceof ViewDocumentFragment && view.getChildCount() === 1 ) {
+		view = view.getChild( 0 );
+	}
+
 	// When ranges are present - return object containing view, and selection.
 	// When ranges are present - return object containing view, and selection.
 	if ( ranges.length ) {
 	if ( ranges.length ) {
 		const selection = new Selection();
 		const selection = new Selection();
@@ -268,6 +290,11 @@ export function parse( data, options = {} ) {
 		};
 		};
 	}
 	}
 
 
+	// If single element is returned without selection - remove it from parent and return detached element.
+	if ( view.parent ) {
+		view.remove();
+	}
+
 	return view;
 	return view;
 }
 }
 
 

+ 11 - 0
packages/ckeditor5-engine/tests/view/node.js

@@ -100,6 +100,17 @@ describe( 'Node', () => {
 			expect( result2[ 1 ] ).to.equal( two );
 			expect( result2[ 1 ] ).to.equal( two );
 			expect( result2[ 0 ] ).to.equal( charR );
 			expect( result2[ 0 ] ).to.equal( charR );
 		} );
 		} );
+
+		it( 'should return ancestors including DocumentFragment', () => {
+			const fragment = new DocumentFragment( root );
+			const result = img.getAncestors();
+			root.remove();
+
+			expect( result.length ).to.equal( 3 );
+			expect( result[ 0 ] ).to.equal( fragment );
+			expect( result[ 1 ] ).to.equal( root );
+			expect( result[ 2 ] ).to.equal( two );
+		} );
 	} );
 	} );
 
 
 	describe( 'getIndex', () => {
 	describe( 'getIndex', () => {

+ 1 - 9
packages/ckeditor5-engine/tests/view/writer/breakAt.js

@@ -8,9 +8,6 @@
 'use strict';
 'use strict';
 
 
 import { breakAt } from '/ckeditor5/engine/view/writer.js';
 import { breakAt } from '/ckeditor5/engine/view/writer.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
-import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import Text from '/ckeditor5/engine/view/text.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 
 
 describe( 'writer', () => {
 describe( 'writer', () => {
@@ -24,13 +21,8 @@ describe( 'writer', () => {
 	function test( input, expected ) {
 	function test( input, expected ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		// Wrap attributes and text into DocumentFragment.
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const newPosition = breakAt( selection.getFirstPosition() );
 		const newPosition = breakAt( selection.getFirstPosition() );
-		expect( stringify( view, newPosition, { showType: true, showPriority: true } ) ).to.equal( expected );
+		expect( stringify( view.getRoot(), newPosition, { showType: true, showPriority: true } ) ).to.equal( expected );
 	}
 	}
 
 
 	describe( 'breakAt', () => {
 	describe( 'breakAt', () => {

+ 1 - 7
packages/ckeditor5-engine/tests/view/writer/breakrange.js

@@ -8,10 +8,8 @@
 'use strict';
 'use strict';
 
 
 import { breakRange } from '/ckeditor5/engine/view/writer.js';
 import { breakRange } from '/ckeditor5/engine/view/writer.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import Text from '/ckeditor5/engine/view/text.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
@@ -26,12 +24,8 @@ describe( 'writer', () => {
 	function test( input, expected ) {
 	function test( input, expected ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const newRange = breakRange( selection.getFirstRange() );
 		const newRange = breakRange( selection.getFirstRange() );
-		expect( stringify( view, newRange, { showType: true } ) ).to.equal( expected );
+		expect( stringify( view.getRoot(), newRange, { showType: true } ) ).to.equal( expected );
 	}
 	}
 
 
 	describe( 'breakRange', () => {
 	describe( 'breakRange', () => {

+ 1 - 7
packages/ckeditor5-engine/tests/view/writer/insert.js

@@ -8,14 +8,12 @@
 'use strict';
 'use strict';
 
 
 import { insert } from '/ckeditor5/engine/view/writer.js';
 import { insert } from '/ckeditor5/engine/view/writer.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import Text from '/ckeditor5/engine/view/text.js';
 
 
 describe( 'writer', () => {
 describe( 'writer', () => {
 	/**
 	/**
@@ -29,12 +27,8 @@ describe( 'writer', () => {
 		nodesToInsert = nodesToInsert.map( node => parse( node ) );
 		nodesToInsert = nodesToInsert.map( node => parse( node ) );
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const newRange = insert( selection.getFirstPosition(), nodesToInsert );
 		const newRange = insert( selection.getFirstPosition(), nodesToInsert );
-		expect( stringify( view, newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
+		expect( stringify( view.getRoot(), newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
 	}
 	}
 
 
 	describe( 'insert', () => {
 	describe( 'insert', () => {

+ 0 - 11
packages/ckeditor5-engine/tests/view/writer/move.js

@@ -8,10 +8,7 @@
 'use strict';
 'use strict';
 
 
 import { move } from '/ckeditor5/engine/view/writer.js';
 import { move } from '/ckeditor5/engine/view/writer.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
-import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import Text from '/ckeditor5/engine/view/text.js';
 
 
 describe( 'writer', () => {
 describe( 'writer', () => {
 	/**
 	/**
@@ -26,14 +23,6 @@ describe( 'writer', () => {
 		let { view: srcView, selection: srcSelection } = parse( source );
 		let { view: srcView, selection: srcSelection } = parse( source );
 		let { view: dstView, selection: dstSelection } = parse( destination );
 		let { view: dstView, selection: dstSelection } = parse( destination );
 
 
-		if ( srcView instanceof AttributeElement || srcView instanceof Text ) {
-			srcView = new DocumentFragment( srcView );
-		}
-
-		if ( dstView instanceof AttributeElement || dstView instanceof Text ) {
-			dstView = new DocumentFragment( dstView );
-		}
-
 		const newRange = move( srcSelection.getFirstRange(), dstSelection.getFirstPosition() );
 		const newRange = move( srcSelection.getFirstRange(), dstSelection.getFirstPosition() );
 
 
 		expect( stringify( dstView, newRange, { showType: true, showPriority: true } ) ).to.equal( destinationAfterMove );
 		expect( stringify( dstView, newRange, { showType: true, showPriority: true } ) ).to.equal( destinationAfterMove );

+ 0 - 5
packages/ckeditor5-engine/tests/view/writer/remove.js

@@ -13,7 +13,6 @@ import Range from '/ckeditor5/engine/view/range.js';
 import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import Text from '/ckeditor5/engine/view/text.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 
 
 describe( 'writer', () => {
 describe( 'writer', () => {
@@ -28,10 +27,6 @@ describe( 'writer', () => {
 	function test( input, expectedResult, expectedRemoved ) {
 	function test( input, expectedResult, expectedRemoved ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const range = selection.getFirstRange();
 		const range = selection.getFirstRange();
 		const removed = remove( range );
 		const removed = remove( range );
 		expect( stringify( view, range, { showType: true, showPriority: true } ) ).to.equal( expectedResult );
 		expect( stringify( view, range, { showType: true, showPriority: true } ) ).to.equal( expectedResult );

+ 1 - 6
packages/ckeditor5-engine/tests/view/writer/unwrap.js

@@ -11,7 +11,6 @@ import { unwrap } from '/ckeditor5/engine/view/writer.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import Text from '/ckeditor5/engine/view/text.js';
 import Text from '/ckeditor5/engine/view/text.js';
@@ -29,12 +28,8 @@ describe( 'writer', () => {
 	function test( input, unwrapAttribute, expected ) {
 	function test( input, unwrapAttribute, expected ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const newRange = unwrap( selection.getFirstRange(), parse( unwrapAttribute ) );
 		const newRange = unwrap( selection.getFirstRange(), parse( unwrapAttribute ) );
-		expect( stringify( view, newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
+		expect( stringify( view.getRoot(), newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
 	}
 	}
 
 
 	describe( 'unwrap', () => {
 	describe( 'unwrap', () => {

+ 4 - 9
packages/ckeditor5-engine/tests/view/writer/wrap.js

@@ -11,7 +11,6 @@ import { wrap } from '/ckeditor5/engine/view/writer.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import Range from '/ckeditor5/engine/view/range.js';
 import Text from '/ckeditor5/engine/view/text.js';
 import Text from '/ckeditor5/engine/view/text.js';
@@ -23,18 +22,14 @@ describe( 'writer', () => {
 	 * Executes test using `parse` and `stringify` utils functions.
 	 * Executes test using `parse` and `stringify` utils functions.
 	 *
 	 *
 	 * @param {String} input
 	 * @param {String} input
-	 * @param {String} unwrapAttribute
+	 * @param {String} wrapAttribute
 	 * @param {String} expected
 	 * @param {String} expected
 	 */
 	 */
-	function test( input, unwrapAttribute, expected ) {
+	function test( input, wrapAttribute, expected ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
+		const newRange = wrap( selection.getFirstRange(), parse( wrapAttribute ) );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
-		const newRange = wrap( selection.getFirstRange(), parse( unwrapAttribute ) );
-		expect( stringify( view, newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
+		expect( stringify( view.getRoot(), newRange, { showType: true, showPriority: true } ) ).to.equal( expected );
 	}
 	}
 
 
 	describe( 'wrap', () => {
 	describe( 'wrap', () => {

+ 0 - 6
packages/ckeditor5-engine/tests/view/writer/wrapposition.js

@@ -11,11 +11,9 @@ import { wrapPosition } from '/ckeditor5/engine/view/writer.js';
 import Text from '/ckeditor5/engine/view/text.js';
 import Text from '/ckeditor5/engine/view/text.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import Element from '/ckeditor5/engine/view/element.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
 import ContainerElement from '/ckeditor5/engine/view/containerelement.js';
-import DocumentFragment from '/ckeditor5/engine/view/documentfragment.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import Position from '/ckeditor5/engine/view/position.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import CKEditorError from '/ckeditor5/utils/ckeditorerror.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
 import { stringify, parse } from '/tests/engine/_utils/view.js';
-import AttributeElement from '/ckeditor5/engine/view/attributeelement.js';
 
 
 describe( 'wrapPosition', () => {
 describe( 'wrapPosition', () => {
 	/**
 	/**
@@ -28,10 +26,6 @@ describe( 'wrapPosition', () => {
 	function test( input, unwrapAttribute, expected ) {
 	function test( input, unwrapAttribute, expected ) {
 		let { view, selection } = parse( input );
 		let { view, selection } = parse( input );
 
 
-		if ( view instanceof AttributeElement || view instanceof Text ) {
-			view = new DocumentFragment( view );
-		}
-
 		const newPosition = wrapPosition( selection.getFirstPosition(), parse( unwrapAttribute ) );
 		const newPosition = wrapPosition( selection.getFirstPosition(), parse( unwrapAttribute ) );
 		expect( stringify( view, newPosition, { showType: true, showPriority: true } ) ).to.equal( expected );
 		expect( stringify( view, newPosition, { showType: true, showPriority: true } ) ).to.equal( expected );
 	}
 	}