blob: baab6cee164e191a30f0f2f76335615fca5040cb [file] [log] [blame]
// 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.isBrowser && os != OperatingSystem.none) {
throw ArgumentError('No OS should be passed for runtime "$runtime".');
}
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
};
}