// 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. // @dart = 2.8 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(), { '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(), { '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(), { '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(), { 'name': 'pluginA', 'package': 'com.company', 'class': 'PluginA', 'supportsEmbeddingV1': true, 'supportsEmbeddingV2': false, }); }); }