| // Copyright (c) 2012, 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 "dart:io"; |
| |
| import "package:async_helper/async_helper.dart"; |
| import "package:expect/expect.dart"; |
| |
| import "process_test_util.dart"; |
| |
| runEnvironmentProcess( |
| Map<String, String> environment, name, includeParent, callback) { |
| var dartExecutable = Platform.executable; |
| var printEnv = 'tests/standalone_2/io/print_env.dart'; |
| if (!new File(printEnv).existsSync()) { |
| printEnv = '../$printEnv'; |
| } |
| Process.run(dartExecutable, |
| []..addAll(Platform.executableArguments)..addAll([printEnv, name]), |
| environment: environment, includeParentEnvironment: includeParent) |
| .then((result) { |
| if (result.exitCode != 0) { |
| print('print_env.dart subprocess failed ' |
| 'with exit code ${result.exitCode}'); |
| print('stdout:'); |
| print(result.stdout); |
| print('stderr:'); |
| print(result.stderr); |
| } |
| Expect.equals(0, result.exitCode); |
| callback(result.stdout); |
| }); |
| } |
| |
| testEnvironment() { |
| asyncStart(); |
| Map env = Platform.environment; |
| Expect.isFalse(env.isEmpty); |
| // Check that some value in the environment stays the same when passed |
| // to another process. |
| for (var k in env.keys) { |
| runEnvironmentProcess({}, k, true, (output) { |
| // Only check startsWith. The print statements will add |
| // newlines at the end. |
| Expect.isTrue(output.startsWith(env[k])); |
| // Add a new variable and check that it becomes an environment |
| // variable in the child process. |
| var copy = new Map<String, String>.from(env); |
| var name = 'MYENVVAR'; |
| while (env.containsKey(name)) name = '${name}_'; |
| copy[name] = 'value'; |
| runEnvironmentProcess(copy, name, true, (output) { |
| Expect.isTrue(output.startsWith('value')); |
| asyncEnd(); |
| }); |
| }); |
| // Only check one value to not spin up too many processes testing the |
| // same things. |
| break; |
| } |
| } |
| |
| testNoIncludeEnvironment() { |
| asyncStart(); |
| var env = Platform.environment; |
| Expect.isTrue(env.containsKey('PATH')); |
| env = new Map.from(env); |
| env.remove('PATH'); |
| runEnvironmentProcess(env, "PATH", false, (output) { |
| Expect.isTrue(output.startsWith("null")); |
| asyncEnd(); |
| }); |
| } |
| |
| main() { |
| testEnvironment(); |
| testNoIncludeEnvironment(); |
| } |