| Index: tests/standalone/verbose_gc_to_bmu_test.dart
|
| ===================================================================
|
| --- tests/standalone/verbose_gc_to_bmu_test.dart (revision 0)
|
| +++ tests/standalone/verbose_gc_to_bmu_test.dart (working copy)
|
| @@ -0,0 +1,71 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +// This test forks a second vm process that runs the BMU tool and verifies that
|
| +// it produces some output. This test is mainly here to ensure that the BMU
|
| +// tool compiles and runs.
|
| +
|
| +import "dart:async";
|
| +import "dart:convert";
|
| +import "dart:io";
|
| +
|
| +import "package:path/path.dart";
|
| +
|
| +// Tool script relative to the path of this test.
|
| +var toolScript = "../../runtime/tools/verbose_gc_to_bmu.dart";
|
| +
|
| +// Target script relative to this test.
|
| +var targetScript = "../language/gc_test.dart";
|
| +const minOutputLines = 20;
|
| +
|
| +void checkExitCode(exitCode) {
|
| + if (exitCode != 0) {
|
| + print("Process terminated with exit code ${exitCode}.");
|
| + exit(-1);
|
| + }
|
| +}
|
| +
|
| +void main() {
|
| + // Compute paths for tool and target relative to the path of this script.
|
| + var scriptDir = dirname(Platform.script.toFilePath());
|
| + var targPath = normalize(join(scriptDir, targetScript));
|
| + var targetResult =
|
| + Process.runSync(Platform.executable, ["--verbose_gc", targPath]);
|
| + checkExitCode(targetResult.exitCode);
|
| + var gcLog = targetResult.stderr;
|
| + var toolPath = normalize(join(scriptDir, toolScript));
|
| + Process.start(Platform.executable, [toolPath]).then((Process process) {
|
| + // Feed the GC log of the target to the BMU tool.
|
| + process.stdin.write(gcLog);
|
| + process.stdin.close();
|
| + var stdoutStringStream = process.stdout
|
| + .transform(UTF8.decoder)
|
| + .transform(new LineSplitter());
|
| + var stderrStringStream = process.stderr
|
| + .transform(UTF8.decoder)
|
| + .transform(new LineSplitter());
|
| + // Wait for 3 future events: stdout and stderr streams closed, and
|
| + // process terminated.
|
| + var futures = [];
|
| + var stdoutLines = [];
|
| + var stderrLines = [];
|
| + var subscription = stdoutStringStream.listen(stdoutLines.add);
|
| + futures.add(subscription.asFuture(true));
|
| + subscription = stderrStringStream.listen(stderrLines.add);
|
| + futures.add(subscription.asFuture(true));
|
| + futures.add(process.exitCode.then(checkExitCode));
|
| + Future.wait(futures).then((results) {
|
| + if (stderrLines.isNotEmpty) {
|
| + print("Unexpected output on stderr:");
|
| + print(stderrLines.join('\n'));
|
| + exit(-1);
|
| + }
|
| + if (stdoutLines.length < minOutputLines) {
|
| + print("Less than expected output on stdout:");
|
| + print(stdoutLines.join('\n'));
|
| + exit(-1);
|
| + }
|
| + });
|
| + });
|
| +}
|
|
|