| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | import 'package:flutter_test/flutter_test.dart';import 'package:flowy_editor/document/text_delta.dart';void main() {  TestWidgetsFlutterBinding.ensureInitialized();  test('test delta', () {    final delta = Delta(<TextOperation>[      TextInsert('Gandalf', {        'bold': true,      }),      TextInsert(' the '),      TextInsert('Grey', {        'color': '#ccc',      })    ]);    final death = Delta().retain(12).insert("White", {      'color': '#fff',    }).delete(4);    final restores = delta.compose(death);    expect(restores.operations, <TextOperation>[      TextInsert('Gandalf', {'bold': true}),      TextInsert(' the '),      TextInsert('White', {'color': '#fff'}),    ]);  });  test('compose()', () {    final a = Delta().insert('A');    final b = Delta().insert('B');    final expected = Delta().insert('B').insert('A');    expect(a.compose(b), expected);  });  test('insert + retain', () {    final a = Delta().insert('A');    final b = Delta().retain(1, {      'bold': true,      'color': 'red',    });    final expected = Delta().insert('A', {      'bold': true,      'color': 'red',    });    expect(a.compose(b), expected);  });  test('insert + delete', () {    final a = Delta().insert('A');    final b = Delta().delete(1);    final expected = Delta();    expect(a.compose(b), expected);  });  test('delete + insert', () {    final a = Delta().delete(1);    final b = Delta().insert('B');    final expected = Delta().insert('B').delete(1);    expect(a.compose(b), expected);  });  test('delete + retain', () {    final a = Delta().delete(1);    final b = Delta().retain(1, {      'bold': true,      'color': 'red',    });    final expected = Delta().delete(1).retain(1, {      'bold': true,      'color': 'red',    });    expect(a.compose(b), expected);  });  test('delete + delete', () {    final a = Delta().delete(1);    final b = Delta().delete(1);    final expected = Delta().delete(2);    expect(a.compose(b), expected);  });  test('retain + insert', () {    final a = Delta().retain(1, {'color': 'blue'});    final b = Delta().insert('B');    final expected = Delta().insert('B').retain(1, {      'color': 'blue',    });    expect(a.compose(b), expected);  });  test('retain + retain', () {    final a = Delta().retain(1, {      'color': 'blue',    });    final b = Delta().retain(1, {      'bold': true,      'color': 'red',    });    final expected = Delta().retain(1, {      'bold': true,      'color': 'red',    });    expect(a.compose(b), expected);  });  test('retain + delete', () {    final a = Delta().retain(1, {      'color': 'blue',    });    final b = Delta().delete(1);    final expected = Delta().delete(1);    expect(a.compose(b), expected);  });  test('insert in middle of text', () {    final a = Delta().insert('Hello');    final b = Delta().retain(3).insert('X');    final expected = Delta().insert('HelXlo');    expect(a.compose(b), expected);  });  test('insert and delete ordering', () {    final a = Delta().insert('Hello');    final b = Delta().insert('Hello');    final insertFirst = Delta().retain(3).insert('X').delete(1);    final deleteFirst = Delta().retain(3).delete(1).insert('X');    final expected = Delta().insert('HelXo');    expect(a.compose(insertFirst), expected);    expect(b.compose(deleteFirst), expected);  });  test('delete entire text', () {    final a = Delta().retain(4).insert('Hello');    final b = Delta().delete(9);    final expected = Delta().delete(4);    expect(a.compose(b), expected);  });  test('retain more than length of text', () {    final a = Delta().insert('Hello');    final b = Delta().retain(10);    final expected = Delta().insert('Hello');    expect(a.compose(b), expected);  });  test('retain start optimization', () {    final a = Delta()        .insert('A', {'bold': true})        .insert('B')        .insert('C', {'bold': true})        .delete(1);    final b = Delta().retain(3).insert('D');    final expected = Delta()        .insert('A', {'bold': true})        .insert('B')        .insert('C', {'bold': true})        .insert('D')        .delete(1);    expect(a.compose(b), expected);  });  test('retain end optimization', () {    final a = Delta()        .insert('A', {'bold': true})        .insert('B')        .insert('C', {'bold': true});    final b = Delta().delete(1);    final expected = Delta().insert('B').insert('C', {'bold': true});    expect(a.compose(b), expected);  });  test('retain end optimization join', () {    final a = Delta()        .insert('A', {'bold': true})        .insert('B')        .insert('C', {'bold': true})        .insert('D')        .insert('E', {'bold': true})        .insert('F');    final b = Delta().retain(1).delete(1);    final expected = Delta()        .insert('AC', {'bold': true})        .insert('D')        .insert('E', {'bold': true})        .insert('F');    expect(a.compose(b), expected);  });}
 |