| // 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. |
| |
| // Test that the compiler can generates code with compile time error according |
| // to the compiler options. |
| |
| library dart2js.test.generate_code_with_compile_time_errors; |
| |
| import 'package:expect/expect.dart'; |
| import 'package:async_helper/async_helper.dart'; |
| import 'package:compiler/src/compiler.dart'; |
| import 'package:compiler/src/js_backend/js_backend.dart'; |
| import 'memory_compiler.dart'; |
| import 'output_collector.dart'; |
| |
| const MEMORY_SOURCE_FILES = const { |
| 'main.dart': ''' |
| foo() { |
| const list = []; |
| } |
| |
| main() { |
| foo(); |
| } |
| ''', |
| }; |
| |
| test(List<String> options, |
| {bool expectedOutput, |
| bool expectedCodeGenerated, |
| bool expectHint: false}) async { |
| DiagnosticCollector collector = new DiagnosticCollector(); |
| OutputCollector outputCollector = new OutputCollector(); |
| CompilationResult result = await runCompiler( |
| memorySourceFiles: MEMORY_SOURCE_FILES, |
| diagnosticHandler: collector, |
| outputProvider: outputCollector, |
| options: options); |
| Compiler compiler = result.compiler; |
| Expect.isFalse(result.isSuccess, "Expected compilation failure."); |
| Expect.isTrue( |
| collector.warnings.isEmpty, "Unexpected warnings: ${collector.warnings}"); |
| Expect.isFalse(collector.errors.isEmpty, "Expected compile-time errors."); |
| Expect.equals(expectHint, collector.hints.isNotEmpty, |
| "Unexpected hints: ${collector.warnings}"); |
| |
| JavaScriptBackend backend = compiler.backend; |
| bool isCodeGenerated = backend.generatedCode.isNotEmpty; |
| Expect.equals( |
| expectedCodeGenerated, |
| isCodeGenerated, |
| expectedCodeGenerated |
| ? "Expected generated code for options $options." |
| : "Expected no code generated for options $options."); |
| Expect.equals( |
| expectedOutput, |
| outputCollector.outputMap.isNotEmpty, |
| expectedOutput |
| ? "Expected output for options $options." |
| : "Expected no output for options $options."); |
| } |
| |
| void main() { |
| asyncTest(() async { |
| await test([], expectedCodeGenerated: false, expectedOutput: false); |
| await test(['--test-mode'], |
| expectedCodeGenerated: false, expectedOutput: false); |
| await test(['--generate-code-with-compile-time-errors'], |
| expectedCodeGenerated: true, expectedOutput: true); |
| await test(['--generate-code-with-compile-time-errors', '--test-mode'], |
| expectedCodeGenerated: true, expectedOutput: false); |
| }); |
| } |