|
|
@@ -23,25 +23,37 @@ describe( 'SplitOperation', () => {
|
|
|
} );
|
|
|
|
|
|
it( 'should have proper type', () => {
|
|
|
- const split = new SplitOperation( new Position( root, [ 1, 3 ] ), 2, null, 1 );
|
|
|
+ const position = new Position( root, [ 1, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const split = new SplitOperation( position, 2, insertionPosition, null, 1 );
|
|
|
|
|
|
expect( split.type ).to.equal( 'split' );
|
|
|
} );
|
|
|
|
|
|
it( 'should have proper insertionPosition', () => {
|
|
|
- const split = new SplitOperation( new Position( root, [ 1, 3 ] ), 2, null, 1 );
|
|
|
+ const position = new Position( root, [ 1, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const split = new SplitOperation( position, 2, insertionPosition, null, 1 );
|
|
|
|
|
|
expect( split.insertionPosition.path ).to.deep.equal( [ 2 ] );
|
|
|
} );
|
|
|
|
|
|
it( 'should have proper moveTargetPosition', () => {
|
|
|
- const split = new SplitOperation( new Position( root, [ 1, 3 ] ), 2, null, 1 );
|
|
|
+ const position = new Position( root, [ 1, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const split = new SplitOperation( position, 2, insertionPosition, null, 1 );
|
|
|
|
|
|
expect( split.moveTargetPosition.path ).to.deep.equal( [ 2, 0 ] );
|
|
|
} );
|
|
|
|
|
|
it( 'should have proper movedRange', () => {
|
|
|
- const split = new SplitOperation( new Position( root, [ 1, 3 ] ), 2, null, 1 );
|
|
|
+ const position = new Position( root, [ 1, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const split = new SplitOperation( position, 2, insertionPosition, null, 1 );
|
|
|
|
|
|
expect( split.movedRange.start.path ).to.deep.equal( [ 1, 3 ] );
|
|
|
expect( split.movedRange.end.path ).to.deep.equal( [ 1, Number.POSITIVE_INFINITY ] );
|
|
|
@@ -52,7 +64,10 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- model.applyOperation( new SplitOperation( new Position( root, [ 0, 3 ] ), 3, null, doc.version ) );
|
|
|
+ const position = new Position( root, [ 0, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ model.applyOperation( new SplitOperation( position, 3, insertionPosition, null, doc.version ) );
|
|
|
|
|
|
expect( doc.version ).to.equal( 1 );
|
|
|
expect( root.maxOffset ).to.equal( 2 );
|
|
|
@@ -73,7 +88,10 @@ describe( 'SplitOperation', () => {
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
gy._insertChild( 0, [ p2 ] );
|
|
|
|
|
|
- model.applyOperation( new SplitOperation( new Position( root, [ 0, 3 ] ), 3, gyPos, doc.version ) );
|
|
|
+ const position = new Position( root, [ 0, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ model.applyOperation( new SplitOperation( position, 3, insertionPosition, gyPos, doc.version ) );
|
|
|
|
|
|
expect( doc.version ).to.equal( 1 );
|
|
|
expect( root.maxOffset ).to.equal( 2 );
|
|
|
@@ -90,7 +108,10 @@ describe( 'SplitOperation', () => {
|
|
|
} );
|
|
|
|
|
|
it( 'should create a proper MergeOperation as a reverse', () => {
|
|
|
- const operation = new SplitOperation( new Position( root, [ 1, 3 ] ), 3, null, doc.version );
|
|
|
+ const position = new Position( root, [ 1, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const operation = new SplitOperation( position, 3, insertionPosition, null, doc.version );
|
|
|
const reverse = operation.getReversed();
|
|
|
|
|
|
expect( reverse ).to.be.an.instanceof( MergeOperation );
|
|
|
@@ -106,7 +127,10 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- const operation = new SplitOperation( new Position( root, [ 0, 3 ] ), 3, null, doc.version );
|
|
|
+ const position = new Position( root, [ 0, 3 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const operation = new SplitOperation( position, 3, insertionPosition, null, doc.version );
|
|
|
|
|
|
model.applyOperation( operation );
|
|
|
model.applyOperation( operation.getReversed() );
|
|
|
@@ -123,7 +147,10 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- const operation = new SplitOperation( new Position( root, [ 0, 8 ] ), 3, null, doc.version );
|
|
|
+ const position = new Position( root, [ 0, 8 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+
|
|
|
+ const operation = new SplitOperation( position, 3, insertionPosition, null, doc.version );
|
|
|
|
|
|
expect( () => operation._validate() ).to.throw( CKEditorError, /split-operation-position-invalid/ );
|
|
|
} );
|
|
|
@@ -133,7 +160,7 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- const operation = new SplitOperation( new Position( root, [ 1 ] ), 3, null, doc.version );
|
|
|
+ const operation = new SplitOperation( new Position( root, [ 1 ] ), 3, new Position( root, [ 2 ] ), null, doc.version );
|
|
|
|
|
|
expect( () => operation._validate() ).to.throw( CKEditorError, /split-operation-split-in-root/ );
|
|
|
} );
|
|
|
@@ -143,7 +170,7 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- const operation = new SplitOperation( new Position( root, [ 0, 2 ] ), 6, null, doc.version );
|
|
|
+ const operation = new SplitOperation( new Position( root, [ 0, 2 ] ), 6, new Position( root, [ 1 ] ), null, doc.version );
|
|
|
|
|
|
expect( () => operation._validate() ).to.throw( CKEditorError, /split-operation-how-many-invalid/ );
|
|
|
} );
|
|
|
@@ -153,7 +180,7 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
root._insertChild( 0, [ p1 ] );
|
|
|
|
|
|
- const operation = new SplitOperation( new Position( root, [ 0, 2 ] ), 4, gyPos, doc.version );
|
|
|
+ const operation = new SplitOperation( new Position( root, [ 0, 2 ] ), 4, new Position( root, [ 1 ] ), gyPos, doc.version );
|
|
|
|
|
|
expect( () => operation._validate() ).to.throw( CKEditorError, /split-operation-graveyard-position-invalid/ );
|
|
|
} );
|
|
|
@@ -161,10 +188,11 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
it( 'should create SplitOperation with the same parameters when cloned #1', () => {
|
|
|
const position = new Position( root, [ 1, 2 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
const howMany = 4;
|
|
|
const baseVersion = doc.version;
|
|
|
|
|
|
- const op = new SplitOperation( position, howMany, null, baseVersion );
|
|
|
+ const op = new SplitOperation( position, howMany, insertionPosition, null, baseVersion );
|
|
|
|
|
|
const clone = op.clone();
|
|
|
|
|
|
@@ -172,18 +200,20 @@ describe( 'SplitOperation', () => {
|
|
|
expect( clone ).not.to.be.equal( op );
|
|
|
|
|
|
expect( clone ).to.be.instanceof( SplitOperation );
|
|
|
- expect( clone.position.isEqual( position ) ).to.be.true;
|
|
|
+ expect( clone.splitPosition.isEqual( position ) ).to.be.true;
|
|
|
expect( clone.howMany ).to.equal( howMany );
|
|
|
+ expect( clone.insertionPosition.isEqual( insertionPosition ) );
|
|
|
expect( clone.graveyardPosition ).to.be.null;
|
|
|
expect( clone.baseVersion ).to.equal( baseVersion );
|
|
|
} );
|
|
|
|
|
|
it( 'should create SplitOperation with the same parameters when cloned #2', () => {
|
|
|
const position = new Position( root, [ 1, 2 ] );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
const howMany = 4;
|
|
|
const baseVersion = doc.version;
|
|
|
|
|
|
- const op = new SplitOperation( position, howMany, gyPos, baseVersion );
|
|
|
+ const op = new SplitOperation( position, howMany, insertionPosition, gyPos, baseVersion );
|
|
|
|
|
|
const clone = op.clone();
|
|
|
|
|
|
@@ -191,8 +221,9 @@ describe( 'SplitOperation', () => {
|
|
|
expect( clone ).not.to.be.equal( op );
|
|
|
|
|
|
expect( clone ).to.be.instanceof( SplitOperation );
|
|
|
- expect( clone.position.isEqual( position ) ).to.be.true;
|
|
|
+ expect( clone.splitPosition.isEqual( position ) ).to.be.true;
|
|
|
expect( clone.howMany ).to.equal( howMany );
|
|
|
+ expect( clone.insertionPosition.isEqual( insertionPosition ) );
|
|
|
expect( clone.graveyardPosition.isEqual( gyPos ) ).to.be.true;
|
|
|
expect( clone.baseVersion ).to.equal( baseVersion );
|
|
|
} );
|
|
|
@@ -200,7 +231,8 @@ describe( 'SplitOperation', () => {
|
|
|
describe( 'toJSON', () => {
|
|
|
it( 'should create proper json object #1', () => {
|
|
|
const position = new Position( root, [ 0, 3 ] );
|
|
|
- const op = new SplitOperation( position, 2, null, doc.version );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+ const op = new SplitOperation( position, 2, insertionPosition, null, doc.version );
|
|
|
|
|
|
const serialized = op.toJSON();
|
|
|
|
|
|
@@ -208,14 +240,16 @@ describe( 'SplitOperation', () => {
|
|
|
__className: 'SplitOperation',
|
|
|
baseVersion: 0,
|
|
|
howMany: 2,
|
|
|
- position: op.position.toJSON(),
|
|
|
+ splitPosition: op.splitPosition.toJSON(),
|
|
|
+ insertionPosition: op.insertionPosition.toJSON(),
|
|
|
graveyardPosition: null
|
|
|
} );
|
|
|
} );
|
|
|
|
|
|
it( 'should create proper json object #2', () => {
|
|
|
const position = new Position( root, [ 0, 3 ] );
|
|
|
- const op = new SplitOperation( position, 2, gyPos, doc.version );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+ const op = new SplitOperation( position, 2, insertionPosition, gyPos, doc.version );
|
|
|
|
|
|
const serialized = op.toJSON();
|
|
|
|
|
|
@@ -223,7 +257,8 @@ describe( 'SplitOperation', () => {
|
|
|
__className: 'SplitOperation',
|
|
|
baseVersion: 0,
|
|
|
howMany: 2,
|
|
|
- position: op.position.toJSON(),
|
|
|
+ splitPosition: op.splitPosition.toJSON(),
|
|
|
+ insertionPosition: op.insertionPosition.toJSON(),
|
|
|
graveyardPosition: op.graveyardPosition.toJSON()
|
|
|
} );
|
|
|
} );
|
|
|
@@ -232,7 +267,8 @@ describe( 'SplitOperation', () => {
|
|
|
describe( 'fromJSON', () => {
|
|
|
it( 'should create proper SplitOperation from json object #1', () => {
|
|
|
const position = new Position( root, [ 0, 3 ] );
|
|
|
- const op = new SplitOperation( position, 2, null, doc.version );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+ const op = new SplitOperation( position, 2, insertionPosition, null, doc.version );
|
|
|
|
|
|
const serialized = op.toJSON();
|
|
|
|
|
|
@@ -243,7 +279,8 @@ describe( 'SplitOperation', () => {
|
|
|
|
|
|
it( 'should create proper SplitOperation from json object #2', () => {
|
|
|
const position = new Position( root, [ 0, 3 ] );
|
|
|
- const op = new SplitOperation( position, 2, gyPos, doc.version );
|
|
|
+ const insertionPosition = SplitOperation.getInsertionPosition( position );
|
|
|
+ const op = new SplitOperation( position, 2, insertionPosition, gyPos, doc.version );
|
|
|
|
|
|
const serialized = op.toJSON();
|
|
|
|