|
@@ -152,4 +152,121 @@ void main() async {
|
|
|
);
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+ testWidgets('press tab in checkbox/todo list', (tester) async {
|
|
|
+ const text = 'Welcome to Appflowy 😁';
|
|
|
+ final editor = tester.editor
|
|
|
+ ..insertTextNode(
|
|
|
+ text,
|
|
|
+ attributes: {
|
|
|
+ BuiltInAttributeKey.subtype: BuiltInAttributeKey.checkbox,
|
|
|
+ BuiltInAttributeKey.checkbox: false,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ ..insertTextNode(
|
|
|
+ text,
|
|
|
+ attributes: {
|
|
|
+ BuiltInAttributeKey.subtype: BuiltInAttributeKey.checkbox,
|
|
|
+ BuiltInAttributeKey.checkbox: false,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ ..insertTextNode(
|
|
|
+ text,
|
|
|
+ attributes: {
|
|
|
+ BuiltInAttributeKey.subtype: BuiltInAttributeKey.checkbox,
|
|
|
+ BuiltInAttributeKey.checkbox: false,
|
|
|
+ },
|
|
|
+ );
|
|
|
+ await editor.startTesting();
|
|
|
+ var document = editor.document;
|
|
|
+
|
|
|
+ var selection = Selection.single(path: [0], startOffset: 0);
|
|
|
+ await editor.updateSelection(selection);
|
|
|
+ await editor.pressLogicKey(LogicalKeyboardKey.tab);
|
|
|
+
|
|
|
+ // nothing happens
|
|
|
+ expect(
|
|
|
+ editor.documentSelection,
|
|
|
+ Selection.single(path: [0], startOffset: 0),
|
|
|
+ );
|
|
|
+ expect(editor.document.toJson(), document.toJson());
|
|
|
+
|
|
|
+ // Before
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // After
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+
|
|
|
+ selection = Selection.single(path: [1], startOffset: 0);
|
|
|
+ await editor.updateSelection(selection);
|
|
|
+
|
|
|
+ await editor.pressLogicKey(LogicalKeyboardKey.tab);
|
|
|
+
|
|
|
+ expect(
|
|
|
+ editor.documentSelection,
|
|
|
+ Selection.single(path: [0, 0], startOffset: 0),
|
|
|
+ );
|
|
|
+ expect(editor.nodeAtPath([0])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+ expect(editor.nodeAtPath([1])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+ expect(editor.nodeAtPath([2]), null);
|
|
|
+ expect(editor.nodeAtPath([0, 0])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+
|
|
|
+ selection = Selection.single(path: [1], startOffset: 0);
|
|
|
+ await editor.updateSelection(selection);
|
|
|
+ await editor.pressLogicKey(LogicalKeyboardKey.tab);
|
|
|
+
|
|
|
+ expect(
|
|
|
+ editor.documentSelection,
|
|
|
+ Selection.single(path: [0, 1], startOffset: 0),
|
|
|
+ );
|
|
|
+ expect(editor.nodeAtPath([0])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+ expect(editor.nodeAtPath([1]), null);
|
|
|
+ expect(editor.nodeAtPath([2]), null);
|
|
|
+ expect(editor.nodeAtPath([0, 0])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+ expect(editor.nodeAtPath([0, 1])!.subtype, BuiltInAttributeKey.checkbox);
|
|
|
+
|
|
|
+ // Before
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // After
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ // [] Welcome to Appflowy 😁
|
|
|
+ document = editor.document;
|
|
|
+ selection = Selection.single(path: [0, 0], startOffset: 0);
|
|
|
+ await editor.updateSelection(selection);
|
|
|
+ await editor.pressLogicKey(LogicalKeyboardKey.tab);
|
|
|
+
|
|
|
+ expect(
|
|
|
+ editor.documentSelection,
|
|
|
+ Selection.single(path: [0, 0], startOffset: 0),
|
|
|
+ );
|
|
|
+ expect(editor.document.toJson(), document.toJson());
|
|
|
+
|
|
|
+ selection = Selection.single(path: [0, 1], startOffset: 0);
|
|
|
+ await editor.updateSelection(selection);
|
|
|
+ await editor.pressLogicKey(LogicalKeyboardKey.tab);
|
|
|
+
|
|
|
+ expect(
|
|
|
+ editor.documentSelection,
|
|
|
+ Selection.single(path: [0, 0, 0], startOffset: 0),
|
|
|
+ );
|
|
|
+ expect(
|
|
|
+ editor.nodeAtPath([0])!.subtype,
|
|
|
+ BuiltInAttributeKey.checkbox,
|
|
|
+ );
|
|
|
+ expect(
|
|
|
+ editor.nodeAtPath([0, 0])!.subtype,
|
|
|
+ BuiltInAttributeKey.checkbox,
|
|
|
+ );
|
|
|
+ expect(editor.nodeAtPath([0, 1]), null);
|
|
|
+ expect(
|
|
|
+ editor.nodeAtPath([0, 0, 0])!.subtype,
|
|
|
+ BuiltInAttributeKey.checkbox,
|
|
|
+ );
|
|
|
+ });
|
|
|
}
|