| // 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:convert'; | |
| // This code has to be available in both the Flutter app and Dart VM test. | |
| // ignore: implementation_imports | |
| import 'package:flutter_driver/src/common/message.dart'; | |
| /// A command that is forwarded to a registered plugin. | |
| final class NativeCommand extends Command { | |
| /// Creates a new [NativeCommand] with the given [method]. | |
| const NativeCommand(this.method, {this.arguments, super.timeout}); | |
| /// Tries to tap a native view by a selector. | |
| factory NativeCommand.tap(NativeFinder finder) { | |
| return NativeCommand('tap_view', arguments: finder); | |
| } | |
| /// Requests that the device be rotated to landscape mode. | |
| static const NativeCommand rotateLandscape = NativeCommand('rotate_landscape'); | |
| /// Requests that the device reset its rotation to the default orientation. | |
| static const NativeCommand rotateDefault = NativeCommand('rotate_default'); | |
| /// Pings the device to ensure it is responsive. | |
| static const NativeCommand ping = NativeCommand('ping'); | |
| /// Gets the SDK version code. | |
| static const NativeCommand getSdkVersion = NativeCommand('sdk_version'); | |
| /// Gets whether the device is an emulator. | |
| static const NativeCommand getIsEmulator = NativeCommand('is_emulator'); | |
| /// The method to call on the plugin. | |
| final String method; | |
| /// What arguments to pass when invoking the [method]. | |
| final Object? arguments; | |
| @override | |
| String get kind => 'native_driver'; | |
| @override | |
| Map<String, String> serialize() { | |
| final Map<String, String> serialized = super.serialize(); | |
| serialized['method'] = method; | |
| if (arguments != null) { | |
| serialized['arguments'] = jsonEncode(arguments); | |
| } | |
| return serialized; | |
| } | |
| } | |
| /// A result from a [NativeCommand]. | |
| final class NativeResult extends Result { | |
| /// Creates a new [NativeResult]. | |
| const NativeResult(); | |
| @override | |
| Map<String, dynamic> toJson() => const <String, Object?>{}; | |
| } | |
| /// An object that describes searching for _native_ elements. | |
| sealed class NativeFinder { | |
| const NativeFinder(); | |
| /// Serializes to JSON. | |
| Map<String, Object?> toJson() => const <String, Object?>{}; | |
| } | |
| /// Finds a native element by its native accessibility label. | |
| final class ByNativeAccessibilityLabel extends NativeFinder { | |
| /// Creates a new [ByNativeSemanticsLabel] finder. | |
| const ByNativeAccessibilityLabel(this.label); | |
| /// The label to search for. | |
| /// | |
| /// ## Android | |
| /// | |
| /// On Android, this label is the `contentDescription` of the view: | |
| /// | |
| /// ```java | |
| /// view.setContentDescription("My Label"); | |
| /// ``` | |
| final String label; | |
| @override | |
| Map<String, String> toJson() { | |
| return <String, String>{'kind': 'byNativeAccessibilityLabel', 'label': label}; | |
| } | |
| /// Deserializes this finder from the value generated by [serialize]. | |
| static ByNativeAccessibilityLabel deserialize(Map<String, String> params) { | |
| return ByNativeAccessibilityLabel(params['label']!); | |
| } | |
| } | |
| /// Finds a native element by its native integer-based ID. | |
| final class ByNativeIntegerId extends NativeFinder { | |
| /// Creates a new [ByNativeIntegerId] finder. | |
| const ByNativeIntegerId(this.id); | |
| /// The integer ID to search for. | |
| /// | |
| /// ## Android | |
| /// | |
| /// On Android, this ID is the `View.getId()` of the view: | |
| /// | |
| /// ```java | |
| /// view.setId(42); | |
| /// ``` | |
| final int id; | |
| @override | |
| Map<String, String> toJson() { | |
| return <String, String>{'kind': 'byNativeIntegerId', 'id': id.toString()}; | |
| } | |
| /// Deserializes this finder from the value generated by [serialize]. | |
| static ByNativeIntegerId deserialize(Map<String, String> params) { | |
| return ByNativeIntegerId(int.parse(params['id']!)); | |
| } | |
| } |