| // Copyright 2014 The Flutter Authors. 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:dwds/dwds.dart'; |
| import 'package:flutter_tools/src/compile.dart'; |
| import 'package:flutter_tools/src/isolated/devfs_web.dart'; |
| import 'package:matcher/matcher.dart'; |
| import 'package:mockito/mockito.dart'; |
| import 'package:flutter_tools/src/globals.dart' as globals; |
| |
| import '../../src/common.dart'; |
| import '../../src/testbed.dart'; |
| |
| void main() { |
| Testbed testbed; |
| |
| setUp(() { |
| testbed = Testbed(); |
| }); |
| |
| test('WebExpressionCompiler handles successful expression compilation', () => testbed.run(() async { |
| globals.fs.file('compilerOutput').writeAsStringSync('a'); |
| |
| final ResidentCompiler residentCompiler = MockResidentCompiler(); |
| when(residentCompiler.compileExpressionToJs( |
| any, any, any, any, any, any, any |
| )).thenAnswer((Invocation invocation) async { |
| return const CompilerOutput('compilerOutput', 0, <Uri>[]); |
| }); |
| |
| final ExpressionCompiler expressionCompiler = |
| WebExpressionCompiler(residentCompiler); |
| |
| final ExpressionCompilationResult result = |
| await expressionCompiler.compileExpressionToJs( |
| null, null, 1, 1, null, null, null, null); |
| |
| expectResult(result, false, 'a'); |
| })); |
| |
| test('WebExpressionCompiler handles compilation error', () => testbed.run(() async { |
| globals.fs.file('compilerOutput').writeAsStringSync('Error: a'); |
| |
| final ResidentCompiler residentCompiler = MockResidentCompiler(); |
| when(residentCompiler.compileExpressionToJs( |
| any, any, any, any, any, any, any |
| )).thenAnswer((Invocation invocation) async { |
| return const CompilerOutput('compilerOutput', 1, <Uri>[]); |
| }); |
| |
| final ExpressionCompiler expressionCompiler = |
| WebExpressionCompiler(residentCompiler); |
| |
| final ExpressionCompilationResult result = |
| await expressionCompiler.compileExpressionToJs( |
| null, null, 1, 1, null, null, null, null); |
| |
| expectResult(result, true, 'Error: a'); |
| })); |
| |
| test('WebExpressionCompiler handles internal error', () => testbed.run(() async { |
| final ResidentCompiler residentCompiler = MockResidentCompiler(); |
| when(residentCompiler.compileExpressionToJs( |
| any, any, any, any, any, any, any |
| )).thenAnswer((Invocation invocation) async { |
| return null; |
| }); |
| |
| final ExpressionCompiler expressionCompiler = |
| WebExpressionCompiler(residentCompiler); |
| |
| final ExpressionCompilationResult result = |
| await expressionCompiler.compileExpressionToJs( |
| null, null, 1, 1, null, null, null, 'a'); |
| |
| expectResult(result, true, 'InternalError: frontend server failed to compile \'a\''); |
| })); |
| } |
| |
| void expectResult(ExpressionCompilationResult result, bool isError, String value) { |
| expect(result, |
| const TypeMatcher<ExpressionCompilationResult>() |
| .having((ExpressionCompilationResult instance) => instance.isError, 'isError', isError) |
| .having((ExpressionCompilationResult instance) => instance.result, 'result', value)); |
| } |
| |
| class MockResidentCompiler extends Mock implements ResidentCompiler {} |