// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/services.dart'; const String _kTextInputClientChannel = 'flutter/textinputclient'; class MockTextInput { void register() { PlatformMessages.setMockJSONMessageHandler('flutter/textinput', handleJSONMessage); } int client = 0; Map<String, dynamic> editingState; Future<dynamic> handleJSONMessage(dynamic message) async { final String method = message['method']; final List<dynamic> args= message['args']; switch (method) { case 'TextInput.setClient': client = args[0]; break; case 'TextInput.setEditingState': editingState = args[0]; break; } } void updateEditingState(TextEditingState state) { expect(client, isNonZero); String message = JSON.encode(<String, dynamic>{ 'method': 'TextInputClient.updateEditingState', 'args': <dynamic>[client, state.toJSON()], }); Uint8List encoded = UTF8.encoder.convert(message); PlatformMessages.handlePlatformMessage( _kTextInputClientChannel, encoded.buffer.asByteData(), (_) {}); } void enterText(String text) { updateEditingState(new TextEditingState( text: text, composingBase: 0, composingExtent: text.length, )); } }