8
0

weakinsertdelta.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 Text from '../../../../src/model/text';
  9. import Position from '../../../../src/model/position';
  10. import Range from '../../../../src/model/range';
  11. import WeakInsertDelta from '../../../../src/model/delta/weakinsertdelta';
  12. import AttributeDelta from '../../../../src/model/delta/attributedelta';
  13. import InsertOperation from '../../../../src/model/operation/insertoperation';
  14. import AttributeOperation from '../../../../src/model/operation/attributeoperation';
  15. import {
  16. expectDelta,
  17. getFilledDocument,
  18. getAttributeDelta,
  19. getWeakInsertDelta
  20. } from '../../../../tests/model/delta/transform/_utils/utils';
  21. describe( 'transform', () => {
  22. let doc, root, baseVersion;
  23. beforeEach( () => {
  24. doc = getFilledDocument();
  25. root = doc.getRoot();
  26. baseVersion = doc.version;
  27. } );
  28. describe( 'AttributeDelta by', () => {
  29. let insertDelta;
  30. beforeEach( () => {
  31. const insertPosition = new Position( root, [ 3, 3, 0 ] );
  32. insertDelta = getWeakInsertDelta(
  33. insertPosition,
  34. [
  35. 'a',
  36. new Text( 'b', { key: 'new' } ),
  37. new Text( 'c', { key: 'different' } ),
  38. new Text( 'c', { key: 'different', key2: true } ),
  39. 'de'
  40. ],
  41. baseVersion
  42. );
  43. } );
  44. describe( 'WeakInsertDelta', () => {
  45. it( 'weak insert inside attribute range should "fix" splitting the range', () => {
  46. const attrRange = new Range( new Position( root, [ 3, 2 ] ), new Position( root, [ 3, 3, 3, 9 ] ) );
  47. const attrDelta = getAttributeDelta( attrRange, 'key', 'old', 'new', baseVersion );
  48. const transformed = transform( insertDelta, attrDelta );
  49. expect( transformed.length ).to.equal( 2 );
  50. baseVersion = attrDelta.operations.length;
  51. expectDelta( transformed[ 0 ], {
  52. type: WeakInsertDelta,
  53. operations: [
  54. {
  55. type: InsertOperation,
  56. position: new Position( root, [ 3, 3, 0 ] ),
  57. baseVersion
  58. }
  59. ]
  60. } );
  61. expectDelta( transformed[ 1 ], {
  62. type: AttributeDelta,
  63. operations: [
  64. {
  65. type: AttributeOperation,
  66. range: new Range( new Position( root, [ 3, 3, 0 ] ), new Position( root, [ 3, 3, 1 ] ) ),
  67. key: 'key',
  68. oldValue: null,
  69. newValue: 'new',
  70. baseVersion: baseVersion + 1
  71. },
  72. {
  73. type: AttributeOperation,
  74. range: new Range( new Position( root, [ 3, 3, 2 ] ), new Position( root, [ 3, 3, 4 ] ) ),
  75. key: 'key',
  76. oldValue: 'different',
  77. newValue: 'new',
  78. baseVersion: baseVersion + 2
  79. },
  80. {
  81. type: AttributeOperation,
  82. range: new Range( new Position( root, [ 3, 3, 4 ] ), new Position( root, [ 3, 3, 6 ] ) ),
  83. key: 'key',
  84. oldValue: null,
  85. newValue: 'new',
  86. baseVersion: baseVersion + 3
  87. }
  88. ]
  89. } );
  90. } );
  91. it( 'should be normally transformed if weak insert is not in the attribute range', () => {
  92. const attrRange = new Range( new Position( root, [ 5 ] ), new Position( root, [ 7 ] ) );
  93. const attrDelta = getAttributeDelta( attrRange, 'key', 'old', 'new', baseVersion );
  94. const transformed = transform( insertDelta, attrDelta );
  95. expect( transformed.length ).to.equal( 1 );
  96. baseVersion = attrDelta.operations.length;
  97. expectDelta( transformed[ 0 ], {
  98. type: WeakInsertDelta,
  99. operations: [
  100. {
  101. type: InsertOperation,
  102. position: new Position( root, [ 3, 3, 0 ] ),
  103. baseVersion
  104. }
  105. ]
  106. } );
  107. } );
  108. } );
  109. } );
  110. } );