| // Copyright 2014 The Flutter 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 'package:flutter/services.dart'; | |
| import 'basic_messaging.dart'; | |
| import 'test_step.dart'; | |
| Future<TestStepResult> methodCallJsonSuccessHandshake(dynamic payload) async { | |
| const channel = MethodChannel('json-method', JSONMethodCodec()); | |
| return _methodCallSuccessHandshake('JSON success($payload)', channel, payload); | |
| } | |
| Future<TestStepResult> methodCallJsonErrorHandshake(dynamic payload) async { | |
| const channel = MethodChannel('json-method', JSONMethodCodec()); | |
| return _methodCallErrorHandshake('JSON error($payload)', channel, payload); | |
| } | |
| Future<TestStepResult> methodCallJsonNotImplementedHandshake() async { | |
| const channel = MethodChannel('json-method', JSONMethodCodec()); | |
| return _methodCallNotImplementedHandshake('JSON notImplemented()', channel); | |
| } | |
| Future<TestStepResult> methodCallStandardSuccessHandshake(dynamic payload) async { | |
| const channel = MethodChannel('std-method', StandardMethodCodec(ExtendedStandardMessageCodec())); | |
| return _methodCallSuccessHandshake('Standard success($payload)', channel, payload); | |
| } | |
| Future<TestStepResult> methodCallStandardErrorHandshake(dynamic payload) async { | |
| const channel = MethodChannel('std-method', StandardMethodCodec(ExtendedStandardMessageCodec())); | |
| return _methodCallErrorHandshake('Standard error($payload)', channel, payload); | |
| } | |
| Future<TestStepResult> methodCallStandardNotImplementedHandshake() async { | |
| const channel = MethodChannel('std-method', StandardMethodCodec(ExtendedStandardMessageCodec())); | |
| return _methodCallNotImplementedHandshake('Standard notImplemented()', channel); | |
| } | |
| Future<TestStepResult> _methodCallSuccessHandshake( | |
| String description, | |
| MethodChannel channel, | |
| dynamic arguments, | |
| ) async { | |
| final received = <dynamic>[]; | |
| channel.setMethodCallHandler((MethodCall call) async { | |
| received.add(call.arguments); | |
| return call.arguments; | |
| }); | |
| dynamic result = nothing; | |
| dynamic error = nothing; | |
| try { | |
| result = await channel.invokeMethod<dynamic>('success', arguments); | |
| } catch (e) { | |
| error = e; | |
| } | |
| return resultOfHandshake( | |
| 'Method call success handshake', | |
| description, | |
| arguments, | |
| received, | |
| result, | |
| error, | |
| ); | |
| } | |
| Future<TestStepResult> _methodCallErrorHandshake( | |
| String description, | |
| MethodChannel channel, | |
| dynamic arguments, | |
| ) async { | |
| final received = <dynamic>[]; | |
| channel.setMethodCallHandler((MethodCall call) async { | |
| received.add(call.arguments); | |
| throw PlatformException(code: 'error', details: arguments); | |
| }); | |
| dynamic errorDetails = nothing; | |
| dynamic error = nothing; | |
| try { | |
| error = await channel.invokeMethod<dynamic>('error', arguments); | |
| } on PlatformException catch (e) { | |
| errorDetails = e.details; | |
| } catch (e) { | |
| error = e; | |
| } | |
| return resultOfHandshake( | |
| 'Method call error handshake', | |
| description, | |
| arguments, | |
| received, | |
| errorDetails, | |
| error, | |
| ); | |
| } | |
| Future<TestStepResult> _methodCallNotImplementedHandshake( | |
| String description, | |
| MethodChannel channel, | |
| ) async { | |
| final received = <dynamic>[]; | |
| channel.setMethodCallHandler((MethodCall call) async { | |
| received.add(call.arguments); | |
| throw MissingPluginException(); | |
| }); | |
| dynamic result = nothing; | |
| dynamic error = nothing; | |
| try { | |
| error = await channel.invokeMethod<dynamic>('notImplemented'); | |
| } on MissingPluginException { | |
| result = null; | |
| } catch (e) { | |
| error = e; | |
| } | |
| return resultOfHandshake( | |
| 'Method call not implemented handshake', | |
| description, | |
| null, | |
| received, | |
| result, | |
| error, | |
| ); | |
| } |