fix: cross column deletion in the table (#934)

This commit is contained in:
LinJi 2024-12-11 17:04:34 +08:00 • committed by GitHub
commit 432b797914
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,4 +1,5 @@
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/editor/block_component/table_block_component/util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@ -511,4 +512,143 @@ void main() async {
await editor.dispose();
});
});
group('backspaceCommand - table tests', () {
// Before
// |Cell in row 1|
// 🔽 delete from here
// |Cell in row 2|
// |Cell in row 3|
// After
// |Cell in row 1|
// |Cell in row 2|
// |Cell in row 3|
testWidgets('Delete across multiple table rows,', (tester) async {
const textRow1 = 'Cell in row 1';
const textRow2 = 'Cell in row 2';
const textRow3 = 'Cell in row 3';
final tableNode = TableNode.fromList([
[textRow1, textRow2, textRow3],
]);
final editor = tester.editor..addNode(tableNode.node);
await editor.startTesting();
final selection = Selection.single(
path: getCellNode(tableNode.node, 0, 1)!.childAtIndexOrNull(0)!.path,
startOffset: 0,
endOffset: 0,
);
await editor.updateSelection(selection);
// Test press ALT + Backspace, while skip in-table backspace command.
await editor.pressKey(
key: LogicalKeyboardKey.backspace,
isAltPressed: true,
);
await tester.pumpAndSettle();
expect(
getCellNode(tableNode.node, 0, 0)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textRow1,
);
expect(
getCellNode(tableNode.node, 0, 1)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textRow2,
);
expect(
getCellNode(tableNode.node, 0, 2)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textRow3,
);
// Ensure the cursor is at the start of the new second row
expect(
editor.selection,
Selection.collapsed(Position(path: [0, 1, 0], offset: 0)),
);
await editor.dispose();
});
});
// Before
// 🔽 delete from here
// |Cell in col 1|Cell in col 2|Cell in col 3|
// After
// |Cell in col 1|Cell in col 2|Cell in col 3|
testWidgets('Delete across multiple table columns', (tester) async {
const textCol1 = 'Cell in col 1';
const textCol2 = 'Cell in col 2';
const textCol3 = 'Cell in col 3';
final tableNode = TableNode.fromList([
[textCol1],
[textCol2],
[textCol3],
]);
final editor = tester.editor..addNode(tableNode.node);
await editor.startTesting();
final selection = Selection.single(
path: getCellNode(tableNode.node, 1, 0)!.childAtIndexOrNull(0)!.path,
startOffset: 0,
endOffset: 0,
);
await editor.updateSelection(selection);
// Test press ALT + Backspace, while skip in-table backspace command.
await editor.pressKey(
key: LogicalKeyboardKey.backspace,
isAltPressed: true,
);
await tester.pumpAndSettle();
expect(
getCellNode(tableNode.node, 0, 0)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textCol1,
);
expect(
getCellNode(tableNode.node, 1, 0)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textCol2,
);
expect(
getCellNode(tableNode.node, 2, 0)!
.childAtIndexOrNull(0)!
.delta
?.toPlainText(),
textCol3,
);
expect(
editor.selection,
Selection.collapsed(Position(path: [0, 1, 0], offset: 0)),
);
await editor.dispose();
});
}