Files
packages/script/tool/test/common/plugin_utils_test.dart
stuartmorgan f1f0f240db [tool] Update Dart SDK version (#4402)
Since the tool only needs to support back to Flutter 3.3 (the oldest version we still run CI with), this updates the tool to the corresponding minimum Dart version.

This allows the use of `super` parameters, so `dart fix --apply` was run to convert them all (and remove all the includes that were only needed for setting default values).

Also opportunistically cleans up a bunch of unnecessary, very old `dart:async` includes. (Other than those removals, the changes here are all `dart fix`-generated.)
2023-07-08 14:31:19 +00:00

260 lines
10 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: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 = 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);
});
});
}