attributedelta.js 4.0 KB

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