transform.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. var Delta = require('../../lib/delta');
  2. describe('transform()', function () {
  3. it('insert + insert', function () {
  4. var a1 = new Delta().insert('A');
  5. var b1 = new Delta().insert('B');
  6. var a2 = new Delta(a1);
  7. var b2 = new Delta(b1);
  8. var expected1 = new Delta().retain(1).insert('B');
  9. var expected2 = new Delta().insert('B');
  10. expect(a1.transform(b1, true)).toEqual(expected1);
  11. expect(a2.transform(b2, false)).toEqual(expected2);
  12. });
  13. it('insert + retain', function () {
  14. var a = new Delta().insert('A');
  15. var b = new Delta().retain(1, { bold: true, color: 'red' });
  16. var expected = new Delta().retain(1).retain(1, { bold: true, color: 'red' });
  17. expect(a.transform(b, true)).toEqual(expected);
  18. });
  19. it('insert + delete', function () {
  20. var a = new Delta().insert('A');
  21. var b = new Delta().delete(1);
  22. var expected = new Delta().retain(1).delete(1);
  23. expect(a.transform(b, true)).toEqual(expected);
  24. });
  25. it('delete + insert', function () {
  26. var a = new Delta().delete(1);
  27. var b = new Delta().insert('B');
  28. var expected = new Delta().insert('B');
  29. expect(a.transform(b, true)).toEqual(expected);
  30. });
  31. it('delete + retain', function () {
  32. var a = new Delta().delete(1);
  33. var b = new Delta().retain(1, { bold: true, color: 'red' });
  34. var expected = new Delta();
  35. expect(a.transform(b, true)).toEqual(expected);
  36. });
  37. it('delete + delete', function () {
  38. var a = new Delta().delete(1);
  39. var b = new Delta().delete(1);
  40. var expected = new Delta();
  41. expect(a.transform(b, true)).toEqual(expected);
  42. });
  43. it('retain + insert', function () {
  44. var a = new Delta().retain(1, { color: 'blue' });
  45. var b = new Delta().insert('B');
  46. var expected = new Delta().insert('B');
  47. expect(a.transform(b, true)).toEqual(expected);
  48. });
  49. it('retain + retain', function () {
  50. var a1 = new Delta().retain(1, { color: 'blue' });
  51. var b1 = new Delta().retain(1, { bold: true, color: 'red' });
  52. var a2 = new Delta().retain(1, { color: 'blue' });
  53. var b2 = new Delta().retain(1, { bold: true, color: 'red' });
  54. var expected1 = new Delta().retain(1, { bold: true });
  55. var expected2 = new Delta();
  56. expect(a1.transform(b1, true)).toEqual(expected1);
  57. expect(b2.transform(a2, true)).toEqual(expected2);
  58. });
  59. it('retain + retain without priority', function () {
  60. var a1 = new Delta().retain(1, { color: 'blue' });
  61. var b1 = new Delta().retain(1, { bold: true, color: 'red' });
  62. var a2 = new Delta().retain(1, { color: 'blue' });
  63. var b2 = new Delta().retain(1, { bold: true, color: 'red' });
  64. var expected1 = new Delta().retain(1, { bold: true, color: 'red' });
  65. var expected2 = new Delta().retain(1, { color: 'blue' });
  66. expect(a1.transform(b1, false)).toEqual(expected1);
  67. expect(b2.transform(a2, false)).toEqual(expected2);
  68. });
  69. it('retain + delete', function () {
  70. var a = new Delta().retain(1, { color: 'blue' });
  71. var b = new Delta().delete(1);
  72. var expected = new Delta().delete(1);
  73. expect(a.transform(b, true)).toEqual(expected);
  74. });
  75. it('alternating edits', function () {
  76. var a1 = new Delta().retain(2).insert('si').delete(5);
  77. var b1 = new Delta().retain(1).insert('e').delete(5).retain(1).insert('ow');
  78. var a2 = new Delta(a1);
  79. var b2 = new Delta(b1);
  80. var expected1 = new Delta().retain(1).insert('e').delete(1).retain(2).insert('ow');
  81. var expected2 = new Delta().retain(2).insert('si').delete(1);
  82. expect(a1.transform(b1, false)).toEqual(expected1);
  83. expect(b2.transform(a2, false)).toEqual(expected2);
  84. });
  85. it('conflicting appends', function () {
  86. var a1 = new Delta().retain(3).insert('aa');
  87. var b1 = new Delta().retain(3).insert('bb');
  88. var a2 = new Delta(a1);
  89. var b2 = new Delta(b1);
  90. var expected1 = new Delta().retain(5).insert('bb');
  91. var expected2 = new Delta().retain(3).insert('aa');
  92. expect(a1.transform(b1, true)).toEqual(expected1);
  93. expect(b2.transform(a2, false)).toEqual(expected2);
  94. });
  95. it('prepend + append', function () {
  96. var a1 = new Delta().insert('aa');
  97. var b1 = new Delta().retain(3).insert('bb');
  98. var expected1 = new Delta().retain(5).insert('bb');
  99. var a2 = new Delta(a1);
  100. var b2 = new Delta(b1);
  101. var expected2 = new Delta().insert('aa');
  102. expect(a1.transform(b1, false)).toEqual(expected1);
  103. expect(b2.transform(a2, false)).toEqual(expected2);
  104. });
  105. it('trailing deletes with differing lengths', function () {
  106. var a1 = new Delta().retain(2).delete(1);
  107. var b1 = new Delta().delete(3);
  108. var expected1 = new Delta().delete(2);
  109. var a2 = new Delta(a1);
  110. var b2 = new Delta(b1);
  111. var expected2 = new Delta();
  112. expect(a1.transform(b1, false)).toEqual(expected1);
  113. expect(b2.transform(a2, false)).toEqual(expected2);
  114. });
  115. it('immutability', function () {
  116. var a1 = new Delta().insert('A');
  117. var a2 = new Delta().insert('A');
  118. var b1 = new Delta().insert('B');
  119. var b2 = new Delta().insert('B');
  120. var expected = new Delta().retain(1).insert('B');
  121. expect(a1.transform(b1, true)).toEqual(expected);
  122. expect(a1).toEqual(a2);
  123. expect(b1).toEqual(b2);
  124. });
  125. });