Skip to content

Commit 1f44d4d

Browse files
committed
fix(test): test replaceTexts, textNodes.length > texts.length
1 parent 653f880 commit 1f44d4d

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

frontend/appflowy_flutter/packages/appflowy_editor/lib/src/core/transform/transaction.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ extension TextTransaction on Transaction {
337337
}
338338

339339
if (textNodes.length > texts.length) {
340+
final length = textNodes.length;
340341
for (var i = 0; i < textNodes.length; i++) {
341342
final textNode = textNodes[i];
342343
if (i == 0) {
@@ -346,6 +347,13 @@ extension TextTransaction on Transaction {
346347
textNode.toPlainText().length,
347348
texts.first,
348349
);
350+
} else if (i == length - 1 && texts.length >= 2) {
351+
replaceText(
352+
textNode,
353+
0,
354+
selection.endIndex,
355+
texts.last,
356+
);
349357
} else if (i < texts.length - 1) {
350358
replaceText(
351359
textNode,

frontend/appflowy_flutter/packages/appflowy_editor/test/command/command_extension_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ void main() {
2626
.editorState.service.selectionService.currentSelectedNodes
2727
.whereType<TextNode>()
2828
.toList(growable: false);
29-
final text = editor.editorState.getTextInSelection(
29+
final texts = editor.editorState.getTextInSelection(
3030
textNodes.normalized,
3131
selection.normalized,
3232
);
33-
expect(text, 'me\nto\nAppfl');
33+
expect(texts, ['me', 'to', 'Appfl']);
3434
});
3535
});
3636
}

frontend/appflowy_flutter/packages/appflowy_editor/test/core/transform/transaction_test.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,43 @@ void main() async {
9191
expect(textNodes[3].toPlainText(), 'ABC456789');
9292
});
9393

94+
testWidgets('test replaceTexts, textNodes.length >> texts.length',
95+
(tester) async {
96+
TestWidgetsFlutterBinding.ensureInitialized();
97+
98+
final editor = tester.editor
99+
..insertTextNode('0123456789')
100+
..insertTextNode('0123456789')
101+
..insertTextNode('0123456789')
102+
..insertTextNode('0123456789')
103+
..insertTextNode('0123456789');
104+
await editor.startTesting();
105+
await tester.pumpAndSettle();
106+
107+
expect(editor.documentLength, 5);
108+
109+
final selection = Selection(
110+
start: Position(path: [0], offset: 4),
111+
end: Position(path: [4], offset: 4),
112+
);
113+
final transaction = editor.editorState.transaction;
114+
var textNodes = [0, 1, 2, 3, 4]
115+
.map((e) => editor.nodeAtPath([e])!)
116+
.whereType<TextNode>()
117+
.toList(growable: false);
118+
final texts = ['ABC'];
119+
transaction.replaceTexts(textNodes, selection, texts);
120+
editor.editorState.apply(transaction);
121+
await tester.pumpAndSettle();
122+
123+
expect(editor.documentLength, 1);
124+
textNodes = [0]
125+
.map((e) => editor.nodeAtPath([e])!)
126+
.whereType<TextNode>()
127+
.toList(growable: false);
128+
expect(textNodes[0].toPlainText(), '0123ABC');
129+
});
130+
94131
testWidgets('test replaceTexts, textNodes.length < texts.length',
95132
(tester) async {
96133
TestWidgetsFlutterBinding.ensureInitialized();

0 commit comments

Comments
 (0)