| // Copyright 2016 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 'error.dart'; |
| |
| /// An object sent from the Flutter Driver to a Flutter application to instruct |
| /// the application to perform a task. |
| abstract class Command { |
| /// Identifies the type of the command object and of the handler. |
| String get kind; |
| |
| /// Serializes this command to parameter name/value pairs. |
| Map<String, String> serialize(); |
| } |
| |
| /// An object sent from a Flutter application back to the Flutter Driver in |
| /// response to a command. |
| abstract class Result { // ignore: one_member_abstracts |
| /// Serializes this message to a JSON map. |
| Map<String, dynamic> toJson(); |
| } |
| |
| /// A serializable reference to an object that lives in the application isolate. |
| class ObjectRef extends Result { |
| ObjectRef(this.objectReferenceKey); |
| |
| ObjectRef.notFound() : this(null); |
| |
| static ObjectRef fromJson(Map<String, dynamic> json) { |
| return json['objectReferenceKey'] != null |
| ? new ObjectRef(json['objectReferenceKey']) |
| : null; |
| } |
| |
| /// Identifier used to dereference an object. |
| /// |
| /// This value is generated by the application-side isolate. Flutter driver |
| /// tests should not generate these keys. |
| final String objectReferenceKey; |
| |
| @override |
| Map<String, dynamic> toJson() => { |
| 'objectReferenceKey': objectReferenceKey, |
| }; |
| } |
| |
| /// A command aimed at an object represented by [targetRef]. |
| /// |
| /// Implementations must provide a concrete [kind]. If additional data is |
| /// required beyond the [targetRef] the implementation may override [serialize] |
| /// and add more keys to the returned map. |
| abstract class CommandWithTarget extends Command { |
| CommandWithTarget(ObjectRef ref) : this.targetRef = ref?.objectReferenceKey { |
| if (ref == null) |
| throw new DriverError('${this.runtimeType} target cannot be null'); |
| |
| if (ref.objectReferenceKey == null) |
| throw new DriverError('${this.runtimeType} target reference cannot be null'); |
| } |
| |
| /// Refers to the object targeted by this command. |
| final String targetRef; |
| |
| /// This method is meant to be overridden if data in addition to [targetRef] |
| /// is serialized to JSON. |
| /// |
| /// Example: |
| /// |
| /// Map<String, String> toJson() => super.toJson()..addAll({ |
| /// 'foo': this.foo, |
| /// }); |
| @override |
| Map<String, String> serialize() => <String, String>{ |
| 'targetRef': targetRef, |
| }; |
| } |