Always kill child processes when killing the parent
diff --git a/test/test_process_test.dart b/test/test_process_test.dart
index 85b3424..40e608c 100644
--- a/test/test_process_test.dart
+++ b/test/test_process_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
+import 'dart:convert';
import 'dart:io';
import 'package:path/path.dart' as p;
@@ -34,11 +35,35 @@
});
});
- test("kill() stops the process", () async {
- var process = await startDartProcess('while (true);');
+ group("kill() stops the process", () {
+ test("parent", () async {
+ var process = await startDartProcess('while (true);');
- // Should terminate.
- await process.kill();
+ // Should terminate.
+ await process.kill();
+ });
+
+ test("child", () async {
+ var childPath = p.join(d.sandbox, 'child.dart');
+ File(childPath).writeAsStringSync('''
+ void main() {
+ while (true);
+ }
+ ''');
+
+ var process = await startDartProcess('''
+ var process = Process.start(${json.encode(childPath)});
+ print(process.pid);
+ ''');
+
+ var pid = int.parse(await process.stdout.next);
+
+ // Should terminate.
+ await process.kill();
+
+ expect(Process.killPid(pid), isFalse,
+ reason: "Child process should no longer be running.");
+ });
});
group("stdout and stderr", () {