weakinsertdelta.js 3.6 KB

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