| // 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:stream_channel/stream_channel.dart'; | |
| /// A remote device where tests can be executed on. | |
| /// | |
| /// Reusability of an instance across multiple runs is not guaranteed for all | |
| /// implementations. | |
| /// | |
| /// Methods may throw [TestDeviceException] if a problem is encountered. | |
| abstract class TestDevice { | |
| /// Starts the test device with the provided entrypoint. | |
| /// | |
| /// Returns a channel that can be used to communicate with the test process. | |
| /// | |
| /// It is up to the device to determine if [entrypointPath] is a precompiled | |
| /// or raw source file. | |
| Future<StreamChannel<String>> start(String entrypointPath); | |
| /// Should complete with null if the VM Service is not enabled. | |
| Future<Uri?> get vmServiceUri; | |
| /// Terminates the test device. | |
| Future<void> kill(); | |
| /// Waits for the test device to stop. | |
| Future<void> get finished; | |
| } | |
| /// Thrown when the device encounters a problem. | |
| class TestDeviceException implements Exception { | |
| TestDeviceException(this.message, this.stackTrace); | |
| final String message; | |
| final StackTrace stackTrace; | |
| @override | |
| String toString() => 'TestDeviceException($message)'; | |
| } |