| // Copyright (c) 2018, 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 'operating_system.dart'; |
| import 'runtime.dart'; |
| |
| /// The platform on which a test suite is loaded. |
| class SuitePlatform { |
| /// The runtime that hosts the suite. |
| final Runtime runtime; |
| |
| /// The operating system on which the suite is running. |
| /// |
| /// This will always be [OperatingSystem.none] if `runtime.isBrowser` is |
| /// true. |
| final OperatingSystem os; |
| |
| /// Whether we're running on Google-internal infrastructure. |
| final bool inGoogle; |
| |
| /// Creates a new platform with the given [runtime] and [os], which defaults |
| /// to [OperatingSystem.none]. |
| /// |
| /// Throws an [ArgumentError] if [runtime] is a browser and [os] is not |
| /// `null` or [OperatingSystem.none]. |
| SuitePlatform(this.runtime, |
| {this.os = OperatingSystem.none, this.inGoogle = false}) { |
| if (runtime.isBrowser && os != OperatingSystem.none) { |
| throw ArgumentError('No OS should be passed for runtime "$runtime".'); |
| } |
| } |
| |
| /// Converts a JSON-safe representation generated by [serialize] back into a |
| /// [SuitePlatform]. |
| factory SuitePlatform.deserialize(Object serialized) { |
| var map = serialized as Map; |
| return SuitePlatform(Runtime.deserialize(map['runtime'] as Object), |
| os: OperatingSystem.find(map['os'] as String), |
| inGoogle: map['inGoogle'] as bool); |
| } |
| |
| /// Converts [this] into a JSON-safe object that can be converted back to a |
| /// [SuitePlatform] using [SuitePlatform.deserialize]. |
| Object serialize() => { |
| 'runtime': runtime.serialize(), |
| 'os': os.identifier, |
| 'inGoogle': inGoogle |
| }; |
| } |