| // Copyright 2019 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:typed_data'; |
| |
| import 'package:flutter/services.dart'; |
| import 'package:flutter_test/flutter_test.dart' show TestWidgetsFlutterBinding; |
| import 'package:sensors/sensors.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| TestWidgetsFlutterBinding.ensureInitialized(); |
| |
| test('$accelerometerEvents are streamed', () async { |
| const String channelName = 'plugins.flutter.io/sensors/accelerometer'; |
| const List<double> sensorData = <double>[1.0, 2.0, 3.0]; |
| _initializeFakeSensorChannel(channelName, sensorData); |
| |
| final AccelerometerEvent event = await accelerometerEvents.first; |
| |
| expect(event.x, sensorData[0]); |
| expect(event.y, sensorData[1]); |
| expect(event.z, sensorData[2]); |
| }); |
| |
| test('$gyroscopeEvents are streamed', () async { |
| const String channelName = 'plugins.flutter.io/sensors/gyroscope'; |
| const List<double> sensorData = <double>[3.0, 4.0, 5.0]; |
| _initializeFakeSensorChannel(channelName, sensorData); |
| |
| final GyroscopeEvent event = await gyroscopeEvents.first; |
| |
| expect(event.x, sensorData[0]); |
| expect(event.y, sensorData[1]); |
| expect(event.z, sensorData[2]); |
| }); |
| |
| test('$userAccelerometerEvents are streamed', () async { |
| const String channelName = 'plugins.flutter.io/sensors/user_accel'; |
| const List<double> sensorData = <double>[6.0, 7.0, 8.0]; |
| _initializeFakeSensorChannel(channelName, sensorData); |
| |
| final UserAccelerometerEvent event = await userAccelerometerEvents.first; |
| |
| expect(event.x, sensorData[0]); |
| expect(event.y, sensorData[1]); |
| expect(event.z, sensorData[2]); |
| }); |
| } |
| |
| void _initializeFakeSensorChannel(String channelName, List<double> sensorData) { |
| const StandardMethodCodec standardMethod = StandardMethodCodec(); |
| |
| void _emitEvent(ByteData event) { |
| ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( |
| channelName, |
| event, |
| (ByteData reply) {}, |
| ); |
| } |
| |
| ServicesBinding.instance.defaultBinaryMessenger |
| .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') { |
| return standardMethod.encodeSuccessEnvelope(null); |
| } else { |
| fail('Expected listen or cancel'); |
| } |
| }); |
| } |