| // Copyright 2013 The Flutter Authors | |
| // 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:flutter_plugin_tools/src/common/core.dart'; | |
| import 'package:flutter_plugin_tools/src/common/plugin_utils.dart'; | |
| import 'package:test/test.dart'; | |
| import '../util.dart'; | |
| void main() { | |
| late Directory packagesDir; | |
| setUp(() { | |
| (:packagesDir, processRunner: _, gitProcessRunner: _, gitDir: _) = configureBaseCommandMocks(); | |
| }); | |
| group('pluginSupportsPlatform', () { | |
| test('no platforms', () async { | |
| final RepositoryPackage plugin = createFakePlugin('plugin', packagesDir); | |
| expect(pluginSupportsPlatform(platformAndroid, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformIOS, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformLinux, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformMacOS, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformWeb, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformWindows, plugin), isFalse); | |
| }); | |
| test('all platforms', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformAndroid: const PlatformDetails(PlatformSupport.inline), | |
| platformIOS: const PlatformDetails(PlatformSupport.inline), | |
| platformLinux: const PlatformDetails(PlatformSupport.inline), | |
| platformMacOS: const PlatformDetails(PlatformSupport.inline), | |
| platformWeb: const PlatformDetails(PlatformSupport.inline), | |
| platformWindows: const PlatformDetails(PlatformSupport.inline), | |
| }, | |
| ); | |
| expect(pluginSupportsPlatform(platformAndroid, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformIOS, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformLinux, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformMacOS, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformWeb, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformWindows, plugin), isTrue); | |
| }); | |
| test('some platforms', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformAndroid: const PlatformDetails(PlatformSupport.inline), | |
| platformLinux: const PlatformDetails(PlatformSupport.inline), | |
| platformWeb: const PlatformDetails(PlatformSupport.inline), | |
| }, | |
| ); | |
| expect(pluginSupportsPlatform(platformAndroid, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformIOS, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformLinux, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformMacOS, plugin), isFalse); | |
| expect(pluginSupportsPlatform(platformWeb, plugin), isTrue); | |
| expect(pluginSupportsPlatform(platformWindows, plugin), isFalse); | |
| }); | |
| test('inline plugins are only detected as inline', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformAndroid: const PlatformDetails(PlatformSupport.inline), | |
| platformIOS: const PlatformDetails(PlatformSupport.inline), | |
| platformLinux: const PlatformDetails(PlatformSupport.inline), | |
| platformMacOS: const PlatformDetails(PlatformSupport.inline), | |
| platformWeb: const PlatformDetails(PlatformSupport.inline), | |
| platformWindows: const PlatformDetails(PlatformSupport.inline), | |
| }, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformAndroid, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformAndroid, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformIOS, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformIOS, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformLinux, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformLinux, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformMacOS, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformMacOS, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWeb, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWeb, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWindows, plugin, requiredMode: PlatformSupport.inline), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWindows, plugin, requiredMode: PlatformSupport.federated), | |
| isFalse, | |
| ); | |
| }); | |
| test('federated plugins are only detected as federated', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformAndroid: const PlatformDetails(PlatformSupport.federated), | |
| platformIOS: const PlatformDetails(PlatformSupport.federated), | |
| platformLinux: const PlatformDetails(PlatformSupport.federated), | |
| platformMacOS: const PlatformDetails(PlatformSupport.federated), | |
| platformWeb: const PlatformDetails(PlatformSupport.federated), | |
| platformWindows: const PlatformDetails(PlatformSupport.federated), | |
| }, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformAndroid, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformAndroid, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformIOS, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformIOS, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformLinux, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformLinux, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformMacOS, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformMacOS, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWeb, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWeb, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWindows, plugin, requiredMode: PlatformSupport.federated), | |
| isTrue, | |
| ); | |
| expect( | |
| pluginSupportsPlatform(platformWindows, plugin, requiredMode: PlatformSupport.inline), | |
| isFalse, | |
| ); | |
| }); | |
| }); | |
| group('pluginHasNativeCodeForPlatform', () { | |
| test('returns false for web', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformWeb: const PlatformDetails(PlatformSupport.inline), | |
| }, | |
| ); | |
| expect(pluginHasNativeCodeForPlatform(platformWeb, plugin), isFalse); | |
| }); | |
| test('returns false for a native-only plugin', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformLinux: const PlatformDetails(PlatformSupport.inline), | |
| platformMacOS: const PlatformDetails(PlatformSupport.inline), | |
| platformWindows: const PlatformDetails(PlatformSupport.inline), | |
| }, | |
| ); | |
| expect(pluginHasNativeCodeForPlatform(platformLinux, plugin), isTrue); | |
| expect(pluginHasNativeCodeForPlatform(platformMacOS, plugin), isTrue); | |
| expect(pluginHasNativeCodeForPlatform(platformWindows, plugin), isTrue); | |
| }); | |
| test('returns true for a native+Dart plugin', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformLinux: const PlatformDetails(PlatformSupport.inline, hasDartCode: true), | |
| platformMacOS: const PlatformDetails(PlatformSupport.inline, hasDartCode: true), | |
| platformWindows: const PlatformDetails(PlatformSupport.inline, hasDartCode: true), | |
| }, | |
| ); | |
| expect(pluginHasNativeCodeForPlatform(platformLinux, plugin), isTrue); | |
| expect(pluginHasNativeCodeForPlatform(platformMacOS, plugin), isTrue); | |
| expect(pluginHasNativeCodeForPlatform(platformWindows, plugin), isTrue); | |
| }); | |
| test('returns false for a Dart-only plugin', () async { | |
| final RepositoryPackage plugin = createFakePlugin( | |
| 'plugin', | |
| packagesDir, | |
| platformSupport: <String, PlatformDetails>{ | |
| platformLinux: const PlatformDetails( | |
| PlatformSupport.inline, | |
| hasNativeCode: false, | |
| hasDartCode: true, | |
| ), | |
| platformMacOS: const PlatformDetails( | |
| PlatformSupport.inline, | |
| hasNativeCode: false, | |
| hasDartCode: true, | |
| ), | |
| platformWindows: const PlatformDetails( | |
| PlatformSupport.inline, | |
| hasNativeCode: false, | |
| hasDartCode: true, | |
| ), | |
| }, | |
| ); | |
| expect(pluginHasNativeCodeForPlatform(platformLinux, plugin), isFalse); | |
| expect(pluginHasNativeCodeForPlatform(platformMacOS, plugin), isFalse); | |
| expect(pluginHasNativeCodeForPlatform(platformWindows, plugin), isFalse); | |
| }); | |
| }); | |
| } |