| // Copyright 2013 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 'dart:math' as math; | |
| import 'package:image/image.dart'; | |
| import 'package:test_api/backend.dart'; | |
| /// Provides the environment for a specific web browser. | |
| abstract class BrowserEnvironment { | |
| /// Name of the browser. Used in logging commands. | |
| String get name; | |
| /// The [Runtime] used by `package:test` to identify this browser type. | |
| Runtime get packageTestRuntime; | |
| /// The name of the configuration YAML file used to configure `package:test`. | |
| /// | |
| /// The configuration file is expected to be a direct child of the `web_ui` | |
| /// directory. | |
| String get packageTestConfigurationYamlFile; | |
| /// Prepares the OS environment to run tests for this browser. | |
| /// | |
| /// This may include things like installing browsers, and starting web drivers, | |
| /// iOS Simulators, and/or Android emulators. | |
| /// | |
| /// Typically the browser environment is prepared once and supports multiple | |
| /// browser instances. | |
| Future<void> prepare(); | |
| /// Perform any necessary teardown steps | |
| Future<void> cleanup(); | |
| /// Launches a browser instance. | |
| /// | |
| /// The browser will be directed to open the provided [url]. | |
| /// | |
| /// If [debug] is true and the browser supports debugging, launches the | |
| /// browser in debug mode by pausing test execution after the code is loaded | |
| /// but before calling the `main()` function of the test, giving the | |
| /// developer a chance to set breakpoints. | |
| Future<Browser> launchBrowserInstance( | |
| Uri url, { | |
| bool debug = false, | |
| }); | |
| } | |
| /// An interface for running browser instances. | |
| /// | |
| /// This is intentionally coarse-grained: browsers are controlled primary from | |
| /// inside a single tab. Thus this interface only provides support for closing | |
| /// the browser and seeing if it closes itself. | |
| /// | |
| /// Any errors starting or running the browser process are reported through | |
| /// [onExit]. | |
| abstract class Browser { | |
| /// The Dart VM Service URL for this browser. | |
| /// | |
| /// Returns `null` for browsers that aren't running the Dart VM, or | |
| /// if the Dart VM Service URL can't be found. | |
| Future<Uri>? get vmServiceUrl => null; | |
| /// The remote debugger URL for this browser. | |
| /// | |
| /// Returns `null` for browsers that don't support remote debugging, | |
| /// or if the remote debugging URL can't be found. | |
| Future<Uri>? get remoteDebuggerUrl => null; | |
| /// A future that completes when the browser exits. | |
| /// | |
| /// If there's a problem starting or running the browser, this will complete | |
| /// with an error. | |
| Future<void> get onExit; | |
| /// Closes the browser | |
| /// | |
| /// Returns the same [Future] as [onExit], except that it won't emit | |
| /// exceptions. | |
| Future<void> close(); | |
| /// Returns whether this browser supports taking screenshots | |
| bool get supportsScreenshots => false; | |
| /// Capture a screenshot. | |
| /// | |
| /// This will throw if the browser doesn't support screenshotting. | |
| /// Please read the details for the implementing classes. | |
| Future<Image> captureScreenshot(math.Rectangle<num> region) => | |
| throw Exception('This browser does not support screenshots'); | |
| } |