compose.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. var Delta = require('../../lib/delta');
  2. describe('compose()', function () {
  3. it('insert + insert', function () {
  4. var a = new Delta().insert('A');
  5. var b = new Delta().insert('B');
  6. var expected = new Delta().insert('B').insert('A');
  7. expect(a.compose(b)).toEqual(expected);
  8. });
  9. it('insert + retain', function () {
  10. var a = new Delta().insert('A');
  11. var b = new Delta().retain(1, { bold: true, color: 'red', font: null });
  12. var expected = new Delta().insert('A', { bold: true, color: 'red' });
  13. expect(a.compose(b)).toEqual(expected);
  14. });
  15. it('insert + delete', function () {
  16. var a = new Delta().insert('A');
  17. var b = new Delta().delete(1);
  18. var expected = new Delta();
  19. expect(a.compose(b)).toEqual(expected);
  20. });
  21. it('delete + insert', function () {
  22. var a = new Delta().delete(1);
  23. var b = new Delta().insert('B');
  24. var expected = new Delta().insert('B').delete(1);
  25. expect(a.compose(b)).toEqual(expected);
  26. });
  27. it('delete + retain', function () {
  28. var a = new Delta().delete(1);
  29. var b = new Delta().retain(1, { bold: true, color: 'red' });
  30. var expected = new Delta().delete(1).retain(1, { bold: true, color: 'red' });
  31. expect(a.compose(b)).toEqual(expected);
  32. });
  33. it('delete + delete', function () {
  34. var a = new Delta().delete(1);
  35. var b = new Delta().delete(1);
  36. var expected = new Delta().delete(2);
  37. expect(a.compose(b)).toEqual(expected);
  38. });
  39. it('retain + insert', function () {
  40. var a = new Delta().retain(1, { color: 'blue' });
  41. var b = new Delta().insert('B');
  42. var expected = new Delta().insert('B').retain(1, { color: 'blue' });
  43. expect(a.compose(b)).toEqual(expected);
  44. });
  45. it('retain + retain', function () {
  46. var a = new Delta().retain(1, { color: 'blue' });
  47. var b = new Delta().retain(1, { bold: true, color: 'red', font: null });
  48. var expected = new Delta().retain(1, { bold: true, color: 'red', font: null });
  49. expect(a.compose(b)).toEqual(expected);
  50. });
  51. it('retain + delete', function () {
  52. var a = new Delta().retain(1, { color: 'blue' });
  53. var b = new Delta().delete(1);
  54. var expected = new Delta().delete(1);
  55. expect(a.compose(b)).toEqual(expected);
  56. });
  57. it('insert in middle of text', function () {
  58. var a = new Delta().insert('Hello');
  59. var b = new Delta().retain(3).insert('X');
  60. var expected = new Delta().insert('HelXlo');
  61. expect(a.compose(b)).toEqual(expected);
  62. });
  63. it('insert and delete ordering', function () {
  64. var a = new Delta().insert('Hello');
  65. var b = new Delta().insert('Hello');
  66. var insertFirst = new Delta().retain(3).insert('X').delete(1);
  67. var deleteFirst = new Delta().retain(3).delete(1).insert('X');
  68. var expected = new Delta().insert('HelXo');
  69. expect(a.compose(insertFirst)).toEqual(expected);
  70. expect(b.compose(deleteFirst)).toEqual(expected);
  71. });
  72. it('insert embed', function () {
  73. var a = new Delta().insert(1, { src: 'http://quilljs.com/image.png' });
  74. var b = new Delta().retain(1, { alt: 'logo' });
  75. var expected = new Delta().insert(1, { src: 'http://quilljs.com/image.png', alt: 'logo' });
  76. expect(a.compose(b)).toEqual(expected);
  77. });
  78. it('delete entire text', function () {
  79. var a = new Delta().retain(4).insert('Hello');
  80. var b = new Delta().delete(9);
  81. var expected = new Delta().delete(4);
  82. expect(a.compose(b)).toEqual(expected);
  83. });
  84. it('retain more than length of text', function () {
  85. var a = new Delta().insert('Hello');
  86. var b = new Delta().retain(10);
  87. var expected = new Delta().insert('Hello');
  88. expect(a.compose(b)).toEqual(expected);
  89. });
  90. it('retain empty embed', function () {
  91. var a = new Delta().insert(1);
  92. var b = new Delta().retain(1);
  93. var expected = new Delta().insert(1);
  94. expect(a.compose(b)).toEqual(expected);
  95. });
  96. it('remove all attributes', function () {
  97. var a = new Delta().insert('A', { bold: true });
  98. var b = new Delta().retain(1, { bold: null });
  99. var expected = new Delta().insert('A');
  100. expect(a.compose(b)).toEqual(expected);
  101. });
  102. it('remove all embed attributes', function () {
  103. var a = new Delta().insert(2, { bold: true });
  104. var b = new Delta().retain(1, { bold: null });
  105. var expected = new Delta().insert(2);
  106. expect(a.compose(b)).toEqual(expected);
  107. });
  108. it('immutability', function () {
  109. var attr1 = { bold: true };
  110. var attr2 = { bold: true };
  111. var a1 = new Delta().insert('Test', attr1);
  112. var a2 = new Delta().insert('Test', attr1);
  113. var b1 = new Delta().retain(1, { color: 'red' }).delete(2);
  114. var b2 = new Delta().retain(1, { color: 'red' }).delete(2);
  115. var expected = new Delta().insert('T', { color: 'red', bold: true }).insert('t', attr1);
  116. expect(a1.compose(b1)).toEqual(expected);
  117. expect(a1).toEqual(a2);
  118. expect(b1).toEqual(b2);
  119. expect(attr1).toEqual(attr2);
  120. });
  121. it('retain start optimization', function () {
  122. var a = new Delta().insert('A', { bold: true })
  123. .insert('B')
  124. .insert('C', { bold: true })
  125. .delete(1);
  126. var b = new Delta().retain(3).insert('D');
  127. var expected = new Delta().insert('A', { bold: true })
  128. .insert('B')
  129. .insert('C', { bold: true })
  130. .insert('D')
  131. .delete(1);
  132. expect(a.compose(b)).toEqual(expected);
  133. });
  134. it('retain start optimization split', function () {
  135. var a = new Delta().insert('A', { bold: true })
  136. .insert('B')
  137. .insert('C', { bold: true })
  138. .retain(5)
  139. .delete(1);
  140. var b = new Delta().retain(4).insert('D');
  141. var expected = new Delta().insert('A', { bold: true })
  142. .insert('B')
  143. .insert('C', { bold: true })
  144. .retain(1)
  145. .insert('D')
  146. .retain(4)
  147. .delete(1);
  148. expect(a.compose(b)).toEqual(expected);
  149. });
  150. it('retain end optimization', function () {
  151. var a = new Delta().insert('A', { bold: true })
  152. .insert('B')
  153. .insert('C', { bold: true });
  154. var b = new Delta().delete(1);
  155. var expected = new Delta().insert('B').insert('C', { bold: true })
  156. expect(a.compose(b)).toEqual(expected);
  157. });
  158. it('retain end optimization join', function () {
  159. var a = new Delta().insert('A', { bold: true })
  160. .insert('B')
  161. .insert('C', { bold: true })
  162. .insert('D')
  163. .insert('E', { bold: true })
  164. .insert('F')
  165. var b = new Delta().retain(1).delete(1);
  166. var expected = new Delta().insert('AC', { bold: true })
  167. .insert('D')
  168. .insert('E', { bold: true })
  169. .insert('F')
  170. expect(a.compose(b)).toEqual(expected);
  171. });
  172. });