8
0

weakinsertdelta.js 3.8 KB

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