@@ -18,6 +18,7 @@ import MarkerOperation from '../../../src/model/operation/markeroperation';
1818import MoveOperation from '../../../src/model/operation/moveoperation' ;
1919import RemoveOperation from '../../../src/model/operation/removeoperation' ;
2020import RenameOperation from '../../../src/model/operation/renameoperation' ;
21+ import ReinsertOperation from '../../../src/model/operation/reinsertoperation' ;
2122import NoOperation from '../../../src/model/operation/nooperation' ;
2223
2324describe ( 'transform' , ( ) => {
@@ -2771,7 +2772,7 @@ describe( 'transform', () => {
27712772 } ) ;
27722773
27732774 describe ( 'by MoveOperation' , ( ) => {
2774- it ( 'should create not more than RemoveOperation that needs new graveyard holder' , ( ) => {
2775+ it ( 'should create not more than one RemoveOperation that needs new graveyard holder' , ( ) => {
27752776 let op = new RemoveOperation ( new Position ( root , [ 1 ] ) , 4 , baseVersion ) ;
27762777 let transformBy = new MoveOperation ( new Position ( root , [ 0 ] ) , 2 , new Position ( root , [ 8 ] ) , baseVersion ) ;
27772778
@@ -2796,6 +2797,28 @@ describe( 'transform', () => {
27962797 expect ( transOp [ 0 ] . _needsHolderElement ) . to . be . false ;
27972798 expect ( transOp [ 1 ] . _needsHolderElement ) . to . be . false ;
27982799 } ) ;
2800+
2801+ it ( 'should force removing content even if was less important' , ( ) => {
2802+ let op = new RemoveOperation ( new Position ( root , [ 8 ] ) , 2 , baseVersion ) ;
2803+
2804+ const targetPosition = Position . createFromPosition ( op . targetPosition ) ;
2805+
2806+ let transformBy = new MoveOperation ( new Position ( root , [ 8 ] ) , 2 , new Position ( root , [ 1 ] ) , baseVersion ) ;
2807+
2808+ const sourcePosition = Position . createFromPosition ( transformBy . targetPosition ) ;
2809+
2810+ let transOp = transform ( op , transformBy , false ) ;
2811+
2812+ expect ( transOp . length ) . to . equal ( 1 ) ;
2813+
2814+ expectOperation ( transOp [ 0 ] , {
2815+ type : RemoveOperation ,
2816+ howMany : 2 ,
2817+ sourcePosition : sourcePosition ,
2818+ targetPosition : targetPosition ,
2819+ baseVersion : baseVersion + 1
2820+ } ) ;
2821+ } ) ;
27992822 } ) ;
28002823
28012824 describe ( 'by RemoveOperation' , ( ) => {
@@ -2835,6 +2858,47 @@ describe( 'transform', () => {
28352858 } ) ;
28362859 } ) ;
28372860
2861+ describe ( 'ReinsertOperation' , ( ) => {
2862+ describe ( 'by RemoveOperation' , ( ) => {
2863+ it ( 'should update sourcePosition if remove operation inserted holder offset before reinsert operation holder' , ( ) => {
2864+ let position = new Position ( root , [ 2 , 1 ] ) ;
2865+ let transformBy = new RemoveOperation ( position , 3 , baseVersion ) ;
2866+ let op = new ReinsertOperation ( new Position ( doc . graveyard , [ 0 , 0 ] ) , 3 , position , baseVersion ) ;
2867+
2868+ let transOp = transform ( op , transformBy ) ;
2869+
2870+ expect ( transOp . length ) . to . equal ( 1 ) ;
2871+
2872+ expectOperation ( transOp [ 0 ] , {
2873+ type : ReinsertOperation ,
2874+ howMany : 3 ,
2875+ sourcePosition : new Position ( doc . graveyard , [ 1 , 0 ] ) ,
2876+ targetPosition : position ,
2877+ baseVersion : baseVersion + 1
2878+ } ) ;
2879+ } ) ;
2880+
2881+ it ( 'should not update sourcePosition if remove operation inserted holder offset after reinsert operation source' , ( ) => {
2882+ let position = new Position ( root , [ 2 , 1 ] ) ;
2883+ let transformBy = new RemoveOperation ( position , 3 , baseVersion ) ;
2884+ transformBy . targetPosition = new Position ( doc . graveyard , [ 3 , 0 ] ) ;
2885+ let op = new ReinsertOperation ( new Position ( doc . graveyard , [ 2 , 0 ] ) , 3 , position , baseVersion ) ;
2886+
2887+ let transOp = transform ( op , transformBy ) ;
2888+
2889+ expect ( transOp . length ) . to . equal ( 1 ) ;
2890+
2891+ expectOperation ( transOp [ 0 ] , {
2892+ type : ReinsertOperation ,
2893+ howMany : 3 ,
2894+ sourcePosition : new Position ( doc . graveyard , [ 2 , 0 ] ) ,
2895+ targetPosition : position ,
2896+ baseVersion : baseVersion + 1
2897+ } ) ;
2898+ } ) ;
2899+ } ) ;
2900+ } ) ;
2901+
28382902 describe ( 'NoOperation' , ( ) => {
28392903 beforeEach ( ( ) => {
28402904 op = new NoOperation ( baseVersion ) ;
0 commit comments