blob: 2ddfdb3acc858f4338bda29985c2de0da7dac478 [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. 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:async/async.dart';
/// The abstract class of environments in which test suites are
/// loaded—specifically, browsers and the Dart VM.
abstract class Environment {
/// Whether this environment supports interactive debugging.
bool get supportsDebugging;
/// The URL of the Dart VM Observatory for this environment, or `null` if this
/// environment doesn't run the Dart VM or the URL couldn't be detected.
Uri get observatoryUrl;
/// The URL of the remote debugger for this environment, or `null` if it isn't
/// enabled.
Uri get remoteDebuggerUrl;
/// A broadcast stream that emits a `null` event whenever the user tells the
/// environment to restart the current test once it's finished.
///
/// Never emits an error, and never closes.
Stream get onRestart;
/// Displays information indicating that the test runner is paused.
///
/// The returned operation will complete when the user takes action within the
/// environment that should unpause the runner. If the runner is unpaused
/// elsewhere, the operation should be canceled.
CancelableOperation displayPause();
}
/// The default environment for platform plugins.
class PluginEnvironment implements Environment {
@override
final supportsDebugging = false;
@override
Stream get onRestart => StreamController.broadcast().stream;
const PluginEnvironment();
@override
Uri get observatoryUrl => null;
@override
Uri get remoteDebuggerUrl => null;
@override
CancelableOperation displayPause() => throw UnsupportedError(
'PluginEnvironment.displayPause is not supported.');
}