Fix compile expression in tests when precompiled dill files are used. (#84470)
This commit is contained in:
parent
7773d0b020
commit
acd68cf47b
@ -451,6 +451,15 @@ class FlutterPlatform extends PlatformPlugin {
|
|||||||
String mainDart;
|
String mainDart;
|
||||||
if (precompiledDillPath != null) {
|
if (precompiledDillPath != null) {
|
||||||
mainDart = precompiledDillPath;
|
mainDart = precompiledDillPath;
|
||||||
|
// When start paused is specified, it means that the user is likely
|
||||||
|
// running this with a debugger attached. Initialize the resident
|
||||||
|
// compiler in this case.
|
||||||
|
if (debuggingOptions.startPaused) {
|
||||||
|
compiler ??= TestCompiler(debuggingOptions.buildInfo, flutterProject, precompiledDillPath: precompiledDillPath);
|
||||||
|
final Uri testUri = globals.fs.file(testPath).uri;
|
||||||
|
// Trigger a compilation to initialize the resident compiler.
|
||||||
|
unawaited(compiler.compile(testUri));
|
||||||
|
}
|
||||||
} else if (precompiledDillFiles != null) {
|
} else if (precompiledDillFiles != null) {
|
||||||
mainDart = precompiledDillFiles[testPath];
|
mainDart = precompiledDillFiles[testPath];
|
||||||
} else {
|
} else {
|
||||||
|
@ -36,10 +36,14 @@ class TestCompiler {
|
|||||||
/// extension.
|
/// extension.
|
||||||
///
|
///
|
||||||
/// [flutterProject] is the project for which we are running tests.
|
/// [flutterProject] is the project for which we are running tests.
|
||||||
|
///
|
||||||
|
/// If [precompiledDillPath] is passed, it will be used to initialize the
|
||||||
|
/// compiler.
|
||||||
TestCompiler(
|
TestCompiler(
|
||||||
this.buildInfo,
|
this.buildInfo,
|
||||||
this.flutterProject,
|
this.flutterProject,
|
||||||
) : testFilePath = globals.fs.path.join(
|
{ String precompiledDillPath }
|
||||||
|
) : testFilePath = precompiledDillPath ?? globals.fs.path.join(
|
||||||
flutterProject.directory.path,
|
flutterProject.directory.path,
|
||||||
getBuildDirectory(),
|
getBuildDirectory(),
|
||||||
'test_cache',
|
'test_cache',
|
||||||
@ -47,7 +51,8 @@ class TestCompiler {
|
|||||||
trackWidgetCreation: buildInfo.trackWidgetCreation,
|
trackWidgetCreation: buildInfo.trackWidgetCreation,
|
||||||
dartDefines: buildInfo.dartDefines,
|
dartDefines: buildInfo.dartDefines,
|
||||||
extraFrontEndOptions: buildInfo.extraFrontEndOptions,
|
extraFrontEndOptions: buildInfo.extraFrontEndOptions,
|
||||||
)) {
|
)),
|
||||||
|
shouldCopyDillFile = precompiledDillPath == null {
|
||||||
// Compiler maintains and updates single incremental dill file.
|
// Compiler maintains and updates single incremental dill file.
|
||||||
// Incremental compilation requests done for each test copy that file away
|
// Incremental compilation requests done for each test copy that file away
|
||||||
// for independent execution.
|
// for independent execution.
|
||||||
@ -66,6 +71,7 @@ class TestCompiler {
|
|||||||
final FlutterProject flutterProject;
|
final FlutterProject flutterProject;
|
||||||
final BuildInfo buildInfo;
|
final BuildInfo buildInfo;
|
||||||
final String testFilePath;
|
final String testFilePath;
|
||||||
|
final bool shouldCopyDillFile;
|
||||||
|
|
||||||
|
|
||||||
ResidentCompiler compiler;
|
ResidentCompiler compiler;
|
||||||
@ -112,6 +118,8 @@ class TestCompiler {
|
|||||||
platform: globals.platform,
|
platform: globals.platform,
|
||||||
testCompilation: true,
|
testCompilation: true,
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
|
fileSystemRoots: buildInfo.fileSystemRoots,
|
||||||
|
fileSystemScheme: buildInfo.fileSystemScheme,
|
||||||
);
|
);
|
||||||
return residentCompiler;
|
return residentCompiler;
|
||||||
}
|
}
|
||||||
@ -140,7 +148,7 @@ class TestCompiler {
|
|||||||
<Uri>[request.mainUri],
|
<Uri>[request.mainUri],
|
||||||
outputPath: outputDill.path,
|
outputPath: outputDill.path,
|
||||||
packageConfig: buildInfo.packageConfig,
|
packageConfig: buildInfo.packageConfig,
|
||||||
projectRootPath: flutterProject.directory.absolute.path,
|
projectRootPath: flutterProject?.directory?.absolute?.path,
|
||||||
fs: globals.fs,
|
fs: globals.fs,
|
||||||
);
|
);
|
||||||
final String outputPath = compilerOutput?.outputFilename;
|
final String outputPath = compilerOutput?.outputFilename;
|
||||||
@ -149,11 +157,12 @@ class TestCompiler {
|
|||||||
// errors, pass [null] upwards to the consumer and shutdown the
|
// errors, pass [null] upwards to the consumer and shutdown the
|
||||||
// compiler to avoid reusing compiler that might have gotten into
|
// compiler to avoid reusing compiler that might have gotten into
|
||||||
// a weird state.
|
// a weird state.
|
||||||
final String path = request.mainUri.toFilePath(windows: globals.platform.isWindows);
|
|
||||||
if (outputPath == null || compilerOutput.errorCount > 0) {
|
if (outputPath == null || compilerOutput.errorCount > 0) {
|
||||||
request.result.complete(null);
|
request.result.complete(null);
|
||||||
await _shutdown();
|
await _shutdown();
|
||||||
} else {
|
} else {
|
||||||
|
if (shouldCopyDillFile) {
|
||||||
|
final String path = request.mainUri.toFilePath(windows: globals.platform.isWindows);
|
||||||
final File outputFile = globals.fs.file(outputPath);
|
final File outputFile = globals.fs.file(outputPath);
|
||||||
final File kernelReadyToRun = await outputFile.copy('$path.dill');
|
final File kernelReadyToRun = await outputFile.copy('$path.dill');
|
||||||
final File testCache = globals.fs.file(testFilePath);
|
final File testCache = globals.fs.file(testFilePath);
|
||||||
@ -167,10 +176,13 @@ class TestCompiler {
|
|||||||
await outputFile.copy(testFilePath);
|
await outputFile.copy(testFilePath);
|
||||||
}
|
}
|
||||||
request.result.complete(kernelReadyToRun.path);
|
request.result.complete(kernelReadyToRun.path);
|
||||||
|
} else {
|
||||||
|
request.result.complete(outputPath);
|
||||||
|
}
|
||||||
compiler.accept();
|
compiler.accept();
|
||||||
compiler.reset();
|
compiler.reset();
|
||||||
}
|
}
|
||||||
globals.printTrace('Compiling $path took ${compilerTime.elapsedMilliseconds}ms');
|
globals.printTrace('Compiling ${request.mainUri} took ${compilerTime.elapsedMilliseconds}ms');
|
||||||
// Only remove now when we finished processing the element
|
// Only remove now when we finished processing the element
|
||||||
compilationQueue.removeAt(0);
|
compilationQueue.removeAt(0);
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,23 @@ void main() {
|
|||||||
Logger: () => BufferLogger.test(),
|
Logger: () => BufferLogger.test(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testUsingContext('TestCompiler does not try to cache the dill file when precompiled dill is passed', () async {
|
||||||
|
residentCompiler.compilerOutput = const CompilerOutput('abc.dill', 0, <Uri>[]);
|
||||||
|
final FakeTestCompiler testCompiler = FakeTestCompiler(
|
||||||
|
debugBuild,
|
||||||
|
FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||||
|
residentCompiler,
|
||||||
|
precompiledDillPath: 'precompiled.dill',
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(await testCompiler.compile(Uri.parse('test/foo.dart')), 'abc.dill');
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
FileSystem: () => fileSystem,
|
||||||
|
Platform: () => linuxPlatform,
|
||||||
|
ProcessManager: () => FakeProcessManager.any(),
|
||||||
|
Logger: () => BufferLogger.test(),
|
||||||
|
});
|
||||||
|
|
||||||
testUsingContext('TestCompiler reports null when a compile fails', () async {
|
testUsingContext('TestCompiler reports null when a compile fails', () async {
|
||||||
residentCompiler.compilerOutput = const CompilerOutput('abc.dill', 1, <Uri>[]);
|
residentCompiler.compilerOutput = const CompilerOutput('abc.dill', 1, <Uri>[]);
|
||||||
final FakeTestCompiler testCompiler = FakeTestCompiler(
|
final FakeTestCompiler testCompiler = FakeTestCompiler(
|
||||||
@ -103,8 +120,10 @@ class FakeTestCompiler extends TestCompiler {
|
|||||||
FakeTestCompiler(
|
FakeTestCompiler(
|
||||||
BuildInfo buildInfo,
|
BuildInfo buildInfo,
|
||||||
FlutterProject flutterProject,
|
FlutterProject flutterProject,
|
||||||
this.residentCompiler,
|
this.residentCompiler, {
|
||||||
) : super(buildInfo, flutterProject);
|
String precompiledDillPath,
|
||||||
|
}
|
||||||
|
) : super(buildInfo, flutterProject, precompiledDillPath: precompiledDillPath);
|
||||||
|
|
||||||
final FakeResidentCompiler residentCompiler;
|
final FakeResidentCompiler residentCompiler;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user