Chromium Code Reviews| 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,70 @@ |
| +// 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"; |
| + |
| +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 < 200) { |
|
Ivan Posva
2015/05/14 05:06:35
Please comment why you expect more than 200 lines
|
| + print("Less than expected output on stdout:"); |
| + print(stdoutLines.join('\n')); |
| + exit(-1); |
| + } |
| + }); |
| + }); |
| +} |