| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | var Delta = require('../../lib/delta');describe('compose()', function () {  it('insert + insert', function () {    var a = new Delta().insert('A');    var b = new Delta().insert('B');    var expected = new Delta().insert('B').insert('A');    expect(a.compose(b)).toEqual(expected);  });  it('insert + retain', function () {    var a = new Delta().insert('A');    var b = new Delta().retain(1, { bold: true, color: 'red', font: null });    var expected = new Delta().insert('A', { bold: true, color: 'red' });    expect(a.compose(b)).toEqual(expected);  });  it('insert + delete', function () {    var a = new Delta().insert('A');    var b = new Delta().delete(1);    var expected = new Delta();    expect(a.compose(b)).toEqual(expected);  });  it('delete + insert', function () {    var a = new Delta().delete(1);    var b = new Delta().insert('B');    var expected = new Delta().insert('B').delete(1);    expect(a.compose(b)).toEqual(expected);  });  it('delete + retain', function () {    var a = new Delta().delete(1);    var b = new Delta().retain(1, { bold: true, color: 'red' });    var expected = new Delta().delete(1).retain(1, { bold: true, color: 'red' });    expect(a.compose(b)).toEqual(expected);  });  it('delete + delete', function () {    var a = new Delta().delete(1);    var b = new Delta().delete(1);    var expected = new Delta().delete(2);    expect(a.compose(b)).toEqual(expected);  });  it('retain + insert', function () {    var a = new Delta().retain(1, { color: 'blue' });    var b = new Delta().insert('B');    var expected = new Delta().insert('B').retain(1, { color: 'blue' });    expect(a.compose(b)).toEqual(expected);  });  it('retain + retain', function () {    var a = new Delta().retain(1, { color: 'blue' });    var b = new Delta().retain(1, { bold: true, color: 'red', font: null });    var expected = new Delta().retain(1, { bold: true, color: 'red', font: null });    expect(a.compose(b)).toEqual(expected);  });  it('retain + delete', function () {    var a = new Delta().retain(1, { color: 'blue' });    var b = new Delta().delete(1);    var expected = new Delta().delete(1);    expect(a.compose(b)).toEqual(expected);  });  it('insert in middle of text', function () {    var a = new Delta().insert('Hello');    var b = new Delta().retain(3).insert('X');    var expected = new Delta().insert('HelXlo');    expect(a.compose(b)).toEqual(expected);  });  it('insert and delete ordering', function () {    var a = new Delta().insert('Hello');    var b = new Delta().insert('Hello');    var insertFirst = new Delta().retain(3).insert('X').delete(1);    var deleteFirst = new Delta().retain(3).delete(1).insert('X');    var expected = new Delta().insert('HelXo');    expect(a.compose(insertFirst)).toEqual(expected);    expect(b.compose(deleteFirst)).toEqual(expected);  });  it('insert embed', function () {    var a = new Delta().insert(1, { src: 'http://quilljs.com/image.png' });    var b = new Delta().retain(1, { alt: 'logo' });    var expected = new Delta().insert(1, { src: 'http://quilljs.com/image.png', alt: 'logo' });    expect(a.compose(b)).toEqual(expected);  });  it('delete entire text', function () {    var a = new Delta().retain(4).insert('Hello');    var b = new Delta().delete(9);    var expected = new Delta().delete(4);    expect(a.compose(b)).toEqual(expected);  });  it('retain more than length of text', function () {    var a = new Delta().insert('Hello');    var b = new Delta().retain(10);    var expected = new Delta().insert('Hello');    expect(a.compose(b)).toEqual(expected);  });  it('retain empty embed', function () {    var a = new Delta().insert(1);    var b = new Delta().retain(1);    var expected = new Delta().insert(1);    expect(a.compose(b)).toEqual(expected);  });  it('remove all attributes', function () {    var a = new Delta().insert('A', { bold: true });    var b = new Delta().retain(1, { bold: null });    var expected = new Delta().insert('A');    expect(a.compose(b)).toEqual(expected);  });  it('remove all embed attributes', function () {    var a = new Delta().insert(2, { bold: true });    var b = new Delta().retain(1, { bold: null });    var expected = new Delta().insert(2);    expect(a.compose(b)).toEqual(expected);  });  it('immutability', function () {    var attr1 = { bold: true };    var attr2 = { bold: true };    var a1 = new Delta().insert('Test', attr1);    var a2 = new Delta().insert('Test', attr1);    var b1 = new Delta().retain(1, { color: 'red' }).delete(2);    var b2 = new Delta().retain(1, { color: 'red' }).delete(2);    var expected = new Delta().insert('T', { color: 'red', bold: true }).insert('t', attr1);    expect(a1.compose(b1)).toEqual(expected);    expect(a1).toEqual(a2);    expect(b1).toEqual(b2);    expect(attr1).toEqual(attr2);  });  it('retain start optimization', function () {    var a = new Delta().insert('A', { bold: true })                       .insert('B')                       .insert('C', { bold: true })                       .delete(1);    var b = new Delta().retain(3).insert('D');    var expected = new Delta().insert('A', { bold: true })                              .insert('B')                              .insert('C', { bold: true })                              .insert('D')                              .delete(1);    expect(a.compose(b)).toEqual(expected);  });  it('retain start optimization split', function () {    var a = new Delta().insert('A', { bold: true })                       .insert('B')                       .insert('C', { bold: true })                       .retain(5)                       .delete(1);    var b = new Delta().retain(4).insert('D');    var expected = new Delta().insert('A', { bold: true })                              .insert('B')                              .insert('C', { bold: true })                              .retain(1)                              .insert('D')                              .retain(4)                              .delete(1);    expect(a.compose(b)).toEqual(expected);  });  it('retain end optimization', function () {    var a = new Delta().insert('A', { bold: true })                       .insert('B')                       .insert('C', { bold: true });    var b = new Delta().delete(1);    var expected = new Delta().insert('B').insert('C', { bold: true })    expect(a.compose(b)).toEqual(expected);  });  it('retain end optimization join', function () {    var a = new Delta().insert('A', { bold: true })                       .insert('B')                       .insert('C', { bold: true })                       .insert('D')                       .insert('E', { bold: true })                       .insert('F')    var b = new Delta().retain(1).delete(1);    var expected = new Delta().insert('AC', { bold: true })                              .insert('D')                              .insert('E', { bold: true })                              .insert('F')    expect(a.compose(b)).toEqual(expected);  });});
 |