[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,
+    });
+  });
+}