mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
263 lines
7.9 KiB
Dart
263 lines
7.9 KiB
Dart
// 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:io' as io show Platform, stdin, stdout;
|
|
|
|
/// Provides API parity with the `Platform` class in `dart:io`, but using
|
|
/// instance properties rather than static properties. This difference enables
|
|
/// the use of these APIs in tests, where you can provide mock implementations.
|
|
abstract class Platform {
|
|
/// Creates a new [Platform].
|
|
const Platform();
|
|
|
|
/// The number of processors of the machine.
|
|
int get numberOfProcessors;
|
|
|
|
/// The path separator used by the operating system to separate
|
|
/// components in file paths.
|
|
String get pathSeparator;
|
|
|
|
/// A string (`linux`, `macos`, `windows`, `android`, `ios`, or `fuchsia`)
|
|
/// representing the operating system.
|
|
String get operatingSystem;
|
|
|
|
/// A string representing the version of the operating system or platform.
|
|
String get operatingSystemVersion;
|
|
|
|
/// Get the local hostname for the system.
|
|
String get localHostname;
|
|
|
|
/// True if the operating system is Linux.
|
|
bool get isLinux => operatingSystem == 'linux';
|
|
|
|
/// True if the operating system is OS X.
|
|
bool get isMacOS => operatingSystem == 'macos';
|
|
|
|
/// True if the operating system is Windows.
|
|
bool get isWindows => operatingSystem == 'windows';
|
|
|
|
/// True if the operating system is Android.
|
|
bool get isAndroid => operatingSystem == 'android';
|
|
|
|
/// True if the operating system is iOS.
|
|
bool get isIOS => operatingSystem == 'ios';
|
|
|
|
/// True if the operating system is Fuchsia
|
|
bool get isFuchsia => operatingSystem == 'fuchsia';
|
|
|
|
/// The environment for this process.
|
|
///
|
|
/// The returned environment is an unmodifiable map whose content is
|
|
/// retrieved from the operating system on its first use.
|
|
///
|
|
/// Environment variables on Windows are case-insensitive. The map
|
|
/// returned on Windows is therefore case-insensitive and will convert
|
|
/// all keys to upper case. On other platforms the returned map is
|
|
/// a standard case-sensitive map.
|
|
Map<String, String> get environment;
|
|
|
|
/// The path of the executable used to run the script in this isolate.
|
|
///
|
|
/// The path returned is the literal path used to run the script. This
|
|
/// path might be relative or just be a name from which the executable
|
|
/// was found by searching the `PATH`.
|
|
///
|
|
/// To get the absolute path to the resolved executable use
|
|
/// [resolvedExecutable].
|
|
String get executable;
|
|
|
|
/// The path of the executable used to run the script in this
|
|
/// isolate after it has been resolved by the OS.
|
|
///
|
|
/// This is the absolute path, with all symlinks resolved, to the
|
|
/// executable used to run the script.
|
|
String get resolvedExecutable;
|
|
|
|
/// The absolute URI of the script being run in this
|
|
/// isolate.
|
|
///
|
|
/// If the script argument on the command line is relative,
|
|
/// it is resolved to an absolute URI before fetching the script, and
|
|
/// this absolute URI is returned.
|
|
///
|
|
/// URI resolution only does string manipulation on the script path, and this
|
|
/// may be different from the file system's path resolution behavior. For
|
|
/// example, a symbolic link immediately followed by '..' will not be
|
|
/// looked up.
|
|
///
|
|
/// If the executable environment does not support [script] an empty
|
|
/// [Uri] is returned.
|
|
Uri get script;
|
|
|
|
/// The flags passed to the executable used to run the script in this
|
|
/// isolate. These are the command-line flags between the executable name
|
|
/// and the script name. Each fetch of `executableArguments` returns a new
|
|
/// list containing the flags passed to the executable.
|
|
List<String> get executableArguments;
|
|
|
|
/// The value of the `--packages` flag passed to the executable
|
|
/// used to run the script in this isolate. This is the configuration which
|
|
/// specifies how Dart packages are looked up.
|
|
///
|
|
/// If there is no `--packages` flag, `null` is returned.
|
|
String get packageConfig;
|
|
|
|
/// The version of the current Dart runtime.
|
|
///
|
|
/// The returned `String` is formatted as the [semver](http://semver.org)
|
|
/// version string of the current dart runtime, possibly followed by
|
|
/// whitespace and other version and build details.
|
|
String get version;
|
|
|
|
/// When stdin is connected to a terminal, whether ANSI codes are supported.
|
|
bool get stdinSupportsAnsi;
|
|
|
|
/// When stdout is connected to a terminal, whether ANSI codes are supported.
|
|
bool get stdoutSupportsAnsi;
|
|
|
|
/// Get the name of the current locale.
|
|
String get localeName;
|
|
}
|
|
|
|
/// `Platform` implementation that delegates directly to `dart:io`.
|
|
class LocalPlatform extends Platform {
|
|
/// Creates a new [LocalPlatform].
|
|
const LocalPlatform();
|
|
|
|
@override
|
|
int get numberOfProcessors => io.Platform.numberOfProcessors;
|
|
|
|
@override
|
|
String get pathSeparator => io.Platform.pathSeparator;
|
|
|
|
@override
|
|
String get operatingSystem => io.Platform.operatingSystem;
|
|
|
|
@override
|
|
String get operatingSystemVersion => io.Platform.operatingSystemVersion;
|
|
|
|
@override
|
|
String get localHostname => io.Platform.localHostname;
|
|
|
|
@override
|
|
Map<String, String> get environment => io.Platform.environment;
|
|
|
|
@override
|
|
String get executable => io.Platform.executable;
|
|
|
|
@override
|
|
String get resolvedExecutable => io.Platform.resolvedExecutable;
|
|
|
|
@override
|
|
Uri get script => io.Platform.script;
|
|
|
|
@override
|
|
List<String> get executableArguments => io.Platform.executableArguments;
|
|
|
|
@override
|
|
String get packageConfig => io.Platform.packageConfig;
|
|
|
|
@override
|
|
String get version => io.Platform.version;
|
|
|
|
@override
|
|
bool get stdinSupportsAnsi => io.stdin.supportsAnsiEscapes;
|
|
|
|
@override
|
|
bool get stdoutSupportsAnsi => io.stdout.supportsAnsiEscapes;
|
|
|
|
@override
|
|
String get localeName => io.Platform.localeName;
|
|
}
|
|
|
|
/// Provides a mutable implementation of the [Platform] interface.
|
|
class FakePlatform extends Platform {
|
|
/// Creates a new [FakePlatform] with the specified properties.
|
|
///
|
|
/// Unspecified properties will *not* be assigned default values (they will
|
|
/// remain `null`).
|
|
FakePlatform({
|
|
this.numberOfProcessors,
|
|
this.pathSeparator,
|
|
this.operatingSystem,
|
|
this.operatingSystemVersion,
|
|
this.localHostname,
|
|
this.environment,
|
|
this.executable,
|
|
this.resolvedExecutable,
|
|
this.script,
|
|
this.executableArguments,
|
|
this.packageConfig,
|
|
this.version,
|
|
this.stdinSupportsAnsi,
|
|
this.stdoutSupportsAnsi,
|
|
this.localeName,
|
|
});
|
|
|
|
/// Creates a new [FakePlatform] with properties whose initial values mirror
|
|
/// the specified [platform].
|
|
FakePlatform.fromPlatform(Platform platform)
|
|
: numberOfProcessors = platform.numberOfProcessors,
|
|
pathSeparator = platform.pathSeparator,
|
|
operatingSystem = platform.operatingSystem,
|
|
operatingSystemVersion = platform.operatingSystemVersion,
|
|
localHostname = platform.localHostname,
|
|
environment = Map<String, String>.from(platform.environment),
|
|
executable = platform.executable,
|
|
resolvedExecutable = platform.resolvedExecutable,
|
|
script = platform.script,
|
|
executableArguments =
|
|
List<String>.from(platform.executableArguments),
|
|
packageConfig = platform.packageConfig,
|
|
version = platform.version,
|
|
stdinSupportsAnsi = platform.stdinSupportsAnsi,
|
|
stdoutSupportsAnsi = platform.stdoutSupportsAnsi,
|
|
localeName = platform.localeName;
|
|
|
|
@override
|
|
int numberOfProcessors;
|
|
|
|
@override
|
|
String pathSeparator;
|
|
|
|
@override
|
|
String operatingSystem;
|
|
|
|
@override
|
|
String operatingSystemVersion;
|
|
|
|
@override
|
|
String localHostname;
|
|
|
|
@override
|
|
Map<String, String> environment;
|
|
|
|
@override
|
|
String executable;
|
|
|
|
@override
|
|
String resolvedExecutable;
|
|
|
|
@override
|
|
Uri script;
|
|
|
|
@override
|
|
List<String> executableArguments;
|
|
|
|
@override
|
|
String packageConfig;
|
|
|
|
@override
|
|
String version;
|
|
|
|
@override
|
|
bool stdinSupportsAnsi;
|
|
|
|
@override
|
|
bool stdoutSupportsAnsi;
|
|
|
|
@override
|
|
String localeName;
|
|
}
|