attributedelta.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. /* bender-tags: model, operation */
  6. import transformations from '/ckeditor5/engine/model/delta/basic-transformations.js';
  7. /*jshint unused: false*/
  8. import transform from '/ckeditor5/engine/model/delta/transform.js';
  9. import Text from '/ckeditor5/engine/model/text.js';
  10. import Position from '/ckeditor5/engine/model/position.js';
  11. import Range from '/ckeditor5/engine/model/range.js';
  12. import AttributeDelta from '/ckeditor5/engine/model/delta/attributedelta.js';
  13. import AttributeOperation from '/ckeditor5/engine/model/operation/attributeoperation.js';
  14. import {
  15. expectDelta,
  16. getFilledDocument,
  17. getAttributeDelta,
  18. getWeakInsertDelta,
  19. } from '/tests/engine/model/delta/transform/_utils/utils.js';
  20. describe( 'transform', () => {
  21. let doc, root, baseVersion;
  22. beforeEach( () => {
  23. doc = getFilledDocument();
  24. root = doc.getRoot();
  25. baseVersion = doc.version;
  26. } );
  27. describe( 'AttributeDelta by', () => {
  28. let attrDelta;
  29. beforeEach( () => {
  30. let attrRange = new Range( new Position( root, [ 3, 2 ] ), new Position( root, [ 3, 3, 3, 9 ] ) );
  31. attrDelta = getAttributeDelta( attrRange, 'key', 'old', 'new', baseVersion );
  32. } );
  33. describe( 'WeakInsertDelta', () => {
  34. it( 'weak insert inside attribute range should "fix" splitting the range', () => {
  35. let insertPosition = new Position( root, [ 3, 3, 0 ] );
  36. let insertDelta = getWeakInsertDelta(
  37. insertPosition,
  38. [
  39. 'a',
  40. new Text( 'b', { key: 'new' } ),
  41. new Text( 'c', { key: 'different' } ),
  42. 'de'
  43. ],
  44. baseVersion
  45. );
  46. let transformed = transform( attrDelta, insertDelta );
  47. expect( transformed.length ).to.equal( 2 );
  48. baseVersion = insertDelta.operations.length;
  49. expectDelta( transformed[ 0 ], {
  50. type: AttributeDelta,
  51. operations: [
  52. {
  53. type: AttributeOperation,
  54. range: new Range( new Position( root, [ 3, 3, 5 ] ), new Position( root, [ 3, 3, 8, 9 ] ) ),
  55. key: 'key',
  56. oldValue: 'old',
  57. newValue: 'new',
  58. baseVersion: baseVersion
  59. },
  60. {
  61. type: AttributeOperation,
  62. range: new Range( new Position( root, [ 3, 2 ] ), new Position( root, [ 3, 3, 0 ] ) ),
  63. key: 'key',
  64. oldValue: 'old',
  65. newValue: 'new',
  66. baseVersion: baseVersion + 1
  67. }
  68. ]
  69. } );
  70. expectDelta( transformed[ 1 ], {
  71. type: AttributeDelta,
  72. operations: [
  73. {
  74. type: AttributeOperation,
  75. range: new Range( new Position( root, [ 3, 3, 0 ] ), new Position( root, [ 3, 3, 1 ] ) ),
  76. key: 'key',
  77. oldValue: undefined,
  78. newValue: 'new',
  79. baseVersion: baseVersion + 2
  80. },
  81. {
  82. type: AttributeOperation,
  83. range: new Range( new Position( root, [ 3, 3, 2 ] ), new Position( root, [ 3, 3, 3 ] ) ),
  84. key: 'key',
  85. oldValue: 'different',
  86. newValue: 'new',
  87. baseVersion: baseVersion + 3
  88. },
  89. {
  90. type: AttributeOperation,
  91. range: new Range( new Position( root, [ 3, 3, 3 ] ), new Position( root, [ 3, 3, 5 ] ) ),
  92. key: 'key',
  93. oldValue: undefined,
  94. newValue: 'new',
  95. baseVersion: baseVersion + 4
  96. }
  97. ]
  98. } );
  99. } );
  100. it( 'should be normally transformed if weak insert is not in the attribute range', () => {
  101. let insertPosition = new Position( root, [ 5 ] );
  102. let insertDelta = getWeakInsertDelta( insertPosition, 'abc', baseVersion );
  103. let transformed = transform( attrDelta, insertDelta );
  104. expect( transformed.length ).to.equal( 1 );
  105. baseVersion = insertDelta.operations.length;
  106. expectDelta( transformed[ 0 ], {
  107. type: AttributeDelta,
  108. operations: [
  109. {
  110. type: AttributeOperation,
  111. range: new Range( new Position( root, [ 3, 2 ] ), new Position( root, [ 3, 3, 3, 9 ] ) ),
  112. key: 'key',
  113. oldValue: 'old',
  114. newValue: 'new',
  115. baseVersion: baseVersion
  116. }
  117. ]
  118. } );
  119. } );
  120. } );
  121. } );
  122. } );