|
@@ -0,0 +1,141 @@
|
|
|
|
+import 'dart:io';
|
|
|
|
+
|
|
|
|
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
|
|
|
|
+import 'package:appflowy_editor/appflowy_editor.dart';
|
|
|
|
+import 'package:flutter/services.dart';
|
|
|
|
+import 'package:flutter_test/flutter_test.dart';
|
|
|
|
+import 'package:integration_test/integration_test.dart';
|
|
|
|
+
|
|
|
|
+import '../util/ime.dart';
|
|
|
|
+import '../util/util.dart';
|
|
|
|
+
|
|
|
|
+void main() {
|
|
|
|
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
+
|
|
|
|
+ group('edit document', () {
|
|
|
|
+ const location = 'appflowy';
|
|
|
|
+
|
|
|
|
+ setUp(() async {
|
|
|
|
+ await TestFolder.cleanTestLocation(location);
|
|
|
|
+ await TestFolder.setTestLocation(location);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ tearDown(() async {
|
|
|
|
+ await TestFolder.cleanTestLocation(null);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ testWidgets('redo & undo', (tester) async {
|
|
|
|
+ await tester.initializeAppFlowy();
|
|
|
|
+ await tester.tapGoButton();
|
|
|
|
+
|
|
|
|
+ // create a new document called Sample
|
|
|
|
+ const pageName = 'Sample';
|
|
|
|
+ await tester.createNewPageWithName(ViewLayoutPB.Document, pageName);
|
|
|
|
+
|
|
|
|
+ // focus on the editor
|
|
|
|
+ await tester.editor.tapLineOfEditorAt(0);
|
|
|
|
+
|
|
|
|
+ // insert 1. to trigger it to be a numbered list
|
|
|
|
+ await tester.ime.insertText('1. ');
|
|
|
|
+ expect(find.text('1.', findRichText: true), findsOneWidget);
|
|
|
|
+ expect(
|
|
|
|
+ tester.editor.getCurrentEditorState().getNodeAtPath([0])!.type,
|
|
|
|
+ NumberedListBlockKeys.type,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // undo
|
|
|
|
+ // numbered list will be reverted to paragraph
|
|
|
|
+ await tester.simulateKeyEvent(
|
|
|
|
+ LogicalKeyboardKey.keyZ,
|
|
|
|
+ isControlPressed: Platform.isWindows || Platform.isLinux,
|
|
|
|
+ isMetaPressed: Platform.isMacOS,
|
|
|
|
+ );
|
|
|
|
+ expect(
|
|
|
|
+ tester.editor.getCurrentEditorState().getNodeAtPath([0])!.type,
|
|
|
|
+ ParagraphBlockKeys.type,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // redo
|
|
|
|
+ await tester.simulateKeyEvent(
|
|
|
|
+ LogicalKeyboardKey.keyZ,
|
|
|
|
+ isControlPressed: Platform.isWindows || Platform.isLinux,
|
|
|
|
+ isMetaPressed: Platform.isMacOS,
|
|
|
|
+ isShiftPressed: true,
|
|
|
|
+ );
|
|
|
|
+ expect(
|
|
|
|
+ tester.editor.getCurrentEditorState().getNodeAtPath([0])!.type,
|
|
|
|
+ NumberedListBlockKeys.type,
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ // switch to other page and switch back
|
|
|
|
+ await tester.openPage(readme);
|
|
|
|
+ await tester.openPage(pageName);
|
|
|
|
+
|
|
|
|
+ // the numbered list should be kept
|
|
|
|
+ expect(
|
|
|
|
+ tester.editor.getCurrentEditorState().getNodeAtPath([0])!.type,
|
|
|
|
+ NumberedListBlockKeys.type,
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ testWidgets('write a readme document', (tester) async {
|
|
|
|
+ await tester.initializeAppFlowy();
|
|
|
|
+ await tester.tapGoButton();
|
|
|
|
+
|
|
|
|
+ // create a new document called Sample
|
|
|
|
+ const pageName = 'Sample';
|
|
|
|
+ await tester.createNewPageWithName(ViewLayoutPB.Document, pageName);
|
|
|
|
+
|
|
|
|
+ // focus on the editor
|
|
|
|
+ await tester.editor.tapLineOfEditorAt(0);
|
|
|
|
+
|
|
|
|
+ // mock inputting the sample
|
|
|
|
+ final lines = _sample.split('\n');
|
|
|
|
+ for (final line in lines) {
|
|
|
|
+ await tester.ime.insertText(line);
|
|
|
|
+ await tester.ime.insertCharacter('\n');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // switch to other page and switch back
|
|
|
|
+ await tester.openPage(readme);
|
|
|
|
+ await tester.openPage(pageName);
|
|
|
|
+
|
|
|
|
+ // this screenshots are different on different platform, so comment it out temporarily.
|
|
|
|
+ // check the document
|
|
|
|
+ // await expectLater(
|
|
|
|
+ // find.byType(AppFlowyEditor),
|
|
|
|
+ // matchesGoldenFile('document/edit_document_test.png'),
|
|
|
|
+ // );
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// TODO(Lucas.Xu): there're no shorctcuts for underline, format code yet.
|
|
|
|
+const _sample = r'''
|
|
|
|
+# Heading 1
|
|
|
|
+## Heading 2
|
|
|
|
+### Heading 3
|
|
|
|
+---
|
|
|
|
+[] Highlight any text, and use the editing menu to _style_ **your** writing `however` you ~~like.~~
|
|
|
|
+
|
|
|
|
+[] Type / followed by /bullet or /num to create a list.
|
|
|
|
+
|
|
|
|
+[x] Click `+ New Page` button at the bottom of your sidebar to add a new page.
|
|
|
|
+
|
|
|
|
+[] Click `+` next to any page title in the sidebar to quickly add a new subpage, `Document`, `Grid`, or `Kanban Board`.
|
|
|
|
+---
|
|
|
|
+* bulleted list 1
|
|
|
|
+
|
|
|
|
+* bulleted list 2
|
|
|
|
+
|
|
|
|
+* bulleted list 3
|
|
|
|
+bulleted list 4
|
|
|
|
+---
|
|
|
|
+1. numbered list 1
|
|
|
|
+
|
|
|
|
+2. numbered list 2
|
|
|
|
+
|
|
|
|
+3. numbered list 3
|
|
|
|
+numbered list 4
|
|
|
|
+---
|
|
|
|
+" quote''';
|