Unverified Commit 7e60a65f authored by Emmanuel Garcia's avatar Emmanuel Garcia Committed by GitHub

Don't read AndroidManifest.xml if it doesn't exit (#43669)

parent 53dcf92f
...@@ -361,8 +361,11 @@ List<Map<String, dynamic>> _extractPlatformMaps(List<Plugin> plugins, String typ ...@@ -361,8 +361,11 @@ List<Map<String, dynamic>> _extractPlatformMaps(List<Plugin> plugins, String typ
/// [project] is using. /// [project] is using.
String _getAndroidEmbeddingVersion(FlutterProject project) { String _getAndroidEmbeddingVersion(FlutterProject project) {
assert(project.android != null); assert(project.android != null);
final File androidManifest = project.android.appManifestFile; final File androidManifest = project.android.appManifestFile;
assert(androidManifest.existsSync()); if (androidManifest == null || !androidManifest.existsSync()) {
return '1';
}
xml.XmlDocument document; xml.XmlDocument document;
try { try {
document = xml.parse(androidManifest.readAsStringSync()); document = xml.parse(androidManifest.readAsStringSync());
......
...@@ -16,6 +16,7 @@ import '../src/common.dart'; ...@@ -16,6 +16,7 @@ import '../src/common.dart';
import '../src/context.dart'; import '../src/context.dart';
void main() { void main() {
group('plugins', () {
FileSystem fs; FileSystem fs;
MockFlutterProject flutterProject; MockFlutterProject flutterProject;
MockIosProject iosProject; MockIosProject iosProject;
...@@ -60,12 +61,12 @@ void main() { ...@@ -60,12 +61,12 @@ void main() {
// Makes the dummy package pointed to by packagesFile look like a plugin. // Makes the dummy package pointed to by packagesFile look like a plugin.
void configureDummyPackageAsPlugin() { void configureDummyPackageAsPlugin() {
dummyPackageDirectory.parent.childFile('pubspec.yaml')..createSync(recursive: true)..writeAsStringSync(''' dummyPackageDirectory.parent.childFile('pubspec.yaml')..createSync(recursive: true)..writeAsStringSync('''
flutter: flutter:
plugin: plugin:
platforms: platforms:
ios: ios:
pluginClass: FLESomePlugin pluginClass: FLESomePlugin
'''); ''');
} }
// Creates the files that would indicate that pod install has run for the // Creates the files that would indicate that pod install has run for the
...@@ -125,20 +126,20 @@ flutter: ...@@ -125,20 +126,20 @@ flutter:
MockXcodeProjectInterpreter xcodeProjectInterpreter; MockXcodeProjectInterpreter xcodeProjectInterpreter;
const String kAndroidManifestUsingOldEmbedding = ''' const String kAndroidManifestUsingOldEmbedding = '''
<manifest> <manifest>
<application> <application>
</application> </application>
</manifest> </manifest>
'''; ''';
const String kAndroidManifestUsingNewEmbedding = ''' const String kAndroidManifestUsingNewEmbedding = '''
<manifest> <manifest>
<application> <application>
<meta-data <meta-data
android:name="flutterEmbedding" android:name="flutterEmbedding"
android:value="2" /> android:value="2" />
</application> </application>
</manifest> </manifest>
'''; ''';
setUp(() { setUp(() {
featureFlags = MockFeatureFlags(); featureFlags = MockFeatureFlags();
...@@ -216,11 +217,11 @@ flutter: ...@@ -216,11 +217,11 @@ flutter:
pluginUsingJavaAndNewEmbeddingDir pluginUsingJavaAndNewEmbeddingDir
.childFile('pubspec.yaml') .childFile('pubspec.yaml')
.writeAsStringSync(''' .writeAsStringSync('''
flutter: flutter:
plugin: plugin:
androidPackage: plugin1 androidPackage: plugin1
pluginClass: UseNewEmbedding pluginClass: UseNewEmbedding
'''); ''');
pluginUsingJavaAndNewEmbeddingDir pluginUsingJavaAndNewEmbeddingDir
.childDirectory('android') .childDirectory('android')
.childDirectory('src') .childDirectory('src')
...@@ -236,11 +237,11 @@ flutter: ...@@ -236,11 +237,11 @@ flutter:
pluginUsingKotlinAndNewEmbeddingDir pluginUsingKotlinAndNewEmbeddingDir
.childFile('pubspec.yaml') .childFile('pubspec.yaml')
.writeAsStringSync(''' .writeAsStringSync('''
flutter: flutter:
plugin: plugin:
androidPackage: plugin2 androidPackage: plugin2
pluginClass: UseNewEmbedding pluginClass: UseNewEmbedding
'''); ''');
pluginUsingKotlinAndNewEmbeddingDir pluginUsingKotlinAndNewEmbeddingDir
.childDirectory('android') .childDirectory('android')
.childDirectory('src') .childDirectory('src')
...@@ -256,11 +257,11 @@ flutter: ...@@ -256,11 +257,11 @@ flutter:
pluginUsingOldEmbeddingDir pluginUsingOldEmbeddingDir
.childFile('pubspec.yaml') .childFile('pubspec.yaml')
.writeAsStringSync(''' .writeAsStringSync('''
flutter: flutter:
plugin: plugin:
androidPackage: plugin3 androidPackage: plugin3
pluginClass: UseOldEmbedding pluginClass: UseOldEmbedding
'''); ''');
pluginUsingOldEmbeddingDir pluginUsingOldEmbeddingDir
.childDirectory('android') .childDirectory('android')
.childDirectory('src') .childDirectory('src')
...@@ -398,6 +399,20 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} ...@@ -398,6 +399,20 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
FeatureFlags: () => featureFlags, FeatureFlags: () => featureFlags,
}); });
testUsingContext('Does not throw when AndroidManifest.xml is not found', () async {
when(flutterProject.isModule).thenReturn(false);
final File manifest = MockFile();
when(manifest.existsSync()).thenReturn(false);
when(androidProject.appManifestFile).thenReturn(manifest);
await injectPlugins(flutterProject);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
ProcessManager: () => FakeProcessManager.any(),
});
testUsingContext('Registrant for web doesn\'t escape slashes in imports', () async { testUsingContext('Registrant for web doesn\'t escape slashes in imports', () async {
when(flutterProject.isModule).thenReturn(true); when(flutterProject.isModule).thenReturn(true);
when(featureFlags.isWebEnabled).thenReturn(true); when(featureFlags.isWebEnabled).thenReturn(true);
...@@ -413,13 +428,13 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} ...@@ -413,13 +428,13 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
final Directory webPluginWithNestedFile = final Directory webPluginWithNestedFile =
fs.systemTempDirectory.createTempSync('web_plugin_with_nested'); fs.systemTempDirectory.createTempSync('web_plugin_with_nested');
webPluginWithNestedFile.childFile('pubspec.yaml').writeAsStringSync(''' webPluginWithNestedFile.childFile('pubspec.yaml').writeAsStringSync('''
flutter: flutter:
plugin: plugin:
platforms: platforms:
web: web:
pluginClass: WebPlugin pluginClass: WebPlugin
fileName: src/web_plugin.dart fileName: src/web_plugin.dart
'''); ''');
webPluginWithNestedFile webPluginWithNestedFile
.childDirectory('lib') .childDirectory('lib')
.childDirectory('src') .childDirectory('src')
...@@ -446,11 +461,13 @@ web_plugin_with_nested:${webPluginWithNestedFile.childDirectory('lib').uri.toStr ...@@ -446,11 +461,13 @@ web_plugin_with_nested:${webPluginWithNestedFile.childDirectory('lib').uri.toStr
FeatureFlags: () => featureFlags, FeatureFlags: () => featureFlags,
}); });
}); });
});
} }
class MockAndroidProject extends Mock implements AndroidProject {} class MockAndroidProject extends Mock implements AndroidProject {}
class MockFeatureFlags extends Mock implements FeatureFlags {} class MockFeatureFlags extends Mock implements FeatureFlags {}
class MockFlutterProject extends Mock implements FlutterProject {} class MockFlutterProject extends Mock implements FlutterProject {}
class MockFile extends Mock implements File {}
class MockIosProject extends Mock implements IosProject {} class MockIosProject extends Mock implements IosProject {}
class MockMacOSProject extends Mock implements MacOSProject {} class MockMacOSProject extends Mock implements MacOSProject {}
class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {} class MockXcodeProjectInterpreter extends Mock implements XcodeProjectInterpreter {}
......
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