From a63e8c21a29c0572b1264efd99ead88b46b430c5 Mon Sep 17 00:00:00 2001 From: Richard Marshall Date: Mon, 12 Jun 2023 16:20:25 -0700 Subject: [PATCH] Add test for Android keyboard image insertion --- test/widgets/editor_test.dart | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/test/widgets/editor_test.dart b/test/widgets/editor_test.dart index 9453c45a..8c266b66 100644 --- a/test/widgets/editor_test.dart +++ b/test/widgets/editor_test.dart @@ -1,4 +1,7 @@ +import 'dart:convert' show jsonDecode; + import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_quill/src/widgets/controller.dart'; import 'package:flutter_quill/src/widgets/editor.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -27,5 +30,55 @@ void main() { expect(controller.document.toPlainText(), 'test\n'); }); + + testWidgets('insertContent is handled correctly', (tester) async { + String? latestUri; + await tester.pumpWidget( + MaterialApp( + home: QuillEditor( + controller: controller, + focusNode: FocusNode(), + scrollController: ScrollController(), + scrollable: true, + padding: const EdgeInsets.all(0), + autoFocus: true, + readOnly: false, + expands: true, + contentInsertionConfiguration: ContentInsertionConfiguration( + onContentInserted: (content) { + latestUri = content.uri; + }, + allowedMimeTypes: const ['image/gif'], + ), + ), + ), + ); + await tester.tap(find.byType(QuillEditor)); + await tester.quillEnterText(find.byType(QuillEditor), 'test\n'); + await tester.idle(); + + const uri = + 'content://com.google.android.inputmethod.latin.fileprovider/test.gif'; + final messageBytes = + const JSONMessageCodec().encodeMessage({ + 'args': [ + -1, + 'TextInputAction.commitContent', + jsonDecode( + '{"mimeType": "image/gif", "data": [0,1,0,1,0,1,0,0,0], "uri": "$uri"}'), + ], + 'method': 'TextInputClient.performAction', + }); + + Object? error; + try { + await tester.binding.defaultBinaryMessenger + .handlePlatformMessage('flutter/textinput', messageBytes, (_) {}); + } catch (e) { + error = e; + } + expect(error, isNull); + expect(latestUri, equals(uri)); + }); }); }