blob: d1e7c06daf179ac989b5a019b530e9745eb983e3 [file] [log] [blame]
// 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:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/compile.dart';
import 'package:flutter_tools/src/isolated/devfs_web.dart';
import 'package:test/fake.dart';
import '../../src/common.dart';
void main() {
late FileSystem fileSystem;
setUp(() {
fileSystem = MemoryFileSystem.test();
});
testWithoutContext('WebExpressionCompiler handles successful expression compilation', () async {
fileSystem.file('compilerOutput').writeAsStringSync('a');
final ResidentCompiler residentCompiler = FakeResidentCompiler(const CompilerOutput('compilerOutput', 0, <Uri>[]));
final ExpressionCompiler expressionCompiler = WebExpressionCompiler(residentCompiler, fileSystem: fileSystem);
final ExpressionCompilationResult result =
await expressionCompiler.compileExpressionToJs(
'', '', 1, 1, <String, String>{}, <String, String>{}, '', '');
expectResult(result, false, 'a');
});
testWithoutContext('WebExpressionCompiler handles compilation error', () async {
fileSystem.file('compilerOutput').writeAsStringSync('Error: a');
final ResidentCompiler residentCompiler = FakeResidentCompiler(const CompilerOutput('compilerOutput', 1, <Uri>[]));
final ExpressionCompiler expressionCompiler = WebExpressionCompiler(residentCompiler, fileSystem: fileSystem);
final ExpressionCompilationResult result =
await expressionCompiler.compileExpressionToJs(
'', '', 1, 1, <String, String>{}, <String, String>{}, '', '');
expectResult(result, true, 'Error: a');
});
testWithoutContext('WebExpressionCompiler handles internal error', () async {
final ResidentCompiler residentCompiler = FakeResidentCompiler(null);
final ExpressionCompiler expressionCompiler = WebExpressionCompiler(residentCompiler, fileSystem: fileSystem);
final ExpressionCompilationResult result =
await expressionCompiler.compileExpressionToJs(
'', '', 1, 1, <String, String>{}, <String, String>{}, '', '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 FakeResidentCompiler extends Fake implements ResidentCompiler {
FakeResidentCompiler(this.output);
final CompilerOutput? output;
@override
Future<CompilerOutput?> compileExpressionToJs(
String libraryUri,
int line,
int column,
Map<String, String> jsModules,
Map<String, String> jsFrameValues,
String moduleName,
String expression,
) async {
return output;
}
}