| import 'dart:async'; |
| import 'dart:typed_data'; |
| |
| import 'package:flutter/services.dart'; |
| import 'package:sensors/sensors.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('$accelerometerEvents are streamed', () async { |
| const String channelName = 'plugins.flutter.io/sensors/accelerometer'; |
| const List<double> sensorData = <double>[1.0, 2.0, 3.0]; |
| |
| const StandardMethodCodec standardMethod = StandardMethodCodec(); |
| |
| void emitEvent(ByteData event) { |
| BinaryMessages.handlePlatformMessage( |
| channelName, |
| event, |
| (ByteData reply) {}, |
| ); |
| } |
| |
| bool isCanceled = false; |
| BinaryMessages.setMockMessageHandler(channelName, (ByteData message) async { |
| final MethodCall methodCall = standardMethod.decodeMethodCall(message); |
| if (methodCall.method == 'listen') { |
| emitEvent(standardMethod.encodeSuccessEnvelope(sensorData)); |
| emitEvent(null); |
| return standardMethod.encodeSuccessEnvelope(null); |
| } else if (methodCall.method == 'cancel') { |
| isCanceled = true; |
| return standardMethod.encodeSuccessEnvelope(null); |
| } else { |
| fail('Expected listen or cancel'); |
| } |
| }); |
| |
| final AccelerometerEvent event = await accelerometerEvents.first; |
| expect(event.x, 1.0); |
| expect(event.y, 2.0); |
| expect(event.z, 3.0); |
| |
| await Future<void>.delayed(Duration.zero); |
| expect(isCanceled, isTrue); |
| }); |
| } |