[flutter_tools] symlink win32 plugins as UWP plugins (#80242)

This commit is contained in:
Jonah Williams 2021-04-12 16:54:10 -07:00 committed by GitHub
parent 7c78a05793
commit d24469374b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 5 deletions

View file

@ -1088,7 +1088,8 @@ Future<void> _writeWebPluginRegistrant(FlutterProject project, List<Plugin> plug
///
/// This uses [project.flutterPluginsDependenciesFile], so it should only be
/// run after refreshPluginList has been run since the last plugin change.
void createPluginSymlinks(FlutterProject project, {bool force = false}) {
void createPluginSymlinks(FlutterProject project, {bool force = false, @visibleForTesting FeatureFlags featureFlagsOverride}) {
final FeatureFlags localFeatureFlags = featureFlagsOverride ?? featureFlags;
Map<String, dynamic> platformPlugins;
final String pluginFileContent = _readFileContent(project.flutterPluginsDependenciesFile);
if (pluginFileContent != null) {
@ -1097,24 +1098,24 @@ void createPluginSymlinks(FlutterProject project, {bool force = false}) {
}
platformPlugins ??= <String, dynamic>{};
if (featureFlags.isWindowsEnabled && project.windows.existsSync()) {
if (localFeatureFlags.isWindowsEnabled && project.windows.existsSync()) {
_createPlatformPluginSymlinks(
project.windows.pluginSymlinkDirectory,
platformPlugins[project.windows.pluginConfigKey] as List<dynamic>,
force: force,
);
}
if (featureFlags.isLinuxEnabled && project.linux.existsSync()) {
if (localFeatureFlags.isLinuxEnabled && project.linux.existsSync()) {
_createPlatformPluginSymlinks(
project.linux.pluginSymlinkDirectory,
platformPlugins[project.linux.pluginConfigKey] as List<dynamic>,
force: force,
);
}
if (featureFlags.isWindowsUwpEnabled && project.windowsUwp.existsSync()) {
if (localFeatureFlags.isWindowsUwpEnabled && project.windowsUwp.existsSync()) {
_createPlatformPluginSymlinks(
project.windowsUwp.pluginSymlinkDirectory,
<dynamic>[],
platformPlugins[project.windows.pluginConfigKey] as List<dynamic>,
force: force,
);
}

View file

@ -14,9 +14,24 @@ import 'package:flutter_tools/src/plugins.dart';
import 'package:flutter_tools/src/project.dart';
import '../../src/common.dart';
import '../../src/fakes.dart';
const TemplateRenderer renderer = MustacheTemplateRenderer();
const String kPluginDependencies = r'''
{
"info":"This is a generated file; do not edit or check into version control.",
"plugins":{
"windows":[
{
"name":"example","path":"C:\\\\example\\\\",
"dependencies":[]
}
]
}
}
''';
void main() {
testWithoutContext('injects Win32 plugins', () async {
@ -64,10 +79,31 @@ void main() {
contains('#include <test/foo.h>'),
);
});
testWithoutContext('Symlink injection treats UWP as Win32', () {
final FileSystem fileSystem = MemoryFileSystem.test();
setUpProject(fileSystem);
final FlutterProject flutterProject = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory);
flutterProject.flutterPluginsDependenciesFile.writeAsStringSync(kPluginDependencies);
createPluginSymlinks(
flutterProject,
featureFlagsOverride: TestFeatureFlags(isWindowsUwpEnabled: true),
);
expect(flutterProject.windowsUwp.pluginSymlinkDirectory, exists);
final Link link = flutterProject.windowsUwp.pluginSymlinkDirectory.listSync().single as Link;
expect(link.path, '/winuwp/flutter/ephemeral/.plugin_symlinks/example');
expect(link.targetSync(), r'C:\\example\\');
});
}
void setUpProject(FileSystem fileSystem) {
fileSystem.file('pubspec.yaml').createSync();
fileSystem.file('winuwp/CMakeLists.txt')
.createSync(recursive: true);
fileSystem.file('winuwp/project_version')
..createSync(recursive: true)
..writeAsStringSync('0');