| Index: tools/testing/dart/configuration.dart
|
| diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
|
| deleted file mode 100644
|
| index 2b41503b042d9955ad9f6503ff84fdc60bc64071..0000000000000000000000000000000000000000
|
| --- a/tools/testing/dart/configuration.dart
|
| +++ /dev/null
|
| @@ -1,741 +0,0 @@
|
| -// Copyright (c) 2017, 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 'dart:convert';
|
| -import 'dart:io';
|
| -
|
| -import 'compiler_configuration.dart';
|
| -import 'http_server.dart';
|
| -import 'path.dart';
|
| -import 'runtime_configuration.dart';
|
| -import 'test_suite.dart';
|
| -
|
| -/// All of the contextual information to determine how a test suite should be
|
| -/// run.
|
| -///
|
| -/// Includes the compiler used to compile the code, the runtime the result is
|
| -/// executed on, etc.
|
| -class Configuration {
|
| - Configuration(
|
| - {this.architecture,
|
| - this.compiler,
|
| - this.mode,
|
| - this.progress,
|
| - this.runtime,
|
| - this.system,
|
| - this.selectors,
|
| - this.appendLogs,
|
| - this.batch,
|
| - this.batchDart2JS,
|
| - this.copyCoreDumps,
|
| - this.hotReload,
|
| - this.hotReloadRollback,
|
| - this.isChecked,
|
| - this.isStrong,
|
| - this.isHostChecked,
|
| - this.isCsp,
|
| - this.isMinified,
|
| - this.isVerbose,
|
| - this.listTests,
|
| - this.printTiming,
|
| - this.printReport,
|
| - this.reportInJson,
|
| - this.resetBrowser,
|
| - this.skipCompilation,
|
| - this.useBlobs,
|
| - this.useSdk,
|
| - this.useFastStartup,
|
| - this.useDart2JSWithKernel,
|
| - this.writeDebugLog,
|
| - this.writeTestOutcomeLog,
|
| - this.drtPath,
|
| - this.dartiumPath,
|
| - this.chromePath,
|
| - this.safariPath,
|
| - this.firefoxPath,
|
| - this.dartPath,
|
| - this.dartPrecompiledPath,
|
| - this.flutterPath,
|
| - this.recordingPath,
|
| - this.replayPath,
|
| - this.taskCount,
|
| - int timeout,
|
| - this.shardCount,
|
| - this.shard,
|
| - this.stepName,
|
| - this.testServerPort,
|
| - this.testServerCrossOriginPort,
|
| - this.testDriverErrorPort,
|
| - this.localIP,
|
| - this.dart2jsOptions,
|
| - this.vmOptions,
|
| - String packages,
|
| - this.packageRoot,
|
| - this.suiteDirectory,
|
| - this.builderTag,
|
| - this.reproducingArguments})
|
| - : _packages = packages,
|
| - _timeout = timeout;
|
| -
|
| - final Architecture architecture;
|
| - final Compiler compiler;
|
| - final Mode mode;
|
| - final Progress progress;
|
| - final Runtime runtime;
|
| - final System system;
|
| -
|
| - final Map<String, RegExp> selectors;
|
| -
|
| - // Boolean flags.
|
| -
|
| - final bool appendLogs;
|
| - final bool batch;
|
| - final bool batchDart2JS;
|
| - final bool copyCoreDumps;
|
| - final bool hotReload;
|
| - final bool hotReloadRollback;
|
| - final bool isChecked;
|
| - final bool isStrong;
|
| - final bool isHostChecked;
|
| - final bool isCsp;
|
| - final bool isMinified;
|
| - final bool isVerbose;
|
| - final bool listTests;
|
| - final bool printTiming;
|
| - final bool printReport;
|
| - final bool reportInJson;
|
| - final bool resetBrowser;
|
| - final bool skipCompilation;
|
| - final bool useBlobs;
|
| - final bool useSdk;
|
| - final bool useFastStartup;
|
| - final bool useDart2JSWithKernel;
|
| - final bool writeDebugLog;
|
| - final bool writeTestOutcomeLog;
|
| -
|
| - // Various file paths.
|
| -
|
| - final String drtPath;
|
| - final String dartiumPath;
|
| - final String chromePath;
|
| - final String safariPath;
|
| - final String firefoxPath;
|
| - final String dartPath;
|
| - final String dartPrecompiledPath;
|
| - final String flutterPath;
|
| - final String recordingPath;
|
| - final String replayPath;
|
| -
|
| - final int taskCount;
|
| - final int shardCount;
|
| - final int shard;
|
| - final String stepName;
|
| -
|
| - final int testServerPort;
|
| - final int testServerCrossOriginPort;
|
| - final int testDriverErrorPort;
|
| - final String localIP;
|
| -
|
| - /// Extra dart2js options passed to the testing script.
|
| - final List<String> dart2jsOptions;
|
| -
|
| - /// Extra VM options passed to the testing script.
|
| - final List<String> vmOptions;
|
| -
|
| - String _packages;
|
| - String get packages {
|
| - // If the .packages file path wasn't given, find it.
|
| - if (packageRoot == null && _packages == null) {
|
| - _packages = TestUtils.dartDirUri.resolve('.packages').toFilePath();
|
| - }
|
| -
|
| - return _packages;
|
| - }
|
| -
|
| - final String packageRoot;
|
| - final String suiteDirectory;
|
| - final String builderTag;
|
| - final List<String> reproducingArguments;
|
| -
|
| - TestingServers _servers;
|
| - TestingServers get servers {
|
| - if (_servers == null) {
|
| - throw new StateError("Servers have not been started yet.");
|
| - }
|
| - return _servers;
|
| - }
|
| -
|
| - /// The base directory named for this configuration, like:
|
| - ///
|
| - /// none_vm_release_x64
|
| - String _configurationDirectory;
|
| - String get configurationDirectory {
|
| - // Lazy initialize and cache since it requires hitting the file system.
|
| - if (_configurationDirectory == null) {
|
| - _configurationDirectory = _calculateDirectory();
|
| - }
|
| -
|
| - return _configurationDirectory;
|
| - }
|
| -
|
| - /// The build directory path for this configuration, like:
|
| - ///
|
| - /// build/none_vm_release_x64
|
| - String get buildDirectory => system.outputDirectory + configurationDirectory;
|
| -
|
| - int _timeout;
|
| - int get timeout {
|
| - if (_timeout == null) {
|
| - var isReload = hotReload || hotReloadRollback;
|
| -
|
| - var compilerMulitiplier = compilerConfiguration.timeoutMultiplier;
|
| - var runtimeMultiplier = runtimeConfiguration.timeoutMultiplier(
|
| - mode: mode,
|
| - isChecked: isChecked,
|
| - isReload: isReload,
|
| - arch: architecture);
|
| -
|
| - _timeout = 60 * compilerMulitiplier * runtimeMultiplier;
|
| - }
|
| -
|
| - return _timeout;
|
| - }
|
| -
|
| - List<String> get standardOptions {
|
| - if (compiler != Compiler.dart2js) {
|
| - return const ["--ignore-unrecognized-flags"];
|
| - }
|
| -
|
| - var args = ['--generate-code-with-compile-time-errors', '--test-mode'];
|
| - if (isChecked) args.add('--enable-checked-mode');
|
| -
|
| - if (!runtime.isBrowser) {
|
| - args.add("--allow-mock-compilation");
|
| - args.add("--categories=all");
|
| - }
|
| -
|
| - if (isMinified) args.add("--minify");
|
| - if (isCsp) args.add("--csp");
|
| - if (useFastStartup) args.add("--fast-startup");
|
| - if (useDart2JSWithKernel) args.add("--use-kernel");
|
| - return args;
|
| - }
|
| -
|
| - String _windowsSdkPath;
|
| - String get windowsSdkPath {
|
| - if (!Platform.isWindows) {
|
| - throw new StateError(
|
| - "Should not use windowsSdkPath when not running on Windows.");
|
| - }
|
| -
|
| - if (_windowsSdkPath == null) {
|
| - // When running tests on Windows, use cdb from depot_tools to dump
|
| - // stack traces of tests timing out.
|
| - try {
|
| - var path = new Path("build/win_toolchain.json").toNativePath();
|
| - var text = new File(path).readAsStringSync();
|
| - _windowsSdkPath = JSON.decode(text)['win_sdk'] as String;
|
| - } on dynamic {
|
| - // Ignore errors here. If win_sdk is not found, stack trace dumping
|
| - // for timeouts won't work.
|
| - }
|
| - }
|
| -
|
| - return _windowsSdkPath;
|
| - }
|
| -
|
| - /// Gets the local file path to the browser executable for this configuration.
|
| - String get browserLocation {
|
| - // If the user has explicitly configured a browser path, use it.
|
| - String location;
|
| - switch (runtime) {
|
| - case Runtime.chrome:
|
| - location = chromePath;
|
| - break;
|
| - case Runtime.dartium:
|
| - location = dartiumPath;
|
| - break;
|
| - case Runtime.drt:
|
| - location = drtPath;
|
| - break;
|
| - case Runtime.firefox:
|
| - location = firefoxPath;
|
| - break;
|
| - case Runtime.flutter:
|
| - location = flutterPath;
|
| - break;
|
| - case Runtime.safari:
|
| - location = safariPath;
|
| - break;
|
| - }
|
| -
|
| - if (location != null) return location;
|
| -
|
| - const locations = const {
|
| - Runtime.firefox: const {
|
| - System.windows: 'C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe',
|
| - System.linux: 'firefox',
|
| - System.macos: '/Applications/Firefox.app/Contents/MacOS/firefox'
|
| - },
|
| - Runtime.chrome: const {
|
| - System.windows:
|
| - 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
|
| - System.macos:
|
| - '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
| - System.linux: 'google-chrome'
|
| - },
|
| - Runtime.dartium: const {
|
| - System.windows: 'client\\tests\\dartium\\chrome.exe',
|
| - System.macos:
|
| - 'client/tests/dartium/Chromium.app/Contents/MacOS/Chromium',
|
| - System.linux: 'client/tests/dartium/chrome'
|
| - },
|
| - Runtime.safari: const {
|
| - System.macos: '/Applications/Safari.app/Contents/MacOS/Safari'
|
| - },
|
| - Runtime.safariMobileSim: const {
|
| - System.macos: '/Applications/Xcode.app/Contents/Developer/Platforms/'
|
| - 'iPhoneSimulator.platform/Developer/Applications/'
|
| - 'iPhone Simulator.app/Contents/MacOS/iPhone Simulator'
|
| - },
|
| - Runtime.ie9: const {
|
| - System.windows: 'C:\\Program Files\\Internet Explorer\\iexplore.exe'
|
| - },
|
| - Runtime.ie10: const {
|
| - System.windows: 'C:\\Program Files\\Internet Explorer\\iexplore.exe'
|
| - },
|
| - Runtime.ie11: const {
|
| - System.windows: 'C:\\Program Files\\Internet Explorer\\iexplore.exe'
|
| - }
|
| - };
|
| -
|
| - location = locations[runtime][System.find(Platform.operatingSystem)];
|
| -
|
| - if (location == null) {
|
| - throw "${runtime.name} is not supported on ${Platform.operatingSystem}";
|
| - }
|
| -
|
| - return location;
|
| - }
|
| -
|
| - RuntimeConfiguration _runtimeConfiguration;
|
| - RuntimeConfiguration get runtimeConfiguration =>
|
| - _runtimeConfiguration ??= new RuntimeConfiguration(this);
|
| -
|
| - CompilerConfiguration _compilerConfiguration;
|
| - CompilerConfiguration get compilerConfiguration =>
|
| - _compilerConfiguration ??= new CompilerConfiguration(this);
|
| -
|
| - /// Determines if this configuration has a compatible compiler and runtime
|
| - /// and other valid fields.
|
| - ///
|
| - /// Prints a warning if the configuration isn't valid. Returns whether or not
|
| - /// it is.
|
| - bool validate() {
|
| - var isValid = true;
|
| - var validRuntimes = compiler.supportedRuntimes;
|
| -
|
| - if (!validRuntimes.contains(runtime)) {
|
| - print("Warning: combination of compiler '${compiler.name}' and "
|
| - "runtime '${runtime.name}' is invalid. Skipping this combination.");
|
| - isValid = false;
|
| - }
|
| -
|
| - if (runtime.isIE && Platform.operatingSystem != 'windows') {
|
| - print("Warning: cannot run Internet Explorer on non-Windows operating"
|
| - " system.");
|
| - isValid = false;
|
| - }
|
| -
|
| - if (shard < 1 || shard > shardCount) {
|
| - print("Error: shard index is $shard out of $shardCount shards");
|
| - isValid = false;
|
| - }
|
| -
|
| - if (runtime == Runtime.flutter && flutterPath == null) {
|
| - print("-rflutter requires the flutter engine executable to "
|
| - "be specified using --flutter");
|
| - isValid = false;
|
| - }
|
| -
|
| - if (runtime == Runtime.flutter && architecture != Architecture.x64) {
|
| - isValid = false;
|
| - print("-rflutter is applicable only for --arch=x64");
|
| - }
|
| -
|
| - return isValid;
|
| - }
|
| -
|
| - /// Starts global HTTP servers that serve the entire dart repo.
|
| - ///
|
| - /// The HTTP server is available on `window.location.port`, and a second
|
| - /// server for cross-domain tests can be found by calling
|
| - /// `getCrossOriginPortNumber()`.
|
| - Future startServers() {
|
| - _servers = new TestingServers(
|
| - buildDirectory, isCsp, runtime, null, packageRoot, packages);
|
| - var future = servers.startServers(localIP,
|
| - port: testServerPort, crossOriginPort: testServerCrossOriginPort);
|
| -
|
| - if (isVerbose) {
|
| - future = future.then((_) {
|
| - print('Started HttpServers: ${servers.httpServerCommandLine()}');
|
| - });
|
| - }
|
| -
|
| - return future;
|
| - }
|
| -
|
| - void stopServers() {
|
| - if (_servers != null) _servers.stopServers();
|
| - }
|
| -
|
| - /// Returns the correct configuration directory (the last component of the
|
| - /// output directory path) for regular dart checkouts.
|
| - ///
|
| - /// Dartium checkouts use the `--build-directory` option to pass in the
|
| - /// correct build directory explicitly. We allow our code to have been cross
|
| - /// compiled, i.e., that there is an X in front of the arch. We don't allow
|
| - /// both a cross compiled and a normal version to be present (except if you
|
| - /// specifically pass in the build_directory).
|
| - String _calculateDirectory() {
|
| - // Capitalize the mode name.
|
| - var modeName =
|
| - mode.name.substring(0, 1).toUpperCase() + mode.name.substring(1);
|
| -
|
| - var os = '';
|
| - if (system == System.android) os = "Android";
|
| -
|
| - var arch = architecture.name.toUpperCase();
|
| - var normal = '$modeName$os$arch';
|
| - var cross = '$modeName${os}X$arch';
|
| - var outDir = system.outputDirectory;
|
| - var normalDir = new Directory(new Path('$outDir$normal').toNativePath());
|
| - var crossDir = new Directory(new Path('$outDir$cross').toNativePath());
|
| -
|
| - if (normalDir.existsSync() && crossDir.existsSync()) {
|
| - throw "You can't have both $normalDir and $crossDir. We don't know which"
|
| - " binary to use.";
|
| - }
|
| -
|
| - if (crossDir.existsSync()) return cross;
|
| -
|
| - return normal;
|
| - }
|
| -}
|
| -
|
| -class Architecture {
|
| - static const ia32 = const Architecture._('ia32');
|
| - static const x64 = const Architecture._('x64');
|
| - static const arm = const Architecture._('arm');
|
| - static const armv6 = const Architecture._('armv6');
|
| - static const armv5te = const Architecture._('armv5te');
|
| - static const arm64 = const Architecture._('arm64');
|
| - static const simarm = const Architecture._('simarm');
|
| - static const simarmv6 = const Architecture._('simarmv6');
|
| - static const simarmv5te = const Architecture._('simarmv5te');
|
| - static const simarm64 = const Architecture._('simarm64');
|
| - static const mips = const Architecture._('mips');
|
| - static const simmips = const Architecture._('simmips');
|
| - static const simdbc = const Architecture._('simdbc');
|
| - static const simdbc64 = const Architecture._('simdbc64');
|
| -
|
| - static final List<String> names = _all.keys.toList();
|
| -
|
| - static final _all = new Map<String, Architecture>.fromIterable([
|
| - ia32,
|
| - x64,
|
| - arm,
|
| - armv6,
|
| - armv5te,
|
| - arm64,
|
| - simarm,
|
| - simarmv6,
|
| - simarmv5te,
|
| - simarm64,
|
| - mips,
|
| - simmips,
|
| - simdbc,
|
| - simdbc64
|
| - ], key: (Architecture architecture) => architecture.name);
|
| -
|
| - static Architecture find(String name) {
|
| - var architecture = _all[name];
|
| - if (architecture != null) return architecture;
|
| -
|
| - throw new ArgumentError('Unknown architecture "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const Architecture._(this.name);
|
| -
|
| - String toString() => "Architecture($name)";
|
| -}
|
| -
|
| -class Compiler {
|
| - static const none = const Compiler._('none');
|
| - static const precompiler = const Compiler._('precompiler');
|
| - static const dart2js = const Compiler._('dart2js');
|
| - static const dart2analyzer = const Compiler._('dart2analyzer');
|
| - static const appJit = const Compiler._('app_jit');
|
| - static const dartk = const Compiler._('dartk');
|
| - static const dartkp = const Compiler._('dartkp');
|
| -
|
| - static final List<String> names = _all.keys.toList();
|
| -
|
| - static final _all = new Map<String, Compiler>.fromIterable(
|
| - [none, precompiler, dart2js, dart2analyzer, appJit, dartk, dartkp],
|
| - key: (Compiler compiler) => compiler.name);
|
| -
|
| - static Compiler find(String name) {
|
| - var compiler = _all[name];
|
| - if (compiler != null) return compiler;
|
| -
|
| - throw new ArgumentError('Unknown compiler "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const Compiler._(this.name);
|
| -
|
| - /// Gets the runtimes this compiler can target.
|
| - List<Runtime> get supportedRuntimes {
|
| - switch (this) {
|
| - case Compiler.dart2js:
|
| - // Note: by adding 'none' as a configuration, if the user
|
| - // runs test.py -c dart2js -r drt,none the dart2js_none and
|
| - // dart2js_drt will be duplicating work. If later we don't need 'none'
|
| - // with dart2js, we should remove it from here.
|
| - return const [
|
| - Runtime.d8,
|
| - Runtime.jsshell,
|
| - Runtime.drt,
|
| - Runtime.none,
|
| - Runtime.dartium,
|
| - Runtime.firefox,
|
| - Runtime.chrome,
|
| - Runtime.safari,
|
| - Runtime.ie9,
|
| - Runtime.ie10,
|
| - Runtime.ie11,
|
| - Runtime.opera,
|
| - Runtime.chromeOnAndroid,
|
| - Runtime.safariMobileSim
|
| - ];
|
| -
|
| - case Compiler.dart2analyzer:
|
| - return const [Runtime.none];
|
| - case Compiler.appJit:
|
| - case Compiler.dartk:
|
| - return const [Runtime.vm, Runtime.selfCheck, Runtime.none];
|
| - case Compiler.precompiler:
|
| - case Compiler.dartkp:
|
| - return const [Runtime.dartPrecompiled];
|
| - case Compiler.none:
|
| - return const [
|
| - Runtime.vm,
|
| - Runtime.flutter,
|
| - Runtime.drt,
|
| - Runtime.dartium,
|
| - Runtime.contentShellOnAndroid,
|
| - Runtime.dartiumOnAndroid
|
| - ];
|
| - }
|
| -
|
| - throw "unreachable";
|
| - }
|
| -
|
| - String toString() => "Compiler($name)";
|
| -}
|
| -
|
| -class Mode {
|
| - static const debug = const Mode._('debug');
|
| - static const product = const Mode._('product');
|
| - static const release = const Mode._('release');
|
| -
|
| - static final List<String> names = _all.keys.toList();
|
| -
|
| - static final _all = new Map<String, Mode>.fromIterable(
|
| - [debug, product, release],
|
| - key: (Mode mode) => mode.name);
|
| -
|
| - static Mode find(String name) {
|
| - var mode = _all[name];
|
| - if (mode != null) return mode;
|
| -
|
| - throw new ArgumentError('Unknown mode "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const Mode._(this.name);
|
| -
|
| - bool get isDebug => this == debug;
|
| -
|
| - String toString() => "Mode($name)";
|
| -}
|
| -
|
| -class Progress {
|
| - static const compact = const Progress._('compact');
|
| - static const color = const Progress._('color');
|
| - static const line = const Progress._('line');
|
| - static const verbose = const Progress._('verbose');
|
| - static const silent = const Progress._('silent');
|
| - static const status = const Progress._('status');
|
| - static const buildbot = const Progress._('buildbot');
|
| - static const diff = const Progress._('diff');
|
| -
|
| - static final List<String> names = _all.keys.toList();
|
| -
|
| - static final _all = new Map<String, Progress>.fromIterable(
|
| - [compact, color, line, verbose, silent, status, buildbot, diff],
|
| - key: (Progress progress) => progress.name);
|
| -
|
| - static Progress find(String name) {
|
| - var progress = _all[name];
|
| - if (progress != null) return progress;
|
| -
|
| - throw new ArgumentError('Unknown progress type "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const Progress._(this.name);
|
| -
|
| - String toString() => "Progress($name)";
|
| -}
|
| -
|
| -class Runtime {
|
| - static const vm = const Runtime._('vm');
|
| - static const flutter = const Runtime._('flutter');
|
| - static const dartPrecompiled = const Runtime._('dart_precompiled');
|
| - static const d8 = const Runtime._('d8');
|
| - static const jsshell = const Runtime._('jsshell');
|
| - static const drt = const Runtime._('drt');
|
| - static const dartium = const Runtime._('dartium');
|
| - static const firefox = const Runtime._('firefox');
|
| - static const chrome = const Runtime._('chrome');
|
| - static const safari = const Runtime._('safari');
|
| - static const ie9 = const Runtime._('ie9');
|
| - static const ie10 = const Runtime._('ie10');
|
| - static const ie11 = const Runtime._('ie11');
|
| - static const opera = const Runtime._('opera');
|
| - static const chromeOnAndroid = const Runtime._('chromeOnAndroid');
|
| - static const safariMobileSim = const Runtime._('safarimobilesim');
|
| - static const contentShellOnAndroid = const Runtime._('ContentShellOnAndroid');
|
| - static const dartiumOnAndroid = const Runtime._('DartiumOnAndroid');
|
| - static const selfCheck = const Runtime._('self_check');
|
| - static const none = const Runtime._('none');
|
| -
|
| - static final List<String> names = _all.keys.toList()..add("ff");
|
| -
|
| - static final _all = new Map<String, Runtime>.fromIterable([
|
| - vm,
|
| - flutter,
|
| - dartPrecompiled,
|
| - d8,
|
| - jsshell,
|
| - drt,
|
| - dartium,
|
| - firefox,
|
| - chrome,
|
| - safari,
|
| - ie9,
|
| - ie10,
|
| - ie11,
|
| - opera,
|
| - chromeOnAndroid,
|
| - safariMobileSim,
|
| - contentShellOnAndroid,
|
| - dartiumOnAndroid,
|
| - selfCheck,
|
| - none
|
| - ], key: (Runtime runtime) => runtime.name);
|
| -
|
| - static Runtime find(String name) {
|
| - // Allow "ff" as a synonym for Firefox.
|
| - if (name == "ff") return firefox;
|
| -
|
| - var runtime = _all[name];
|
| - if (runtime != null) return runtime;
|
| -
|
| - throw new ArgumentError('Unknown runtime "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const Runtime._(this.name);
|
| -
|
| - bool get isBrowser => const [
|
| - drt,
|
| - dartium,
|
| - ie9,
|
| - ie10,
|
| - ie11,
|
| - safari,
|
| - opera,
|
| - chrome,
|
| - firefox,
|
| - chromeOnAndroid,
|
| - safariMobileSim,
|
| - contentShellOnAndroid,
|
| - dartiumOnAndroid,
|
| - ].contains(this);
|
| -
|
| - bool get isIE => name.startsWith("ie");
|
| - bool get isSafari => name.startsWith("safari");
|
| -
|
| - /// Whether this runtime is a command-line JavaScript environment.
|
| - bool get isJSCommandLine => const [d8, jsshell].contains(this);
|
| -
|
| - /// If the runtime doesn't support `Window.open`, we use iframes instead.
|
| - bool get requiresIFrame => !const [ie11, ie10].contains(this);
|
| -
|
| - String toString() => "Runtime($name)";
|
| -}
|
| -
|
| -class System {
|
| - static const android = const System._('android');
|
| - static const fuchsia = const System._('fuchsia');
|
| - static const linux = const System._('linux');
|
| - static const macos = const System._('macos');
|
| - static const windows = const System._('windows');
|
| -
|
| - static final List<String> names = _all.keys.toList();
|
| -
|
| - static final _all = new Map<String, System>.fromIterable(
|
| - [android, fuchsia, linux, macos, windows],
|
| - key: (System system) => system.name);
|
| -
|
| - static System find(String name) {
|
| - var system = _all[name];
|
| - if (system != null) return system;
|
| -
|
| - throw new ArgumentError('Unknown operating system "$name".');
|
| - }
|
| -
|
| - final String name;
|
| -
|
| - const System._(this.name);
|
| -
|
| - /// The root directory name for build outputs on this system.
|
| - String get outputDirectory {
|
| - switch (this) {
|
| - case android:
|
| - case fuchsia:
|
| - case linux:
|
| - case windows:
|
| - return 'out/';
|
| -
|
| - case macos:
|
| - return 'xcodebuild/';
|
| - }
|
| -
|
| - throw "unreachable";
|
| - }
|
| -
|
| - String toString() => "System($name)";
|
| -}
|
|
|