// 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 args) { for (var moduleFormat in [ModuleFormat.amd, ModuleFormat.ddc]) { group('Module format: $moduleFormat |', () { runTests(SetupCompilerOptions( 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: {}, expression: 'true', expectedResult: contains('return true;')); await driver.check( compiler: compiler, scope: {}, expression: 'false', expectedResult: contains('return false;')); }); test('some successful expression compilations', () async { var compiler = await driver.createCompiler(); await driver.check( compiler: compiler, scope: {}, expression: 'true', expectedResult: contains('return true;')); await driver.check( compiler: compiler, scope: {}, expression: 'blah', expectedError: "Undefined name 'blah'", ); await driver.check( compiler: compiler, scope: {}, expression: 'false', expectedResult: contains('return false;')); }); test('failing expression compilations', () async { var compiler = await driver.createCompiler(); await driver.check( compiler: compiler, scope: {}, expression: 'blah1', expectedError: "Undefined name 'blah1'", ); await driver.check( compiler: compiler, scope: {}, 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: {}, expression: 'Directory.systemTemp', expectedResult: contains('return io.Directory.systemTemp;')); }); test('expression referencing named import', () async { await driver.check( scope: {}, 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: {}, expression: 'p.utf8.decoder', expectedResult: contains('return convert.utf8.decoder;')); }); }); }