| // Copyright (c) 2020, 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. |
| |
| import 'package:dev_compiler/src/compiler/module_builder.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../shared_test_options.dart'; |
| import 'expression_compiler_suite.dart'; |
| |
| void main(List<String> args) { |
| for (var moduleFormat in [ModuleFormat.amd, ModuleFormat.ddc]) { |
| group('Module format: $moduleFormat |', () { |
| group('Sound null safety |', () { |
| runTests(SetupCompilerOptions( |
| soundNullSafety: true, |
| moduleFormat: moduleFormat, |
| args: args, |
| )); |
| }); |
| }); |
| } |
| } |
| |
| void runTests(SetupCompilerOptions setup) { |
| group('Expression compilations on the same expression compiler |', () { |
| var source = ''' |
| main() { |
| } |
| |
| void foo() { |
| // Breakpoint |
| } |
| '''; |
| |
| late ExpressionCompilerTestDriver driver; |
| |
| setUp(() { |
| driver = ExpressionCompilerTestDriver(setup, source); |
| }); |
| |
| tearDown(() { |
| driver.delete(); |
| }); |
| |
| test('successful expression compilations', () async { |
| var compiler = await driver.createCompiler(); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'true', |
| expectedResult: contains('return true;')); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'false', |
| expectedResult: contains('return false;')); |
| }); |
| |
| test('some successful expression compilations', () async { |
| var compiler = await driver.createCompiler(); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'true', |
| expectedResult: contains('return true;')); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'blah', |
| expectedError: "Undefined name 'blah'", |
| ); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'false', |
| expectedResult: contains('return false;')); |
| }); |
| |
| test('failing expression compilations', () async { |
| var compiler = await driver.createCompiler(); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'blah1', |
| expectedError: "Undefined name 'blah1'", |
| ); |
| await driver.check( |
| compiler: compiler, |
| scope: <String, String>{}, |
| expression: 'blah2', |
| expectedError: "Undefined name 'blah2'", |
| ); |
| }); |
| }); |
| |
| group('Expression compiler import tests', () { |
| var source = ''' |
| import 'dart:io' show Directory; |
| import 'dart:io' as p; |
| import 'dart:convert' as p; |
| |
| main() { |
| print(Directory.systemTemp); |
| print(p.Directory.systemTemp); |
| print(p.utf8.decoder); |
| } |
| |
| void foo() { |
| // Breakpoint |
| } |
| '''; |
| |
| late ExpressionCompilerTestDriver driver; |
| |
| setUp(() { |
| driver = ExpressionCompilerTestDriver(setup, source); |
| }); |
| |
| tearDown(() { |
| driver.delete(); |
| }); |
| |
| test('expression referencing unnamed import', () async { |
| await driver.check( |
| scope: <String, String>{}, |
| expression: 'Directory.systemTemp', |
| expectedResult: contains('return io.Directory.systemTemp;')); |
| }); |
| |
| test('expression referencing named import', () async { |
| await driver.check( |
| scope: <String, String>{}, |
| expression: 'p.Directory.systemTemp', |
| expectedResult: contains('return io.Directory.systemTemp;')); |
| }); |
| |
| test('expression referencing another library with the same named import', |
| () async { |
| await driver.check( |
| scope: <String, String>{}, |
| expression: 'p.utf8.decoder', |
| expectedResult: contains('return convert.utf8.decoder;')); |
| }); |
| }); |
| } |