Browse Source

Internal: Align code to the API changes (selection post-fixer).

Piotrek Koszuliński 7 years ago
parent
commit
83ab8991c4
1 changed files with 50 additions and 18 deletions
  1. 50 18
      packages/ckeditor5-list/tests/listediting.js

+ 50 - 18
packages/ckeditor5-list/tests/listediting.js

@@ -10,6 +10,7 @@ import ModelDocumentFragment from '@ckeditor/ckeditor5-engine/src/model/document
 import ModelPosition from '@ckeditor/ckeditor5-engine/src/model/position';
 import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
 import ModelElement from '@ckeditor/ckeditor5-engine/src/model/element';
+import Selection from '@ckeditor/ckeditor5-engine/src/model/selection';
 import ModelText from '@ckeditor/ckeditor5-engine/src/model/text';
 import ViewPosition from '@ckeditor/ckeditor5-engine/src/view/position';
 import ViewUIElement from '@ckeditor/ckeditor5-engine/src/view/uielement';
@@ -3049,9 +3050,9 @@ describe( 'ListEditing', () => {
 		describe( 'remove', () => {
 			function test( testName, input, output ) {
 				it( testName, () => {
-					setModelData( model, input );
-
 					model.change( writer => {
+						setModelData( model, input );
+
 						writer.remove( modelDoc.selection.getFirstRange() );
 					} );
 
@@ -3106,11 +3107,11 @@ describe( 'ListEditing', () => {
 		describe( 'move', () => {
 			function test( testName, input, offset, output ) {
 				it( testName, () => {
-					setModelData( model, input );
+					model.change( writer => {
+						setModelData( model, input );
 
-					const targetPosition = ModelPosition.createAt( modelRoot, offset );
+						const targetPosition = ModelPosition.createAt( modelRoot, offset );
 
-					model.change( writer => {
 						writer.move( modelDoc.selection.getFirstRange(), targetPosition );
 					} );
 
@@ -3280,11 +3281,11 @@ describe( 'ListEditing', () => {
 					'<listItem listIndent="0" listType="bulleted">h</listItem>' +
 					'<listItem listIndent="1" listType="bulleted">i</listItem>';
 
-				setModelData( model, modelBefore );
+				model.change( writer => {
+					setModelData( model, modelBefore );
 
-				const element = modelDoc.selection.getFirstPosition().nodeAfter;
+					const element = modelDoc.selection.getFirstPosition().nodeAfter;
 
-				model.change( writer => {
 					writer.rename( element, 'paragraph' );
 				} );
 
@@ -3897,8 +3898,9 @@ describe( 'ListEditing', () => {
 	}
 
 	function testRenameFromListItem( testName, input, output, testUndo = true ) {
-		const actionCallback = () => {
-			const element = modelDoc.selection.getFirstPosition().nodeAfter;
+		const actionCallback = undoSelection => {
+			const selection = undoSelection ? undoSelection : modelDoc.selection;
+			const element = selection.getFirstPosition().nodeAfter;
 
 			model.change( writer => {
 				writer.rename( element, 'paragraph' );
@@ -3911,8 +3913,10 @@ describe( 'ListEditing', () => {
 	}
 
 	function testRenameToListItem( testName, newIndent, input, output ) {
-		const actionCallback = () => {
-			const element = modelDoc.selection.getFirstPosition().nodeAfter;
+		const actionCallback = undoSelection => {
+			const selection = undoSelection ? undoSelection : modelDoc.selection;
+
+			const element = selection.getFirstPosition().nodeAfter;
 
 			model.change( writer => {
 				writer.setAttributes( { listType: 'bulleted', listIndent: newIndent }, element );
@@ -3934,11 +3938,13 @@ describe( 'ListEditing', () => {
 	}
 
 	function testMove( testName, input, rootOffset, output, testUndo = true ) {
-		const actionCallback = () => {
+		const actionCallback = undoSelection => {
 			const targetPosition = ModelPosition.createAt( modelRoot, rootOffset );
 
+			const selection = undoSelection ? undoSelection : modelDoc.selection;
+
 			model.change( writer => {
-				writer.move( modelDoc.selection.getFirstRange(), targetPosition );
+				writer.move( selection.getFirstRange(), targetPosition );
 			} );
 		};
 
@@ -3948,7 +3954,7 @@ describe( 'ListEditing', () => {
 	function _test( testName, input, output, actionCallback ) {
 		it( testName, () => {
 			// Wrap all changes in one block to avoid post-fixing the selection
-			// (which may be incorret) in the meantime.
+			// (which may be incorrect) in the meantime.
 			model.change( () => {
 				setModelData( model, input );
 
@@ -3959,15 +3965,41 @@ describe( 'ListEditing', () => {
 		} );
 
 		it( testName + ' (undo integration)', () => {
+			const modelRoot = model.document.getRoot( 'main' );
+
+			// Parse data string to model.
+			const parsedResult = parseModel( input, model.schema, { context: [ modelRoot.name ] } );
+
+			// Retrieve DocumentFragment and Selection from parsed model.
+			const modelDocumentFragment = parsedResult.model;
+			const selection = parsedResult.selection;
+
 			// Ensure no undo step is generated.
-			model.enqueueChange( 'transparent', () => {
-				setModelData( model, input );
+			model.enqueueChange( 'transparent', writer => {
+				// Replace existing model in document by new one.
+				writer.remove( ModelRange.createIn( modelRoot ) );
+				writer.insert( modelDocumentFragment, modelRoot );
+
+				// // Clean up previous document selection.
+				writer.setSelection( null );
+				writer.removeSelectionAttribute( model.document.selection.getAttributeKeys() );
 			} );
 
 			const modelBefore = getModelData( model );
 			const viewBefore = getViewData( view, { withoutSelection: true } );
 
-			actionCallback();
+			const ranges = [];
+
+			for ( const range of selection.getRanges() ) {
+				const start = new ModelPosition( modelRoot, range.start.path );
+				const end = new ModelPosition( modelRoot, range.end.path );
+
+				ranges.push( new ModelRange( start, end ) );
+			}
+
+			const callbackSelection = new Selection( ranges );
+
+			actionCallback( callbackSelection );
 
 			const modelAfter = getModelData( model );
 			const viewAfter = getViewData( view, { withoutSelection: true } );