| // Copyright (c) 2013, 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. |
| |
| // @dart = 2.9 |
| |
| // OtherResources=process_echo_util.dart |
| |
| import "dart:async"; |
| import "dart:io"; |
| import "dart:isolate"; |
| import "package:path/path.dart"; |
| import "package:async_helper/async_helper.dart"; |
| |
| void testRunShell() { |
| test(args) { |
| asyncStart(); |
| var script = Platform.script.resolve("process_echo_util.dart").toFilePath(); |
| Process.run( |
| Platform.executable, |
| [] |
| ..addAll(Platform.executableArguments) |
| ..add('--verbosity=warning') |
| ..add(script) |
| ..addAll(args), |
| runInShell: true) |
| .then((process_result) { |
| var result; |
| if (Platform.operatingSystem == "windows") { |
| result = process_result.stdout.split("\r\n"); |
| } else { |
| result = process_result.stdout.split("\n"); |
| } |
| if (result.length - 1 != args.length) { |
| throw "wrong number of args: $args vs $result"; |
| } |
| for (int i = 0; i < args.length; i++) { |
| if (args[i] != result[i]) { |
| throw "bad result at $i: '${args[i]}' vs '${result[i]}'"; |
| } |
| } |
| asyncEnd(); |
| }); |
| } |
| |
| test(["\""]); |
| test(["a b"]); |
| test(["'"]); |
| test(["'", "'"]); |
| test(["'\"\"'\"'\"'"]); |
| test(["'\"\"'", "\"'\"'"]); |
| test(["'\\\"\\\"'\\", "\"\\'\"'"]); |
| test(["'\$HOME'"]); |
| test(["'\$tmp'"]); |
| test(["arg'"]); |
| test(["arg\\'", "'\\arg"]); |
| } |
| |
| void testBadRunShell() { |
| test(exe, [List<String> args = const []]) { |
| asyncStart(); |
| Process.run(exe, args, runInShell: true).then((result) { |
| if (result.exitCode == 0) { |
| throw "error expected"; |
| } |
| asyncEnd(); |
| }); |
| } |
| |
| test("'\"'"); |
| test("'\$HOME'"); |
| } |
| |
| void main() { |
| testRunShell(); |
| testBadRunShell(); |
| } |