[flutter_tools] cleanups to plugin test cases (#67242)
Removes usage of global variables, expands documentation, and fixes some formatting inconsistencies. Increased test coverage for android plugin to prove it can determine the embedding version.
diff --git a/packages/flutter_tools/test/general.shard/android_plugin_test.dart b/packages/flutter_tools/test/general.shard/android_plugin_test.dart
new file mode 100644
index 0000000..e411cac
--- /dev/null
+++ b/packages/flutter_tools/test/general.shard/android_plugin_test.dart
@@ -0,0 +1,121 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:file/file.dart';
+import 'package:file/memory.dart';
+import 'package:flutter_tools/src/platform_plugins.dart';
+
+
+import '../src/common.dart';
+
+void main() {
+ testWithoutContext('AndroidPlugin throws tool exit if the plugin main class can not be found', () {
+ final FileSystem fileSystem = MemoryFileSystem.test();
+ final AndroidPlugin androidPlugin = AndroidPlugin(
+ name: 'pluginA',
+ package: 'com.company',
+ pluginClass: 'PluginA',
+ pluginPath: '.pub_cache/plugin_a',
+ fileSystem: fileSystem,
+ );
+
+ expect(() => androidPlugin.toMap(), throwsToolExit(
+ message: "The plugin `pluginA` doesn't have a main class defined in "
+ '.pub_cache/plugin_a/android/src/main/java/com/company/PluginA.java '
+ 'or .pub_cache/plugin_a/android/src/main/kotlin/com/company/PluginA.kt'
+ ));
+ });
+
+ testWithoutContext('AndroidPlugin parses embedding version 2 from the Java search path', () {
+ final FileSystem fileSystem = MemoryFileSystem.test();
+ final AndroidPlugin androidPlugin = AndroidPlugin(
+ name: 'pluginA',
+ package: 'com.company',
+ pluginClass: 'PluginA',
+ pluginPath: '.pub_cache/plugin_a',
+ fileSystem: fileSystem,
+ );
+
+ fileSystem.file('.pub_cache/plugin_a/android/src/main/java/com/company/PluginA.java')
+ ..createSync(recursive: true)
+ ..writeAsStringSync('io.flutter.embedding.engine.plugins.FlutterPlugin');
+
+ expect(androidPlugin.toMap(), <String, Object>{
+ 'name': 'pluginA',
+ 'package': 'com.company',
+ 'class': 'PluginA',
+ 'supportsEmbeddingV1': false,
+ 'supportsEmbeddingV2': true,
+ });
+ });
+
+ testWithoutContext('AndroidPlugin parses embedding version 1 from the Java search path', () {
+ final FileSystem fileSystem = MemoryFileSystem.test();
+ final AndroidPlugin androidPlugin = AndroidPlugin(
+ name: 'pluginA',
+ package: 'com.company',
+ pluginClass: 'PluginA',
+ pluginPath: '.pub_cache/plugin_a',
+ fileSystem: fileSystem,
+ );
+
+ fileSystem.file('.pub_cache/plugin_a/android/src/main/java/com/company/PluginA.java')
+ ..createSync(recursive: true)
+ ..writeAsStringSync('some.other.string');
+
+ expect(androidPlugin.toMap(), <String, Object>{
+ 'name': 'pluginA',
+ 'package': 'com.company',
+ 'class': 'PluginA',
+ 'supportsEmbeddingV1': true,
+ 'supportsEmbeddingV2': false,
+ });
+ });
+
+ testWithoutContext('AndroidPlugin parses embedding version 2 from the Kotlin search path', () {
+ final FileSystem fileSystem = MemoryFileSystem.test();
+ final AndroidPlugin androidPlugin = AndroidPlugin(
+ name: 'pluginA',
+ package: 'com.company',
+ pluginClass: 'PluginA',
+ pluginPath: '.pub_cache/plugin_a',
+ fileSystem: fileSystem,
+ );
+
+ fileSystem.file('.pub_cache/plugin_a/android/src/main/kotlin/com/company/PluginA.kt')
+ ..createSync(recursive: true)
+ ..writeAsStringSync('io.flutter.embedding.engine.plugins.FlutterPlugin');
+
+ expect(androidPlugin.toMap(), <String, Object>{
+ 'name': 'pluginA',
+ 'package': 'com.company',
+ 'class': 'PluginA',
+ 'supportsEmbeddingV1': false,
+ 'supportsEmbeddingV2': true,
+ });
+ });
+
+ testWithoutContext('AndroidPlugin parses embedding version 1 from the Kotlin search path', () {
+ final FileSystem fileSystem = MemoryFileSystem.test();
+ final AndroidPlugin androidPlugin = AndroidPlugin(
+ name: 'pluginA',
+ package: 'com.company',
+ pluginClass: 'PluginA',
+ pluginPath: '.pub_cache/plugin_a',
+ fileSystem: fileSystem,
+ );
+
+ fileSystem.file('.pub_cache/plugin_a/android/src/main/kotlin/com/company/PluginA.kt')
+ ..createSync(recursive: true)
+ ..writeAsStringSync('some.other.string');
+
+ expect(androidPlugin.toMap(), <String, Object>{
+ 'name': 'pluginA',
+ 'package': 'com.company',
+ 'class': 'PluginA',
+ 'supportsEmbeddingV1': true,
+ 'supportsEmbeddingV2': false,
+ });
+ });
+}