diff --git a/packages/flutter_tools/lib/src/plugins.dart b/packages/flutter_tools/lib/src/plugins.dart index 219d846fcbd..be8de7c477f 100644 --- a/packages/flutter_tools/lib/src/plugins.dart +++ b/packages/flutter_tools/lib/src/plugins.dart @@ -1088,7 +1088,8 @@ Future _writeWebPluginRegistrant(FlutterProject project, List 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 platformPlugins; final String pluginFileContent = _readFileContent(project.flutterPluginsDependenciesFile); if (pluginFileContent != null) { @@ -1097,24 +1098,24 @@ void createPluginSymlinks(FlutterProject project, {bool force = false}) { } platformPlugins ??= {}; - if (featureFlags.isWindowsEnabled && project.windows.existsSync()) { + if (localFeatureFlags.isWindowsEnabled && project.windows.existsSync()) { _createPlatformPluginSymlinks( project.windows.pluginSymlinkDirectory, platformPlugins[project.windows.pluginConfigKey] as List, force: force, ); } - if (featureFlags.isLinuxEnabled && project.linux.existsSync()) { + if (localFeatureFlags.isLinuxEnabled && project.linux.existsSync()) { _createPlatformPluginSymlinks( project.linux.pluginSymlinkDirectory, platformPlugins[project.linux.pluginConfigKey] as List, force: force, ); } - if (featureFlags.isWindowsUwpEnabled && project.windowsUwp.existsSync()) { + if (localFeatureFlags.isWindowsUwpEnabled && project.windowsUwp.existsSync()) { _createPlatformPluginSymlinks( project.windowsUwp.pluginSymlinkDirectory, - [], + platformPlugins[project.windows.pluginConfigKey] as List, force: force, ); } diff --git a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart index 09324d1a2d4..895f65e1b1e 100644 --- a/packages/flutter_tools/test/general.shard/windows/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/plugins_test.dart @@ -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 '), ); }); + + 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');