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');
+        });
   });
 }