| // 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 'compiler.dart'; | |
| import 'operating_system.dart'; | |
| import 'runtime.dart'; | |
| /// The platform on which a test suite is loaded. | |
| final 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; | |
| /// The compiler that should used for this platform. | |
| final Compiler compiler; | |
| /// 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]. | |
| /// | |
| /// If [compiler] is `null`, then the default compiler for [runtime] will be | |
| /// used. | |
| SuitePlatform( | |
| this.runtime, { | |
| // TODO(https://github.com/dart-lang/test/issues/1935): make required | |
| Compiler? compiler, | |
| this.os = OperatingSystem.none, | |
| this.inGoogle = false, | |
| }) : compiler = compiler ?? runtime.defaultCompiler { | |
| if (!runtime.supportedCompilers.contains(this.compiler)) { | |
| throw ArgumentError( | |
| 'The platform $runtime does not support the compiler ${this.compiler}', | |
| ); | |
| } | |
| } | |
| /// 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), | |
| compiler: map.containsKey('compiler') | |
| ? Compiler.deserialize(map['compiler'] as Object) | |
| : null, | |
| 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(), | |
| 'compiler': compiler.serialize(), | |
| 'os': os.identifier, | |
| 'inGoogle': inGoogle, | |
| }; | |
| } |