You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							142 lines
						
					
					
						
							5.1 KiB
						
					
					
				
			
		
		
	
	
							142 lines
						
					
					
						
							5.1 KiB
						
					
					
				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);
 | 
						|
  });
 | 
						|
});
 |