helpers.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. var Delta = require('../../lib/delta');
  2. describe('helpers', function () {
  3. describe('concat()', function () {
  4. it('empty delta', function () {
  5. var delta = new Delta().insert('Test');
  6. var concat = new Delta();
  7. var expected = new Delta().insert('Test');
  8. expect(delta.concat(concat)).toEqual(expected);
  9. });
  10. it('unmergeable', function () {
  11. var delta = new Delta().insert('Test');
  12. var original = new Delta(JSON.parse(JSON.stringify(delta)));
  13. var concat = new Delta().insert('!', { bold: true });
  14. var expected = new Delta().insert('Test').insert('!', { bold: true });
  15. expect(delta.concat(concat)).toEqual(expected);
  16. expect(delta).toEqual(original);
  17. });
  18. it('mergeable', function () {
  19. var delta = new Delta().insert('Test', { bold: true });
  20. var original = new Delta(JSON.parse(JSON.stringify(delta)));
  21. var concat = new Delta().insert('!', { bold: true }).insert('\n');
  22. var expected = new Delta().insert('Test!', { bold: true }).insert('\n');
  23. expect(delta.concat(concat)).toEqual(expected);
  24. expect(delta).toEqual(original);
  25. });
  26. });
  27. describe('chop()', function () {
  28. it('retain', function () {
  29. var delta = new Delta().insert('Test').retain(4);
  30. var expected = new Delta().insert('Test');
  31. expect(delta.chop()).toEqual(expected);
  32. });
  33. it('insert', function () {
  34. var delta = new Delta().insert('Test');
  35. var expected = new Delta().insert('Test');
  36. expect(delta.chop()).toEqual(expected);
  37. });
  38. it('formatted retain', function () {
  39. var delta = new Delta().insert('Test').retain(4, { bold: true });
  40. var expected = new Delta().insert('Test').retain(4, { bold: true });
  41. expect(delta.chop()).toEqual(expected);
  42. })
  43. });
  44. describe('eachLine()', function () {
  45. var spy = { predicate: function () {} };
  46. beforeEach(function () {
  47. spyOn(spy, 'predicate').and.callThrough();
  48. });
  49. it('expected', function () {
  50. var delta = new Delta().insert('Hello\n\n')
  51. .insert('World', { bold: true })
  52. .insert({ image: 'octocat.png' })
  53. .insert('\n', { align: 'right' })
  54. .insert('!');
  55. delta.eachLine(spy.predicate);
  56. expect(spy.predicate.calls.count()).toEqual(4);
  57. expect(spy.predicate.calls.argsFor(0)).toEqual([ new Delta().insert('Hello'), {}, 0 ]);
  58. expect(spy.predicate.calls.argsFor(1)).toEqual([ new Delta(), {}, 1 ]);
  59. expect(spy.predicate.calls.argsFor(2)).toEqual([
  60. new Delta().insert('World', { bold: true }).insert({ image: 'octocat.png' }),
  61. { align: 'right' },
  62. 2
  63. ]);
  64. expect(spy.predicate.calls.argsFor(3)).toEqual([ new Delta().insert('!'), {}, 3 ]);
  65. });
  66. it('trailing newline', function () {
  67. var delta = new Delta().insert('Hello\nWorld!\n');
  68. delta.eachLine(spy.predicate);
  69. expect(spy.predicate.calls.count()).toEqual(2);
  70. expect(spy.predicate.calls.argsFor(0)).toEqual([ new Delta().insert('Hello'), {}, 0 ]);
  71. expect(spy.predicate.calls.argsFor(1)).toEqual([ new Delta().insert('World!'), {}, 1 ]);
  72. });
  73. it('non-document', function () {
  74. var delta = new Delta().retain(1).delete(2);
  75. delta.eachLine(spy.predicate);
  76. expect(spy.predicate.calls.count()).toEqual(0);
  77. });
  78. it('early return', function () {
  79. var delta = new Delta().insert('Hello\nNew\nWorld!');
  80. var count = 0;
  81. var spy = {
  82. predicate: function() {
  83. if (count === 1) return false;
  84. count += 1;
  85. }
  86. };
  87. spyOn(spy, 'predicate').and.callThrough();
  88. delta.eachLine(spy.predicate);
  89. expect(spy.predicate.calls.count()).toEqual(2);
  90. });
  91. });
  92. describe('iteration', function () {
  93. beforeEach(function() {
  94. this.delta = new Delta().insert('Hello').insert({ image: true }).insert('World!');
  95. });
  96. it('filter()', function () {
  97. var arr = this.delta.filter(function (op) {
  98. return typeof op.insert === 'string';
  99. });
  100. expect(arr.length).toEqual(2);
  101. })
  102. it('forEach()', function () {
  103. var spy = { predicate: function () {} };
  104. spyOn(spy, 'predicate').and.callThrough();
  105. this.delta.forEach(spy.predicate);
  106. expect(spy.predicate.calls.count()).toEqual(3);
  107. });
  108. it('map()', function () {
  109. var arr = this.delta.map(function (op) {
  110. return typeof op.insert === 'string' ? op.insert : '';
  111. });
  112. expect(arr).toEqual(['Hello', '', 'World!']);
  113. });
  114. it('partition()', function () {
  115. var arr = this.delta.partition(function (op) {
  116. return typeof op.insert === 'string';
  117. });
  118. var passed = arr[0], failed = arr[1];
  119. expect(passed).toEqual([this.delta.ops[0], this.delta.ops[2]]);
  120. expect(failed).toEqual([this.delta.ops[1]]);
  121. });
  122. });
  123. describe('length()', function () {
  124. it('document', function () {
  125. var delta = new Delta().insert('AB', { bold: true }).insert(1);
  126. expect(delta.length()).toEqual(3);
  127. });
  128. it('mixed', function () {
  129. var delta = new Delta().insert('AB', { bold: true }).insert(1).retain(2, { bold: null }).delete(1);
  130. expect(delta.length()).toEqual(6);
  131. });
  132. });
  133. describe('changeLength()', function () {
  134. it('mixed', function () {
  135. var delta = new Delta().insert('AB', { bold: true }).retain(2, { bold: null }).delete(1);
  136. expect(delta.changeLength()).toEqual(1);
  137. });
  138. });
  139. describe('slice()', function () {
  140. it('start', function () {
  141. var slice = new Delta().retain(2).insert('A').slice(2);
  142. var expected = new Delta().insert('A');
  143. expect(slice).toEqual(expected);
  144. });
  145. it('start and end chop', function () {
  146. var slice = new Delta().insert('0123456789').slice(2, 7);
  147. var expected = new Delta().insert('23456');
  148. expect(slice).toEqual(expected);
  149. });
  150. it('start and end multiple chop', function () {
  151. var slice = new Delta().insert('0123', { bold: true }).insert('4567').slice(3, 5);
  152. var expected = new Delta().insert('3', { bold: true }).insert('4');
  153. expect(slice).toEqual(expected);
  154. });
  155. it('start and end', function () {
  156. var slice = new Delta().retain(2).insert('A', { bold: true }).insert('B').slice(2, 3);
  157. var expected = new Delta().insert('A', { bold: true });
  158. expect(slice).toEqual(expected);
  159. });
  160. it('no params', function () {
  161. var delta = new Delta().retain(2).insert('A', { bold: true }).insert('B');
  162. var slice = delta.slice();
  163. expect(slice).toEqual(delta);
  164. });
  165. it('split ops', function () {
  166. var slice = new Delta().insert('AB', { bold: true }).insert('C').slice(1, 2);
  167. var expected = new Delta().insert('B', { bold: true });
  168. expect(slice).toEqual(expected);
  169. });
  170. it('split ops multiple times', function () {
  171. var slice = new Delta().insert('ABC', { bold: true }).insert('D').slice(1, 2);
  172. var expected = new Delta().insert('B', { bold: true });
  173. expect(slice).toEqual(expected);
  174. });
  175. });
  176. });