From 8cc3eb48465ea59371780701b5bc2f3e78dda862 Mon Sep 17 00:00:00 2001 From: squidrye <mihirs167@gmail.com> Date: Fri, 24 Mar 2023 00:12:05 +0530 Subject: [PATCH] test: added test to verify correct ordering after replacement of multiline text-nodes --- .../test/core/transform/transaction_test.dart | 57 +++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/frontend/appflowy_flutter/packages/appflowy_editor/test/core/transform/transaction_test.dart b/frontend/appflowy_flutter/packages/appflowy_editor/test/core/transform/transaction_test.dart index 8aa53dcabc..e675706464 100644 --- a/frontend/appflowy_flutter/packages/appflowy_editor/test/core/transform/transaction_test.dart +++ b/frontend/appflowy_flutter/packages/appflowy_editor/test/core/transform/transaction_test.dart @@ -155,15 +155,52 @@ void main() async { editor.editorState.apply(transaction); await tester.pumpAndSettle(); - expect(editor.documentLength, 4); - textNodes = [0, 1, 2, 3] - .map((e) => editor.nodeAtPath([e])!) - .whereType<TextNode>() - .toList(growable: false); - expect(textNodes[0].toPlainText(), '0123ABC'); - expect(textNodes[1].toPlainText(), 'ABC'); - expect(textNodes[2].toPlainText(), 'ABC'); - expect(textNodes[3].toPlainText(), 'ABC456789'); - }); + expect(editor.documentLength, 4); + textNodes = [0, 1, 2, 3] + .map((e) => editor.nodeAtPath([e])!) + .whereType<TextNode>() + .toList(growable: false); + expect(textNodes[0].toPlainText(), '0123ABC'); + expect(textNodes[1].toPlainText(), 'ABC'); + expect(textNodes[2].toPlainText(), 'ABC'); + expect(textNodes[3].toPlainText(), 'ABC456789'); + }); + + testWidgets('test replaceTexts, textNodes.length << texts.length', + (tester) async { + TestWidgetsFlutterBinding.ensureInitialized(); + + final editor = tester.editor + ..insertTextNode('some text'); + await editor.startTesting(); + await tester.pumpAndSettle(); + + expect(editor.documentLength, 1); + + final selection = Selection( + start: Position(path: [0], offset:0), + end: Position(path: [0], offset: 9), + ); + final transaction = editor.editorState.transaction; + var textNodes = [0] + .map((e) => editor.nodeAtPath([e])!) + .whereType<TextNode>() + .toList(growable: false); + final texts = ['ABC1', 'ABC2', 'ABC3', 'ABC4','ABC5']; + transaction.replaceTexts(textNodes, selection, texts); + editor.editorState.apply(transaction); + await tester.pumpAndSettle(); + + expect(editor.documentLength, 5); + textNodes = [0, 1, 2, 3,4] + .map((e) => editor.nodeAtPath([e])!) + .whereType<TextNode>() + .toList(growable: false); + expect(textNodes[0].toPlainText(), 'ABC1'); + expect(textNodes[1].toPlainText(), 'ABC2'); + expect(textNodes[2].toPlainText(), 'ABC3'); + expect(textNodes[3].toPlainText(), 'ABC4'); + expect(textNodes[4].toPlainText(), 'ABC5'); + }); }); }