|  | // 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. | 
|  |  | 
|  | import 'dart:io'; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  | import "package:path/path.dart" as path; | 
|  |  | 
|  | import "process_test_util.dart"; | 
|  |  | 
|  | void testProcessRunBinaryOutput() { | 
|  | var result = Process.runSync(getProcessTestFileName(), const [ | 
|  | "0", | 
|  | "0", | 
|  | "0", | 
|  | "0", | 
|  | ], stdoutEncoding: null); | 
|  | Expect.isTrue(result.stdout is List<int>); | 
|  | Expect.isTrue(result.stderr is String); | 
|  |  | 
|  | result = Process.runSync(getProcessTestFileName(), const [ | 
|  | "0", | 
|  | "0", | 
|  | "0", | 
|  | "0", | 
|  | ], stderrEncoding: null); | 
|  | Expect.isTrue(result.stdout is String); | 
|  | Expect.isTrue(result.stderr is List<int>); | 
|  |  | 
|  | result = Process.runSync( | 
|  | getProcessTestFileName(), | 
|  | const ["0", "0", "0", "0"], | 
|  | stdoutEncoding: null, | 
|  | stderrEncoding: null, | 
|  | ); | 
|  | Expect.isTrue(result.stdout is List<int>); | 
|  | Expect.isTrue(result.stderr is List<int>); | 
|  | } | 
|  |  | 
|  | void testProcessPathWithSpace() { | 
|  | // Bug: https://github.com/dart-lang/sdk/issues/37751 | 
|  | var processTest = new File(getProcessTestFileName()); | 
|  | var dir = Directory.systemTemp.createTempSync('process_run_test'); | 
|  | try { | 
|  | File(path.join(dir.path, 'path')).createSync(); | 
|  | var innerDir = Directory(path.join(dir.path, 'path with space')); | 
|  | innerDir.createSync(); | 
|  | processTest = processTest.copySync( | 
|  | path.join( | 
|  | innerDir.path, | 
|  | 'process_run_test${getPlatformExecutableExtension()}', | 
|  | ), | 
|  | ); | 
|  | // It will run executables without throwing exception. | 
|  | var result = Process.runSync(processTest.path, []); | 
|  | // Kill the isolate because next test reuse the exe file. | 
|  | Process.killPid(result.pid); | 
|  | // Manually escape the path | 
|  | if (Platform.isWindows) { | 
|  | result = Process.runSync('"${processTest.path}"', []); | 
|  | Process.killPid(result.pid); | 
|  | } | 
|  | result = Process.runSync('${processTest.path}', []); | 
|  | Process.killPid(result.pid); | 
|  | } catch (e) { | 
|  | Expect.fail('System should find process_run_test executable ($e)'); | 
|  | } finally { | 
|  | // Clean up the temp files and directory | 
|  | dir.deleteSync(recursive: true); | 
|  | } | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | testProcessRunBinaryOutput(); | 
|  | testProcessPathWithSpace(); | 
|  | } |