OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Test the exit code of dart2js in case of exceptions, errors, warnings, etc. | 5 // Test the exit code of dart2js in case of exceptions, errors, warnings, etc. |
6 | 6 |
7 | 7 |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:io' show Platform; | 9 import 'dart:io' show Platform; |
10 | 10 |
11 import 'package:async_helper/async_helper.dart'; | 11 import 'package:async_helper/async_helper.dart'; |
12 import 'package:expect/expect.dart'; | 12 import 'package:expect/expect.dart'; |
13 | 13 |
14 import 'package:compiler/compiler.dart' as old_api; | |
15 import 'package:compiler/compiler_new.dart' as api; | 14 import 'package:compiler/compiler_new.dart' as api; |
16 import 'package:compiler/src/common/codegen.dart'; | 15 import 'package:compiler/src/common/codegen.dart'; |
17 import 'package:compiler/src/compile_time_constants.dart'; | 16 import 'package:compiler/src/compile_time_constants.dart'; |
18 import 'package:compiler/src/compiler.dart'; | 17 import 'package:compiler/src/compiler.dart'; |
19 import 'package:compiler/src/dart2js.dart' as entry; | 18 import 'package:compiler/src/dart2js.dart' as entry; |
20 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; | 19 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; |
21 import 'package:compiler/src/diagnostics/invariant.dart'; | 20 import 'package:compiler/src/diagnostics/invariant.dart'; |
22 import 'package:compiler/src/diagnostics/messages.dart'; | 21 import 'package:compiler/src/diagnostics/messages.dart'; |
23 import 'package:compiler/src/diagnostics/spannable.dart'; | 22 import 'package:compiler/src/diagnostics/spannable.dart'; |
24 import 'package:compiler/src/apiimpl.dart' as apiimpl; | 23 import 'package:compiler/src/apiimpl.dart' as apiimpl; |
25 import 'package:compiler/src/enqueue.dart'; | 24 import 'package:compiler/src/enqueue.dart'; |
26 import 'package:compiler/src/elements/elements.dart'; | 25 import 'package:compiler/src/elements/elements.dart'; |
27 import 'package:compiler/src/library_loader.dart'; | 26 import 'package:compiler/src/library_loader.dart'; |
28 import 'package:compiler/src/null_compiler_output.dart'; | 27 import 'package:compiler/src/null_compiler_output.dart'; |
29 import 'package:compiler/src/old_to_new_api.dart'; | |
30 import 'package:compiler/src/options.dart' show CompilerOptions; | 28 import 'package:compiler/src/options.dart' show CompilerOptions; |
31 import 'package:compiler/src/resolution/resolution.dart'; | 29 import 'package:compiler/src/resolution/resolution.dart'; |
32 import 'package:compiler/src/scanner/scanner_task.dart'; | 30 import 'package:compiler/src/scanner/scanner_task.dart'; |
33 import 'package:compiler/src/universe/world_impact.dart'; | 31 import 'package:compiler/src/universe/world_impact.dart'; |
34 import 'diagnostic_reporter_helper.dart'; | 32 import 'diagnostic_reporter_helper.dart'; |
35 | 33 |
36 class TestCompiler extends apiimpl.CompilerImpl { | 34 class TestCompiler extends apiimpl.CompilerImpl { |
37 final String testMarker; | 35 final String testMarker; |
38 final String testType; | 36 final String testType; |
39 final Function onTest; | 37 final Function onTest; |
40 TestDiagnosticReporter reporter; | 38 TestDiagnosticReporter reporter; |
41 | 39 |
42 TestCompiler(api.CompilerInput inputProvider, | 40 TestCompiler(api.CompilerInput inputProvider, |
43 api.CompilerOutput outputProvider, | 41 api.CompilerOutput outputProvider, |
44 api.CompilerDiagnostics handler, | 42 api.CompilerDiagnostics handler, |
45 Uri libraryRoot, | 43 CompilerOptions options, |
46 Uri packageRoot, | |
47 List<String> options, | |
48 Map<String, dynamic> environment, | |
49 Uri packageConfig, | |
50 api.PackagesDiscoveryProvider findPackages, | |
51 String this.testMarker, | 44 String this.testMarker, |
52 String this.testType, | 45 String this.testType, |
53 Function this.onTest) | 46 Function this.onTest) |
54 : reporter = new TestDiagnosticReporter(), | 47 : reporter = new TestDiagnosticReporter(), |
55 super(inputProvider, outputProvider, handler, | 48 super(inputProvider, outputProvider, handler, options) { |
56 new CompilerOptions.parse( | |
57 libraryRoot: libraryRoot, | |
58 packageRoot: packageRoot, | |
59 options: options, | |
60 environment: environment, | |
61 packageConfig: packageConfig, | |
62 packagesDiscoveryProvider: findPackages)) { | |
63 reporter.compiler = this; | 49 reporter.compiler = this; |
64 reporter.reporter = super.reporter; | 50 reporter.reporter = super.reporter; |
65 test('Compiler'); | 51 test('Compiler'); |
66 } | 52 } |
67 | 53 |
68 @override | 54 @override |
69 ScannerTask createScannerTask() => new TestScanner(this); | 55 ScannerTask createScannerTask() => new TestScanner(this); |
70 | 56 |
71 @override | 57 @override |
72 ResolverTask createResolverTask() { | 58 ResolverTask createResolverTask() { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 Future testExitCode( | 165 Future testExitCode( |
180 String marker, String type, int expectedExitCode, List options) { | 166 String marker, String type, int expectedExitCode, List options) { |
181 bool testOccurred = false; | 167 bool testOccurred = false; |
182 | 168 |
183 void onTest(String testMarker, String testType) { | 169 void onTest(String testMarker, String testType) { |
184 if (testMarker == marker && testType == type) { | 170 if (testMarker == marker && testType == type) { |
185 testOccurred = true; | 171 testOccurred = true; |
186 } | 172 } |
187 } | 173 } |
188 return new Future(() { | 174 return new Future(() { |
189 Future<old_api.CompilationResult> compile( | 175 Future<api.CompilationResult> compile( |
190 Uri script, | 176 CompilerOptions compilerOptions, |
191 Uri libraryRoot, | 177 api.CompilerInput compilerInput, |
192 Uri packageRoot, | 178 api.CompilerDiagnostics compilerDiagnostics, |
193 old_api.CompilerInputProvider inputProvider, | 179 api.CompilerOutput compilerOutput) { |
194 old_api.DiagnosticHandler handler, | 180 compilerOutput = const NullCompilerOutput(); |
195 [List<String> options = const [], | |
196 old_api.CompilerOutputProvider outputProvider, | |
197 Map<String, dynamic> environment = const {}, | |
198 Uri packageConfig, | |
199 api.PackagesDiscoveryProvider findPackages]) { | |
200 libraryRoot = Platform.script.resolve('../../../sdk/'); | |
201 outputProvider = NullSink.outputProvider; | |
202 // Use this to silence the test when debugging: | 181 // Use this to silence the test when debugging: |
203 // handler = (uri, begin, end, message, kind) {}; | 182 // handler = (uri, begin, end, message, kind) {}; |
204 Compiler compiler = new TestCompiler( | 183 Compiler compiler = new TestCompiler( |
205 new LegacyCompilerInput(inputProvider), | 184 compilerInput, |
206 new LegacyCompilerOutput(outputProvider), | 185 compilerOutput, |
207 new LegacyCompilerDiagnostics(handler), | 186 compilerDiagnostics, |
208 libraryRoot, | 187 compilerOptions, |
209 packageRoot, | |
210 options, | |
211 environment, | |
212 packageConfig, | |
213 findPackages, | |
214 marker, | 188 marker, |
215 type, | 189 type, |
216 onTest); | 190 onTest); |
217 return compiler.run(script).then((bool success) { | 191 return compiler.run(compilerOptions.entryPoint).then((bool success) { |
218 return new old_api.CompilationResult(compiler, isSuccess: success); | 192 return new api.CompilationResult(compiler, isSuccess: success); |
219 }); | 193 }); |
220 } | 194 } |
221 | 195 |
222 int foundExitCode; | 196 int foundExitCode; |
223 | 197 |
224 checkResult() { | 198 checkResult() { |
225 Expect.isTrue(testOccurred, 'testExitCode($marker, $type) did not occur'); | 199 Expect.isTrue(testOccurred, 'testExitCode($marker, $type) did not occur'); |
226 if (foundExitCode == null) foundExitCode = 0; | 200 if (foundExitCode == null) foundExitCode = 0; |
227 print('testExitCode($marker, $type) ' | 201 print('testExitCode($marker, $type) ' |
228 'exitCode=$foundExitCode expected=$expectedExitCode'); | 202 'exitCode=$foundExitCode expected=$expectedExitCode'); |
229 Expect.equals(expectedExitCode, foundExitCode, | 203 Expect.equals(expectedExitCode, foundExitCode, |
230 'testExitCode($marker, $type) ' | 204 'testExitCode($marker, $type) ' |
231 'exitCode=$foundExitCode expected=${expectedExitCode}'); | 205 'exitCode=$foundExitCode expected=${expectedExitCode}'); |
232 checkedResults++; | 206 checkedResults++; |
233 } | 207 } |
234 | 208 |
235 void exit(exitCode) { | 209 void exit(exitCode) { |
236 if (foundExitCode == null) { | 210 if (foundExitCode == null) { |
237 foundExitCode = exitCode; | 211 foundExitCode = exitCode; |
238 } | 212 } |
239 }; | 213 }; |
240 | 214 |
241 entry.exitFunc = exit; | 215 entry.exitFunc = exit; |
242 entry.compileFunc = compile; | 216 entry.compileFunc = compile; |
243 | 217 |
244 List<String> args = new List<String>.from(options) | 218 List<String> args = new List<String>.from(options) |
| 219 ..add("--library-root=${Platform.script.resolve('../../../sdk/')}") |
245 ..add("tests/compiler/dart2js/data/exit_code_helper.dart"); | 220 ..add("tests/compiler/dart2js/data/exit_code_helper.dart"); |
246 Future result = entry.internalMain(args); | 221 Future result = entry.internalMain(args); |
247 return result.catchError((e, s) { | 222 return result.catchError((e, s) { |
248 // Capture crashes. | 223 // Capture crashes. |
249 }).whenComplete(checkResult); | 224 }).whenComplete(checkResult); |
250 }); | 225 }); |
251 } | 226 } |
252 | 227 |
253 Future testExitCodes( | 228 Future testExitCodes( |
254 String marker, Map<String,int> expectedExitCodes, List<String> options) { | 229 String marker, Map<String,int> expectedExitCodes, List<String> options) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 281 |
307 expected = _expectedExitCode( | 282 expected = _expectedExitCode( |
308 beforeRun: tests[marker], fatalWarnings: true); | 283 beforeRun: tests[marker], fatalWarnings: true); |
309 totalExpectedErrors += expected.length; | 284 totalExpectedErrors += expected.length; |
310 await testExitCodes(marker, expected, ['--fatal-warnings']); | 285 await testExitCodes(marker, expected, ['--fatal-warnings']); |
311 } | 286 } |
312 | 287 |
313 Expect.equals(totalExpectedErrors, checkedResults); | 288 Expect.equals(totalExpectedErrors, checkedResults); |
314 }); | 289 }); |
315 } | 290 } |
OLD | NEW |