| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file |  | 
| 2 // for details. All rights reserved. Use of this source code is governed by a |  | 
| 3 // BSD-style license that can be found in the LICENSE file. |  | 
| 4 |  | 
| 5 // This test forks a second vm process that runs the script tools/coverage.dart |  | 
| 6 // and verifies that the coverage tool produces its expected output. |  | 
| 7 // This test is mainly here to ensure that the coverage tool compiles and |  | 
| 8 // runs. |  | 
| 9 |  | 
| 10 import "dart:async"; |  | 
| 11 import "dart:convert"; |  | 
| 12 import "dart:io"; |  | 
| 13 |  | 
| 14 import "package:path/path.dart"; |  | 
| 15 |  | 
| 16 // Coverage tool script relative to the path of this test. |  | 
| 17 var coverageToolScript = "../../tools/coverage.dart"; |  | 
| 18 |  | 
| 19 // Coverage target script relative to this test. |  | 
| 20 var coverageTargetScript = "../language/hello_dart_test.dart"; |  | 
| 21 var targPath; |  | 
| 22 |  | 
| 23 Process coverageToolProcess; |  | 
| 24 List sourceLines; |  | 
| 25 int nextLineToMatch = 0; |  | 
| 26 |  | 
| 27 void onCoverageOutput(String line) { |  | 
| 28   print("COV: $line"); |  | 
| 29   if (nextLineToMatch < sourceLines.length) { |  | 
| 30     if (line.endsWith("|" + sourceLines[nextLineToMatch])) { |  | 
| 31       nextLineToMatch++; |  | 
| 32     } |  | 
| 33   } |  | 
| 34 } |  | 
| 35 |  | 
| 36 bool checkExitCode(exitCode) { |  | 
| 37   var pid = coverageToolProcess.pid; |  | 
| 38   print("Coverage tool process (pid $pid) terminated with " |  | 
| 39         "exit code $exitCode."); |  | 
| 40   return exitCode == 0; |  | 
| 41 } |  | 
| 42 |  | 
| 43 void checkSuccess() { |  | 
| 44   if (nextLineToMatch == sourceLines.length) { |  | 
| 45     print("Successfully matched all lines of '$targPath'"); |  | 
| 46   } else { |  | 
| 47     print("Error: could not match all source code lines of '$targPath'"); |  | 
| 48     exit(-1); |  | 
| 49   } |  | 
| 50 } |  | 
| 51 |  | 
| 52 void main() { |  | 
| 53   // Compute paths for coverage tool and coverage target relative |  | 
| 54   // the the path of this script. |  | 
| 55   var scriptPath = dirname(Platform.script.toFilePath()); |  | 
| 56   var toolPath = normalize(join(scriptPath, coverageToolScript)); |  | 
| 57   targPath = normalize(join(scriptPath, coverageTargetScript)); |  | 
| 58 |  | 
| 59   sourceLines = new File(targPath).readAsLinesSync(); |  | 
| 60   assert(sourceLines != null); |  | 
| 61 |  | 
| 62   var processOpts = [ "--compile_all", toolPath, targPath ]; |  | 
| 63 |  | 
| 64   Process.start(Platform.executable, processOpts).then((Process process) { |  | 
| 65     coverageToolProcess = process; |  | 
| 66     coverageToolProcess.stdin.close(); |  | 
| 67     var stdoutStringStream = coverageToolProcess.stdout |  | 
| 68         .transform(UTF8.decoder) |  | 
| 69         .transform(new LineSplitter()); |  | 
| 70 |  | 
| 71     var stderrStringStream = coverageToolProcess.stderr |  | 
| 72         .transform(UTF8.decoder) |  | 
| 73         .transform(new LineSplitter()); |  | 
| 74 |  | 
| 75     // Wait for 3 future events: stdout and stderr streams of the coverage |  | 
| 76     // tool process closed, and coverage tool process terminated. |  | 
| 77     var futures = []; |  | 
| 78     var subscription = stdoutStringStream.listen(onCoverageOutput); |  | 
| 79     futures.add(subscription.asFuture(true)); |  | 
| 80     subscription = stderrStringStream.listen(onCoverageOutput); |  | 
| 81     futures.add(subscription.asFuture(true)); |  | 
| 82     futures.add(coverageToolProcess.exitCode.then(checkExitCode)); |  | 
| 83     Future.wait(futures).then((results) { |  | 
| 84       checkSuccess(); |  | 
| 85       if (results.contains(false)) exit(-1); |  | 
| 86     }); |  | 
| 87   }); |  | 
| 88 } |  | 
| OLD | NEW | 
|---|