| // 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 MethodChannel channel = |
| MethodChannel('json-method', JSONMethodCodec()); |
| return _methodCallSuccessHandshake('JSON success($payload)', channel, payload); |
| } |
| |
| Future<TestStepResult> methodCallJsonErrorHandshake(dynamic payload) async { |
| const MethodChannel channel = |
| MethodChannel('json-method', JSONMethodCodec()); |
| return _methodCallErrorHandshake('JSON error($payload)', channel, payload); |
| } |
| |
| Future<TestStepResult> methodCallJsonNotImplementedHandshake() async { |
| const MethodChannel channel = |
| MethodChannel('json-method', JSONMethodCodec()); |
| return _methodCallNotImplementedHandshake('JSON notImplemented()', channel); |
| } |
| |
| Future<TestStepResult> methodCallStandardSuccessHandshake( |
| dynamic payload) async { |
| const MethodChannel channel = MethodChannel( |
| 'std-method', |
| StandardMethodCodec(ExtendedStandardMessageCodec()), |
| ); |
| return _methodCallSuccessHandshake('Standard success($payload)', channel, payload); |
| } |
| |
| Future<TestStepResult> methodCallStandardErrorHandshake(dynamic payload) async { |
| const MethodChannel channel = MethodChannel( |
| 'std-method', |
| StandardMethodCodec(ExtendedStandardMessageCodec()), |
| ); |
| return _methodCallErrorHandshake('Standard error($payload)', channel, payload); |
| } |
| |
| Future<TestStepResult> methodCallStandardNotImplementedHandshake() async { |
| const MethodChannel channel = MethodChannel( |
| 'std-method', |
| StandardMethodCodec(ExtendedStandardMessageCodec()), |
| ); |
| return _methodCallNotImplementedHandshake('Standard notImplemented()', channel); |
| } |
| |
| Future<TestStepResult> _methodCallSuccessHandshake( |
| String description, |
| MethodChannel channel, |
| dynamic arguments, |
| ) async { |
| final List<dynamic> 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 List<dynamic> 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 List<dynamic> 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, |
| ); |
| } |