| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | var Delta = require('../../lib/delta');describe('transform()', function () {  it('insert + insert', function () {    var a1 = new Delta().insert('A');    var b1 = new Delta().insert('B');    var a2 = new Delta(a1);    var b2 = new Delta(b1);    var expected1 = new Delta().retain(1).insert('B');    var expected2 = new Delta().insert('B');    expect(a1.transform(b1, true)).toEqual(expected1);    expect(a2.transform(b2, false)).toEqual(expected2);  });  it('insert + retain', function () {    var a = new Delta().insert('A');    var b = new Delta().retain(1, { bold: true, color: 'red' });    var expected = new Delta().retain(1).retain(1, { bold: true, color: 'red' });    expect(a.transform(b, true)).toEqual(expected);  });  it('insert + delete', function () {    var a = new Delta().insert('A');    var b = new Delta().delete(1);    var expected = new Delta().retain(1).delete(1);    expect(a.transform(b, true)).toEqual(expected);  });  it('delete + insert', function () {    var a = new Delta().delete(1);    var b = new Delta().insert('B');    var expected = new Delta().insert('B');    expect(a.transform(b, true)).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();    expect(a.transform(b, true)).toEqual(expected);  });  it('delete + delete', function () {    var a = new Delta().delete(1);    var b = new Delta().delete(1);    var expected = new Delta();    expect(a.transform(b, true)).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');    expect(a.transform(b, true)).toEqual(expected);  });  it('retain + retain', function () {    var a1 = new Delta().retain(1, { color: 'blue' });    var b1 = new Delta().retain(1, { bold: true, color: 'red' });    var a2 = new Delta().retain(1, { color: 'blue' });    var b2 = new Delta().retain(1, { bold: true, color: 'red' });    var expected1 = new Delta().retain(1, { bold: true });    var expected2 = new Delta();    expect(a1.transform(b1, true)).toEqual(expected1);    expect(b2.transform(a2, true)).toEqual(expected2);  });  it('retain + retain without priority', function () {    var a1 = new Delta().retain(1, { color: 'blue' });    var b1 = new Delta().retain(1, { bold: true, color: 'red' });    var a2 = new Delta().retain(1, { color: 'blue' });    var b2 = new Delta().retain(1, { bold: true, color: 'red' });    var expected1 = new Delta().retain(1, { bold: true, color: 'red' });    var expected2 = new Delta().retain(1, { color: 'blue' });    expect(a1.transform(b1, false)).toEqual(expected1);    expect(b2.transform(a2, false)).toEqual(expected2);  });  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.transform(b, true)).toEqual(expected);  });  it('alternating edits', function () {    var a1 = new Delta().retain(2).insert('si').delete(5);    var b1 = new Delta().retain(1).insert('e').delete(5).retain(1).insert('ow');    var a2 = new Delta(a1);    var b2 = new Delta(b1);    var expected1 = new Delta().retain(1).insert('e').delete(1).retain(2).insert('ow');    var expected2 = new Delta().retain(2).insert('si').delete(1);    expect(a1.transform(b1, false)).toEqual(expected1);    expect(b2.transform(a2, false)).toEqual(expected2);  });  it('conflicting appends', function () {    var a1 = new Delta().retain(3).insert('aa');    var b1 = new Delta().retain(3).insert('bb');    var a2 = new Delta(a1);    var b2 = new Delta(b1);    var expected1 = new Delta().retain(5).insert('bb');    var expected2 = new Delta().retain(3).insert('aa');    expect(a1.transform(b1, true)).toEqual(expected1);    expect(b2.transform(a2, false)).toEqual(expected2);  });  it('prepend + append', function () {    var a1 = new Delta().insert('aa');    var b1 = new Delta().retain(3).insert('bb');    var expected1 = new Delta().retain(5).insert('bb');    var a2 = new Delta(a1);    var b2 = new Delta(b1);    var expected2 = new Delta().insert('aa');    expect(a1.transform(b1, false)).toEqual(expected1);    expect(b2.transform(a2, false)).toEqual(expected2);  });  it('trailing deletes with differing lengths', function () {    var a1 = new Delta().retain(2).delete(1);    var b1 = new Delta().delete(3);    var expected1 = new Delta().delete(2);    var a2 = new Delta(a1);    var b2 = new Delta(b1);    var expected2 = new Delta();    expect(a1.transform(b1, false)).toEqual(expected1);    expect(b2.transform(a2, false)).toEqual(expected2);  });  it('immutability', function () {    var a1 = new Delta().insert('A');    var a2 = new Delta().insert('A');    var b1 = new Delta().insert('B');    var b2 = new Delta().insert('B');    var expected = new Delta().retain(1).insert('B');    expect(a1.transform(b1, true)).toEqual(expected);    expect(a1).toEqual(a2);    expect(b1).toEqual(b2);  });});
 |