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