zhangnaisong
2023-08-05 24d66c8d82b628a06e93dbb1abfea2049b3d45ab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
var Delta = require('../../lib/delta');
 
 
describe('diff()', function () {
  it('insert', function () {
    var a = new Delta().insert('A');
    var b = new Delta().insert('AB');
    var expected = new Delta().retain(1).insert('B');
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('delete', function () {
    var a = new Delta().insert('AB');
    var b = new Delta().insert('A');
    var expected = new Delta().retain(1).delete(1);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('retain', function () {
    var a = new Delta().insert('A');
    var b = new Delta().insert('A');
    var expected = new Delta();
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('format', function () {
    var a = new Delta().insert('A');
    var b = new Delta().insert('A', { bold: true });
    var expected = new Delta().retain(1, { bold: true });
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('object attributes', function () {
    var a = new Delta().insert('A', { font: { family: 'Helvetica', size: '15px' } });
    var b = new Delta().insert('A', { font: { family: 'Helvetica', size: '15px' } });
    var expected = new Delta();
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed integer match', function () {
    var a = new Delta().insert(1);
    var b = new Delta().insert(1);
    var expected = new Delta();
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed integer mismatch', function () {
    var a = new Delta().insert(1);
    var b = new Delta().insert(2);
    var expected = new Delta().delete(1).insert(2);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed object match', function () {
    var a = new Delta().insert({ image: 'http://quilljs.com' });
    var b = new Delta().insert({ image: 'http://quilljs.com' });
    var expected = new Delta();
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed object mismatch', function () {
    var a = new Delta().insert({ image: 'http://quilljs.com', alt: 'Overwrite' });
    var b = new Delta().insert({ image: 'http://quilljs.com' });
    var expected = new Delta().insert({ image: 'http://quilljs.com' }).delete(1);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed object change', function () {
    var embed = { image: 'http://quilljs.com' };
    var a = new Delta().insert(embed);
    embed.image = 'http://github.com';
    var b = new Delta().insert(embed);
    var expected = new Delta().insert({ image: 'http://github.com' }).delete(1);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('embed false positive', function () {
    var a = new Delta().insert(1);
    var b = new Delta().insert(String.fromCharCode(0)); // Placeholder char for embed in diff()
    var expected = new Delta().insert(String.fromCharCode(0)).delete(1);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('error on non-documents', function () {
    var a = new Delta().insert('A');
    var b = new Delta().retain(1).insert('B');
    expect(function () {
      a.diff(b);
    }).toThrow();
    expect(function () {
      b.diff(a);
    }).toThrow();
  });
 
  it('inconvenient indexes', function () {
    var a = new Delta().insert('12', { bold: true }).insert('34', { italic: true });
    var b = new Delta().insert('123', { color: 'red' });
    var expected = new Delta().retain(2, { bold: null, color: 'red' }).retain(1, { italic: null, color: 'red' }).delete(1);
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('combination', function () {
    var a = new Delta().insert('Bad', { color: 'red' }).insert('cat', { color: 'blue' });
    var b = new Delta().insert('Good', { bold: true }).insert('dog', { italic: true });
    var expected = new Delta().insert('Good', { bold: true }).delete(2).retain(1, { italic: true, color: null }).delete(3).insert('og', { italic: true });
    expect(a.diff(b)).toEqual(expected);
  });
 
  it('same document', function () {
    var a = new Delta().insert('A').insert('B', { bold: true });
    expected = new Delta();
    expect(a.diff(a)).toEqual(expected);
  });
 
  it('immutability', function () {
    var attr1 = { color: 'red' };
    var attr2 = { color: 'red' };
    var a1 = new Delta().insert('A', attr1);
    var a2 = new Delta().insert('A', attr1);
    var b1 = new Delta().insert('A', { bold: true }).insert('B');
    var b2 = new Delta().insert('A', { bold: true }).insert('B');
    var expected = new Delta().retain(1, { bold: true, color: null }).insert('B');
    expect(a1.diff(b1)).toEqual(expected);
    expect(a1).toEqual(a2);
    expect(b2).toEqual(b2);
    expect(attr1).toEqual(attr2);
  });
 
  it('non-document', function () {
    var a = new Delta().insert('Test');
    var b = new Delta().delete(4);
    expect(function() {
      a.diff(b);
    }).toThrow(new Error('diff() called on non-document'));
  });
});