Unverified Commit 7bed378e authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Only run codegen at start of flutter_test (#29171)

parent b74b9603
...@@ -317,6 +317,10 @@ Future<void> _runTests() async { ...@@ -317,6 +317,10 @@ Future<void> _runTests() async {
// with --track-widget-creation. // with --track-widget-creation.
await _runFlutterTest(path.join(flutterRoot, 'examples', 'flutter_gallery'), options: <String>['--track-widget-creation'], tableData: bigqueryApi?.tabledata); await _runFlutterTest(path.join(flutterRoot, 'examples', 'flutter_gallery'), options: <String>['--track-widget-creation'], tableData: bigqueryApi?.tabledata);
await _runFlutterTest(path.join(flutterRoot, 'examples', 'catalog'), tableData: bigqueryApi?.tabledata); await _runFlutterTest(path.join(flutterRoot, 'examples', 'catalog'), tableData: bigqueryApi?.tabledata);
// Smoke test for code generation.
await _runFlutterTest(path.join(flutterRoot, 'dev', 'integration_tests', 'codegen'), tableData: bigqueryApi?.tabledata, environment: <String, String>{
'FLUTTER_EXPERIMENTAL_BUILD': 'true',
});
print('${bold}DONE: All tests successful.$reset'); print('${bold}DONE: All tests successful.$reset');
} }
...@@ -581,6 +585,7 @@ Future<void> _runFlutterTest(String workingDirectory, { ...@@ -581,6 +585,7 @@ Future<void> _runFlutterTest(String workingDirectory, {
bool skip = false, bool skip = false,
Duration timeout = _kLongTimeout, Duration timeout = _kLongTimeout,
bq.TabledataResourceApi tableData, bq.TabledataResourceApi tableData,
Map<String, String> environment,
}) async { }) async {
final List<String> args = <String>['test']..addAll(options); final List<String> args = <String>['test']..addAll(options);
if (flutterTestArgs != null && flutterTestArgs.isNotEmpty) if (flutterTestArgs != null && flutterTestArgs.isNotEmpty)
...@@ -612,6 +617,7 @@ Future<void> _runFlutterTest(String workingDirectory, { ...@@ -612,6 +617,7 @@ Future<void> _runFlutterTest(String workingDirectory, {
printOutput: printOutput, printOutput: printOutput,
skip: skip, skip: skip,
timeout: timeout, timeout: timeout,
environment: environment,
); );
} }
...@@ -624,6 +630,7 @@ Future<void> _runFlutterTest(String workingDirectory, { ...@@ -624,6 +630,7 @@ Future<void> _runFlutterTest(String workingDirectory, {
expectNonZeroExit: expectFailure, expectNonZeroExit: expectFailure,
timeout: timeout, timeout: timeout,
beforeExit: formatter.finish, beforeExit: formatter.finish,
environment: environment,
); );
await _processTestOutput(formatter, testOutput, tableData); await _processTestOutput(formatter, testOutput, tableData);
} else { } else {
......
...@@ -161,22 +161,19 @@ class CodeGeneratingResidentCompiler implements ResidentCompiler { ...@@ -161,22 +161,19 @@ class CodeGeneratingResidentCompiler implements ResidentCompiler {
/// Creates a new [ResidentCompiler] and configures a [BuildDaemonClient] to /// Creates a new [ResidentCompiler] and configures a [BuildDaemonClient] to
/// run builds. /// run builds.
static Future<CodeGeneratingResidentCompiler> create({ ///
/// If `runCold` is true, then no codegen daemon will be created. Instead the
/// compiler will only be initialized with the correct configuration for
/// codegen mode.
static Future<ResidentCompiler> create({
@required FlutterProject flutterProject, @required FlutterProject flutterProject,
bool trackWidgetCreation = false, bool trackWidgetCreation = false,
CompilerMessageConsumer compilerMessageConsumer = printError, CompilerMessageConsumer compilerMessageConsumer = printError,
bool unsafePackageSerialization = false, bool unsafePackageSerialization = false,
String outputPath, String outputPath,
String initializeFromDill, String initializeFromDill,
bool runCold = false,
}) async { }) async {
final CodegenDaemon codegenDaemon = await codeGenerator.daemon(flutterProject);
codegenDaemon.startBuild();
final CodegenStatus status = await codegenDaemon.buildResults.firstWhere((CodegenStatus status) {
return status == CodegenStatus.Succeeded || status == CodegenStatus.Failed;
});
if (status == CodegenStatus.Failed) {
printError('Code generation failed, build may have compile errors.');
}
final ResidentCompiler residentCompiler = ResidentCompiler( final ResidentCompiler residentCompiler = ResidentCompiler(
artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath), artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath),
trackWidgetCreation: trackWidgetCreation, trackWidgetCreation: trackWidgetCreation,
...@@ -191,6 +188,17 @@ class CodeGeneratingResidentCompiler implements ResidentCompiler { ...@@ -191,6 +188,17 @@ class CodeGeneratingResidentCompiler implements ResidentCompiler {
// Pass an invalid file name to prevent frontend_server from initializing from dill. // Pass an invalid file name to prevent frontend_server from initializing from dill.
initializeFromDill: 'none_file', initializeFromDill: 'none_file',
); );
if (runCold) {
return residentCompiler;
}
final CodegenDaemon codegenDaemon = await codeGenerator.daemon(flutterProject);
codegenDaemon.startBuild();
final CodegenStatus status = await codegenDaemon.buildResults.firstWhere((CodegenStatus status) {
return status == CodegenStatus.Succeeded || status == CodegenStatus.Failed;
});
if (status == CodegenStatus.Failed) {
printError('Code generation failed, build may have compile errors.');
}
return CodeGeneratingResidentCompiler._(residentCompiler, codegenDaemon); return CodeGeneratingResidentCompiler._(residentCompiler, codegenDaemon);
} }
......
...@@ -9,6 +9,7 @@ import '../base/common.dart'; ...@@ -9,6 +9,7 @@ import '../base/common.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/platform.dart'; import '../base/platform.dart';
import '../cache.dart'; import '../cache.dart';
import '../codegen.dart';
import '../project.dart'; import '../project.dart';
import '../runner/flutter_command.dart'; import '../runner/flutter_command.dart';
import '../test/coverage_collector.dart'; import '../test/coverage_collector.dart';
...@@ -159,6 +160,20 @@ class TestCommand extends FlutterCommand { ...@@ -159,6 +160,20 @@ class TestCommand extends FlutterCommand {
Cache.releaseLockEarly(); Cache.releaseLockEarly();
// Run builders once before all tests.
if (experimentalBuildEnabled && await flutterProject.hasBuilders) {
final CodegenDaemon codegenDaemon = await codeGenerator.daemon(flutterProject);
codegenDaemon.startBuild();
await for (CodegenStatus status in codegenDaemon.buildResults) {
if (status == CodegenStatus.Succeeded) {
break;
}
if (status == CodegenStatus.Failed) {
throwToolExit('Code generation failed.');
}
}
}
final int result = await runTests( final int result = await runTests(
files, files,
workDir: workDir, workDir: workDir,
......
...@@ -500,13 +500,12 @@ class ResidentCompiler { ...@@ -500,13 +500,12 @@ class ResidentCompiler {
} }
if (packagesFilePath != null) { if (packagesFilePath != null) {
command.addAll(<String>['--packages', packagesFilePath]); command.addAll(<String>['--packages', packagesFilePath]);
} else if (_packagesPath != null) {
command.addAll(<String>['--packages', _packagesPath]);
} }
if (_trackWidgetCreation) { if (_trackWidgetCreation) {
command.add('--track-widget-creation'); command.add('--track-widget-creation');
} }
if (_packagesPath != null) {
command.addAll(<String>['--packages', _packagesPath]);
}
if (_fileSystemRoots != null) { if (_fileSystemRoots != null) {
for (String root in _fileSystemRoots) { for (String root in _fileSystemRoots) {
command.addAll(<String>['--filesystem-root', root]); command.addAll(<String>['--filesystem-root', root]);
...@@ -662,6 +661,9 @@ class ResidentCompiler { ...@@ -662,6 +661,9 @@ class ResidentCompiler {
} }
} }
} }
if (platform.isWindows && _fileSystemRoots != null && _fileSystemRoots.length > 1) {
return Uri.file(filename, windows: platform.isWindows).toString();
}
return null; return null;
} }
......
...@@ -274,9 +274,10 @@ class _Compiler { ...@@ -274,9 +274,10 @@ class _Compiler {
return CodeGeneratingResidentCompiler.create( return CodeGeneratingResidentCompiler.create(
flutterProject: flutterProject, flutterProject: flutterProject,
trackWidgetCreation: trackWidgetCreation, trackWidgetCreation: trackWidgetCreation,
initializeFromDill: null, // TODO(jonahwilliams): investigate multi-root support in init from dill.
unsafePackageSerialization: false,
compilerMessageConsumer: reportCompilerMessage, compilerMessageConsumer: reportCompilerMessage,
// We already ran codegen once at the start, we only need to
// configure builders.
runCold: true,
); );
} }
return ResidentCompiler( return ResidentCompiler(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment