mirror of
https://github.com/flutter/packages.git
synced 2025-06-10 06:44:40 +08:00
345 lines
13 KiB
Dart
345 lines
13 KiB
Dart
// Copyright 2013 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_plugin_tools/src/common/core.dart';
|
|
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
|
|
import 'package:flutter_plugin_tools/src/common/repository_package.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../util.dart';
|
|
|
|
void main() {
|
|
late FileSystem fileSystem;
|
|
late Directory packagesDir;
|
|
|
|
setUp(() {
|
|
fileSystem = MemoryFileSystem();
|
|
packagesDir = createPackagesDirectory(fileSystem: fileSystem);
|
|
});
|
|
|
|
group('pluginSupportsPlatform', () {
|
|
test('no platforms', () async {
|
|
final RepositoryPackage plugin =
|
|
RepositoryPackage(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 = RepositoryPackage(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 = RepositoryPackage(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 = RepositoryPackage(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 = RepositoryPackage(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);
|
|
});
|
|
|
|
test('windows without variants is only win32', () async {
|
|
final RepositoryPackage plugin = RepositoryPackage(createFakePlugin(
|
|
'plugin',
|
|
packagesDir,
|
|
platformSupport: <String, PlatformDetails>{
|
|
platformWindows: const PlatformDetails(PlatformSupport.inline),
|
|
},
|
|
));
|
|
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWin32),
|
|
isTrue);
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWinUwp),
|
|
isFalse);
|
|
});
|
|
|
|
test('windows with both variants matches win32 and winuwp', () async {
|
|
final RepositoryPackage plugin = RepositoryPackage(createFakePlugin(
|
|
'plugin', packagesDir,
|
|
platformSupport: <String, PlatformDetails>{
|
|
platformWindows: const PlatformDetails(
|
|
PlatformSupport.federated,
|
|
variants: <String>[platformVariantWin32, platformVariantWinUwp],
|
|
),
|
|
}));
|
|
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWin32),
|
|
isTrue);
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWinUwp),
|
|
isTrue);
|
|
});
|
|
|
|
test('win32 plugin is only win32', () async {
|
|
final RepositoryPackage plugin = RepositoryPackage(createFakePlugin(
|
|
'plugin', packagesDir,
|
|
platformSupport: <String, PlatformDetails>{
|
|
platformWindows: const PlatformDetails(
|
|
PlatformSupport.federated,
|
|
variants: <String>[platformVariantWin32],
|
|
),
|
|
}));
|
|
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWin32),
|
|
isTrue);
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWinUwp),
|
|
isFalse);
|
|
});
|
|
|
|
test('winup plugin is only winuwp', () async {
|
|
final RepositoryPackage plugin = RepositoryPackage(createFakePlugin(
|
|
'plugin',
|
|
packagesDir,
|
|
platformSupport: <String, PlatformDetails>{
|
|
platformWindows: const PlatformDetails(PlatformSupport.federated,
|
|
variants: <String>[platformVariantWinUwp]),
|
|
},
|
|
));
|
|
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWin32),
|
|
isFalse);
|
|
expect(
|
|
pluginSupportsPlatform(platformWindows, plugin,
|
|
variant: platformVariantWinUwp),
|
|
isTrue);
|
|
});
|
|
});
|
|
|
|
group('pluginHasNativeCodeForPlatform', () {
|
|
test('returns false for web', () async {
|
|
final RepositoryPackage plugin = RepositoryPackage(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 = RepositoryPackage(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 = RepositoryPackage(createFakePlugin(
|
|
'plugin',
|
|
packagesDir,
|
|
platformSupport: <String, PlatformDetails>{
|
|
platformLinux: const PlatformDetails(PlatformSupport.inline,
|
|
hasNativeCode: true, hasDartCode: true),
|
|
platformMacOS: const PlatformDetails(PlatformSupport.inline,
|
|
hasNativeCode: true, hasDartCode: true),
|
|
platformWindows: const PlatformDetails(PlatformSupport.inline,
|
|
hasNativeCode: true, 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 = RepositoryPackage(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);
|
|
});
|
|
});
|
|
}
|