blob: f33e739cbbccdcbc6fbfa4121ef2a759c4d35355 [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.
/// An enum of all operating systems supported by Dart.
///
/// This is used for selecting which operating systems a test can run on. Even
/// for browser tests, this indicates the operating system of the machine
/// running the test runner.
class OperatingSystem {
/// Microsoft Windows.
static const windows = OperatingSystem._('Windows', 'windows');
/// Mac OS X.
static const macOS = OperatingSystem._('OS X', 'mac-os');
/// GNU/Linux.
static const linux = OperatingSystem._('Linux', 'linux');
/// Android.
///
/// Since this is the operating system the test runner is running on, this
/// won't be true when testing remotely on an Android browser.
static const android = OperatingSystem._('Android', 'android');
/// iOS.
///
/// Since this is the operating system the test runner is running on, this
/// won't be true when testing remotely on an iOS browser.
static const iOS = OperatingSystem._('iOS', 'ios');
/// No operating system.
///
/// This is used when running in the browser, or if an unrecognized operating
/// system is used. It can't be referenced by name in platform selectors.
static const none = OperatingSystem._('none', 'none');
/// A list of all instances of [OperatingSystem] other than [none].
static const all = [windows, macOS, linux, android, iOS];
/// Finds an operating system by its name.
///
/// If no operating system is found, returns [none].
static OperatingSystem find(String identifier) =>
all.firstWhere((platform) => platform.identifier == identifier,
orElse: () => none);
/// Finds an operating system by the return value from `dart:io`'s
/// `Platform.operatingSystem`.
///
/// If no operating system is found, returns [none].
static OperatingSystem findByIoName(String name) {
switch (name) {
case 'windows':
return windows;
case 'macos':
return macOS;
case 'linux':
return linux;
case 'android':
return android;
case 'ios':
return iOS;
default:
return none;
}
}
/// The human-friendly of the operating system.
final String name;
/// The identifier used to look up the operating system.
final String identifier;
/// Whether this is a POSIX-ish operating system.
bool get isPosix => this != windows && this != none;
const OperatingSystem._(this.name, this.identifier);
@override
String toString() => name;
}