| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | import 'dart:collection';import 'package:flowy_editor/src/document/node.dart';import 'package:flutter_test/flutter_test.dart';import 'package:flowy_editor/src/operation/operation.dart';import 'package:flowy_editor/src/operation/transaction_builder.dart';import 'package:flowy_editor/src/editor_state.dart';import 'package:flowy_editor/src/document/state_tree.dart';void main() {  TestWidgetsFlutterBinding.ensureInitialized();  group('transform path', () {    test('transform path changed', () {      expect(transformPath([0, 1], [0, 1]), [0, 2]);      expect(transformPath([0, 1], [0, 2]), [0, 3]);      expect(transformPath([0, 1], [0, 2, 7, 8, 9]), [0, 3, 7, 8, 9]);      expect(transformPath([0, 1, 2], [0, 0, 7, 8, 9]), [0, 0, 7, 8, 9]);    });    test("transform path not changed", () {      expect(transformPath([0, 1, 2], [0, 0, 7, 8, 9]), [0, 0, 7, 8, 9]);      expect(transformPath([0, 1, 2], [0, 1]), [0, 1]);      expect(transformPath([1, 1], [1, 0]), [1, 0]);    });    test("transform path delta", () {      expect(transformPath([0, 1], [0, 1], 5), [0, 6]);    });  });  group('transform operation', () {    test('insert + insert', () {      final t = transformOperation(          InsertOperation([0, 1],              [Node(type: "node", attributes: {}, children: LinkedList())]),          InsertOperation([0, 1],              [Node(type: "node", attributes: {}, children: LinkedList())]));      expect(t.path, [0, 2]);    });    test('delete + delete', () {      final t = transformOperation(          DeleteOperation([0, 1],              [Node(type: "node", attributes: {}, children: LinkedList())]),          DeleteOperation([0, 2],              [Node(type: "node", attributes: {}, children: LinkedList())]));      expect(t.path, [0, 1]);    });  });  test('transform transaction builder', () {    final item1 = Node(type: "node", attributes: {}, children: LinkedList());    final item2 = Node(type: "node", attributes: {}, children: LinkedList());    final item3 = Node(type: "node", attributes: {}, children: LinkedList());    final root = Node(        type: "root",        attributes: {},        children: LinkedList()          ..addAll([            item1,            item2,            item3,          ]));    final state = EditorState(document: StateTree(root: root));    expect(item1.path, [0]);    expect(item2.path, [1]);    expect(item3.path, [2]);    final tb = TransactionBuilder(state);    tb.deleteNode(item1);    tb.deleteNode(item2);    tb.deleteNode(item3);    final transaction = tb.finish();    expect(transaction.operations[0].path, [0]);    expect(transaction.operations[1].path, [0]);    expect(transaction.operations[2].path, [0]);  });  group("toJson", () {    test("insert", () {      final root = Node(type: "root", attributes: {}, children: LinkedList());      final state = EditorState(document: StateTree(root: root));      final item1 = Node(type: "node", attributes: {}, children: LinkedList());      final tb = TransactionBuilder(state);      tb.insertNode([0], item1);      final transaction = tb.finish();      expect(transaction.toJson(), {        "operations": [          {            "type": "insert-operation",            "path": [0],            "nodes": [item1.toJson()],          }        ]      });    });    test("delete", () {      final item1 = Node(type: "node", attributes: {}, children: LinkedList());      final root = Node(          type: "root",          attributes: {},          children: LinkedList()            ..addAll([              item1,            ]));      final state = EditorState(document: StateTree(root: root));      final tb = TransactionBuilder(state);      tb.deleteNode(item1);      final transaction = tb.finish();      expect(transaction.toJson(), {        "operations": [          {            "type": "delete-operation",            "path": [0],            "nodes": [item1.toJson()],          }        ],      });    });  });}
 |