Basic text input test for QuillEditor widget

pull/1261/head
Richard Marshall 2 years ago
parent a2f985dc57
commit 6c187ee50e
No known key found for this signature in database
GPG Key ID: 45CD5A14FB29C4D7
  1. 52
      test/widget_tester_extension.dart
  2. 31
      test/widgets/editor_test.dart

@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:flutter_quill/src/widgets/editor.dart';
import 'package:flutter_quill/src/widgets/raw_editor.dart';
import 'package:flutter_test/flutter_test.dart';
extension QuillEnterText on WidgetTester {
/// Give the QuillEditor widget specified by [finder] the focus.
Future<void> quillGiveFocus(Finder finder) {
return TestAsyncUtils.guard(() async {
final editor = state<QuillEditorState>(
find.descendant(
of: finder,
matching:
find.byType(QuillEditor, skipOffstage: finder.skipOffstage),
matchRoot: true),
);
editor.widget.focusNode.requestFocus();
await pump();
expect(editor.widget.focusNode.hasFocus, isTrue);
});
}
/// Give the QuillEditor widget specified by [finder] the focus and update its
/// editing value with [text], as if it had been provided by the onscreen
/// keyboard.
///
/// The widget specified by [finder] must be a [QuillEditor] or have a
/// [QuillEditor] descendant. For example `find.byType(QuillEditor)`.
Future<void> quillEnterText(Finder finder, String text) async {
return TestAsyncUtils.guard(() async {
await quillGiveFocus(finder);
await updateEditingValue(finder, text);
await idle();
});
}
Future<void> updateEditingValue(Finder finder, String text) async {
return TestAsyncUtils.guard(() async {
final editor = state<RawEditorState>(
find.descendant(
of: finder,
matching: find.byType(RawEditor, skipOffstage: finder.skipOffstage),
matchRoot: true),
);
testTextInput.updateEditingValue(TextEditingValue(
text: text,
selection: TextSelection.collapsed(
offset: editor.textEditingValue.text.length)));
await idle();
});
}
}

@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
import 'package:flutter_quill/src/widgets/controller.dart';
import 'package:flutter_quill/src/widgets/editor.dart';
import 'package:flutter_test/flutter_test.dart';
import '../widget_tester_extension.dart';
void main() {
late QuillController controller;
setUp(() {
controller = QuillController.basic();
});
tearDown(() {
controller.dispose();
});
group('QuillEditor', () {
testWidgets('Keyboard entered text is stored in document', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: QuillEditor.basic(controller: controller, readOnly: false),
),
);
await tester.quillEnterText(find.byType(QuillEditor), 'test\n');
expect(controller.document.toPlainText(), 'test\n');
});
});
}
Loading…
Cancel
Save