Add `Platform` interface files (#1)
diff --git a/lib/platform.dart b/lib/platform.dart
new file mode 100644
index 0000000..c4eca7c
--- /dev/null
+++ b/lib/platform.dart
@@ -0,0 +1,6 @@
+// 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.
+
+export 'src/interface/local_platform.dart';
+export 'src/interface/platform.dart';
diff --git a/lib/src/interface/local_platform.dart b/lib/src/interface/local_platform.dart
new file mode 100644
index 0000000..0cd117d
--- /dev/null
+++ b/lib/src/interface/local_platform.dart
@@ -0,0 +1,46 @@
+// 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:io' as io show Platform;
+
+import 'platform.dart';
+
+/// `Platform` implementation that delegates directly to `dart:io`.
+class LocalPlatform extends Platform {
+ @override
+ int get numberOfProcessors => io.Platform.numberOfProcessors;
+
+ @override
+ String get pathSeparator => io.Platform.pathSeparator;
+
+ @override
+ String get operatingSystem => io.Platform.operatingSystem;
+
+ @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 packageRoot => io.Platform.packageRoot;
+
+ @override
+ String get packageConfig => io.Platform.packageConfig;
+
+ @override
+ String get version => io.Platform.version;
+}
diff --git a/lib/src/interface/platform.dart b/lib/src/interface/platform.dart
new file mode 100644
index 0000000..19454d9
--- /dev/null
+++ b/lib/src/interface/platform.dart
@@ -0,0 +1,111 @@
+// 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.
+
+/// 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 {
+ /// 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;
+
+ /// 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 `--package-root` flag passed to the executable
+ /// used to run the script in this isolate. This is the directory in which
+ /// Dart packages are looked up.
+ ///
+ /// If there is no `--package-root` flag, `null` is returned.
+ String get packageRoot;
+
+ /// 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;
+}