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

Changed: `MarkerDelta` transformation should consider ranges equal to `null`.

Szymon Cofalik 8 лет назад
Родитель
Сommit
d4f0aa39fd

+ 7 - 2
packages/ckeditor5-engine/src/model/delta/basic-transformations.js

@@ -103,8 +103,13 @@ function transformMarkerDelta( a, b ) {
 	const transformedDelta = a.clone();
 	const transformedDelta = a.clone();
 	const transformedOp = transformedDelta.operations[ 0 ];
 	const transformedOp = transformedDelta.operations[ 0 ];
 
 
-	transformedOp.oldRange = transformedOp.oldRange.getTransformedByDelta( b )[ 0 ];
-	transformedOp.newRange = transformedOp.newRange.getTransformedByDelta( b )[ 0 ];
+	if ( transformedOp.oldRange ) {
+		transformedOp.oldRange = transformedOp.oldRange.getTransformedByDelta( b )[ 0 ];
+	}
+
+	if ( transformedOp.newRange ) {
+		transformedOp.newRange = transformedOp.newRange.getTransformedByDelta( b )[ 0 ];
+	}
 
 
 	return [ transformedDelta ];
 	return [ transformedDelta ];
 }
 }

+ 13 - 0
packages/ckeditor5-engine/tests/model/delta/transform/markerdelta.js

@@ -232,4 +232,17 @@ describe( 'transform', () => {
 			} );
 			} );
 		} );
 		} );
 	} );
 	} );
+
+	it( 'transforming MarkerDelta with null ranges should not crash', () => {
+		const markerDelta = getMarkerDelta( 'name', null, null, baseVersion );
+
+		// Transform `markerDelta` by any other delta that has a special transformation case with `MarkerDelta`.
+		const wrapElement = new Element( 'w' );
+		const wrapRange = new Range( new Position( root, [ 1 ] ), new Position( root, [ 2 ] ) );
+		const wrapDelta = getWrapDelta( wrapRange, wrapElement, baseVersion );
+
+		expect( () => {
+			transform( markerDelta, wrapDelta );
+		} ).not.to.throw();
+	} );
 } );
 } );