renamedelta.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /**
  2. * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import transformations from '../../../../src/model/delta/basic-transformations'; // eslint-disable-line no-unused-vars
  6. import deltaTransform from '../../../../src/model/delta/transform';
  7. const transform = deltaTransform.transform;
  8. import Element from '../../../../src/model/element';
  9. import Position from '../../../../src/model/position';
  10. import RenameDelta from '../../../../src/model/delta/renamedelta';
  11. import Delta from '../../../../src/model/delta/delta';
  12. import RenameOperation from '../../../../src/model/operation/renameoperation';
  13. import NoOperation from '../../../../src/model/operation/nooperation';
  14. import {
  15. getFilledDocument,
  16. expectDelta,
  17. getSplitDelta
  18. } from '../../../../tests/model/delta/transform/_utils/utils';
  19. describe( 'transform', () => {
  20. let doc, root, baseVersion, context;
  21. beforeEach( () => {
  22. doc = getFilledDocument();
  23. root = doc.getRoot();
  24. baseVersion = doc.version;
  25. context = { isStrong: false };
  26. } );
  27. describe( 'RenameDelta by', () => {
  28. describe( 'SplitDelta', () => {
  29. it( 'split element is renamed', () => {
  30. const renameDelta = new RenameDelta();
  31. renameDelta.addOperation( new RenameOperation(
  32. new Position( root, [ 3, 3 ] ),
  33. 'p',
  34. 'li',
  35. baseVersion
  36. ) );
  37. const splitPosition = new Position( root, [ 3, 3, 3 ] );
  38. const splitDelta = getSplitDelta( splitPosition, new Element( 'p' ), 9, baseVersion );
  39. const transformed = transform( renameDelta, splitDelta, context );
  40. baseVersion = splitDelta.length;
  41. expect( transformed.length ).to.equal( 2 );
  42. expectDelta( transformed[ 0 ], {
  43. type: RenameDelta,
  44. operations: [
  45. {
  46. type: RenameOperation,
  47. oldName: 'p',
  48. newName: 'li',
  49. position: new Position( root, [ 3, 3 ] )
  50. }
  51. ]
  52. } );
  53. expectDelta( transformed[ 1 ], {
  54. type: RenameDelta,
  55. operations: [
  56. {
  57. type: RenameOperation,
  58. oldName: 'p',
  59. newName: 'li',
  60. position: new Position( root, [ 3, 4 ] )
  61. }
  62. ]
  63. } );
  64. } );
  65. it( 'split element is different than renamed element', () => {
  66. const renameDelta = new RenameDelta();
  67. renameDelta.addOperation( new RenameOperation(
  68. new Position( root, [ 3, 3 ] ),
  69. 'p',
  70. 'li',
  71. baseVersion
  72. ) );
  73. const splitPosition = new Position( root, [ 3, 2, 1 ] );
  74. const splitDelta = getSplitDelta( splitPosition, new Element( 'p' ), 9, baseVersion );
  75. const transformed = transform( renameDelta, splitDelta, context );
  76. baseVersion = splitDelta.length;
  77. expect( transformed.length ).to.equal( 1 );
  78. expectDelta( transformed[ 0 ], {
  79. type: RenameDelta,
  80. operations: [
  81. {
  82. type: RenameOperation,
  83. oldName: 'p',
  84. newName: 'li',
  85. position: new Position( root, [ 3, 4 ] )
  86. }
  87. ]
  88. } );
  89. } );
  90. } );
  91. describe( 'RenameDelta', () => {
  92. it( 'should be transformed to NoDelta if its operation is transformed to NoOperation', () => {
  93. const renameDeltaA = new RenameDelta();
  94. const renameDeltaB = new RenameDelta();
  95. const op = new RenameOperation( new Position( root, [ 3 ] ), 'p', 'li', baseVersion );
  96. renameDeltaA.addOperation( op );
  97. renameDeltaB.addOperation( op.clone() );
  98. const transformed = transform( renameDeltaA, renameDeltaB, context );
  99. expect( transformed.length ).to.equal( 1 );
  100. expectDelta( transformed[ 0 ], {
  101. type: Delta,
  102. operations: [
  103. {
  104. type: NoOperation,
  105. baseVersion: 1
  106. }
  107. ]
  108. } );
  109. } );
  110. } );
  111. } );
  112. } );