blob: 6b025649d4303e3814a76d16585f69fea4ec525e [file] [log] [blame]
// 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.
/// Test date formatting and parsing while the system time zone is set.
import 'package:test/test.dart';
import 'dart:io';
import 'dart:convert';
/// The VM arguments we were given, most importantly package-root.
final vmArgs = Platform.executableArguments;
final dart = Platform.executable;
/// Test for a particular timezone. In order to verify that we are in fact
/// running in that time zone, verify that the DateTime offset is one of the
/// expected values.
testTimezone(String timezoneName, {int expectedUtcOffset}) {
// Define the environment variable "PACKAGE_DIR=<directory>" to indicate the
// root of the Intl package. If it is not provided, we assume that the root of
// the Intl package is the current directory.
var packageDir = Platform.environment['PACKAGE_DIR'];
var packageRelative = 'test/timezone_local_even_test_helper.dart';
var fileToSpawn =
packageDir == null ? packageRelative : '$packageDir/$packageRelative';
test("Run tests in $timezoneName time zone", () async {
List<String> args = []
..addAll(vmArgs)
..add(fileToSpawn);
var environment = <String, String>{'TZ': timezoneName};
if (expectedUtcOffset != null) {
environment['EXPECTED_TZ_OFFSET_FOR_TEST'] = '$expectedUtcOffset';
}
var result = await Process.run(dart, args,
stdoutEncoding: new Utf8Codec(),
stderrEncoding: new Utf8Codec(),
includeParentEnvironment: true,
environment: environment);
// Because the actual tests are run in a spawned parocess their output isn't
// directly visible here. To debug, it's necessary to look at the output of
// that test, so we print it here for convenience.
print("Spawning test to run in the $timezoneName time zone. Stderr is:");
print(result.stderr);
print("Spawned test in $timezoneName time zone has Stdout:");
print(result.stdout);
expect(result.exitCode, 0,
reason: "Spawned test failed. See the test log from stderr to debug");
}, testOn: 'linux && vm');
}