mirror of
https://github.com/flutter/packages.git
synced 2025-06-23 16:40:00 +08:00
[flutter_plugin_tools] Introduce a class for packages (#4252)
Packages are the primary conceptual object in the tool, but currently they are represented simply as Directory (or occasionally a path string). This introduces an object for packages and: - moves a number of existing utility methods into it - sweeps the code for the obvious cases of using `Directory` to represent a package, especially in method signatures and migrates them - notes a few places where we should migrate later, to avoid ballooning the size of the PR There are no doubt other cases not caught in the sweep, but this gives us a foundation both for new code, and to migrate incrementally toward as we find existing code that was missed.
This commit is contained in:
123
script/tool/test/common/repository_package_test.dart
Normal file
123
script/tool/test/common/repository_package_test.dart
Normal file
@ -0,0 +1,123 @@
|
||||
// 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/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('displayName', () {
|
||||
test('prints packageDir-relative paths by default', () async {
|
||||
expect(
|
||||
RepositoryPackage(packagesDir.childDirectory('foo')).displayName,
|
||||
'foo',
|
||||
);
|
||||
expect(
|
||||
RepositoryPackage(packagesDir
|
||||
.childDirectory('foo')
|
||||
.childDirectory('bar')
|
||||
.childDirectory('baz'))
|
||||
.displayName,
|
||||
'foo/bar/baz',
|
||||
);
|
||||
});
|
||||
|
||||
test('handles third_party/packages/', () async {
|
||||
expect(
|
||||
RepositoryPackage(packagesDir.parent
|
||||
.childDirectory('third_party')
|
||||
.childDirectory('packages')
|
||||
.childDirectory('foo')
|
||||
.childDirectory('bar')
|
||||
.childDirectory('baz'))
|
||||
.displayName,
|
||||
'foo/bar/baz',
|
||||
);
|
||||
});
|
||||
|
||||
test('always uses Posix-style paths', () async {
|
||||
final Directory windowsPackagesDir = createPackagesDirectory(
|
||||
fileSystem: MemoryFileSystem(style: FileSystemStyle.windows));
|
||||
|
||||
expect(
|
||||
RepositoryPackage(windowsPackagesDir.childDirectory('foo')).displayName,
|
||||
'foo',
|
||||
);
|
||||
expect(
|
||||
RepositoryPackage(windowsPackagesDir
|
||||
.childDirectory('foo')
|
||||
.childDirectory('bar')
|
||||
.childDirectory('baz'))
|
||||
.displayName,
|
||||
'foo/bar/baz',
|
||||
);
|
||||
});
|
||||
|
||||
test('elides group name in grouped federated plugin structure', () async {
|
||||
expect(
|
||||
RepositoryPackage(packagesDir
|
||||
.childDirectory('a_plugin')
|
||||
.childDirectory('a_plugin_platform_interface'))
|
||||
.displayName,
|
||||
'a_plugin_platform_interface',
|
||||
);
|
||||
expect(
|
||||
RepositoryPackage(packagesDir
|
||||
.childDirectory('a_plugin')
|
||||
.childDirectory('a_plugin_platform_web'))
|
||||
.displayName,
|
||||
'a_plugin_platform_web',
|
||||
);
|
||||
});
|
||||
|
||||
// The app-facing package doesn't get elided to avoid potential confusion
|
||||
// with the group folder itself.
|
||||
test('does not elide group name for app-facing packages', () async {
|
||||
expect(
|
||||
RepositoryPackage(packagesDir
|
||||
.childDirectory('a_plugin')
|
||||
.childDirectory('a_plugin'))
|
||||
.displayName,
|
||||
'a_plugin/a_plugin',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
group('getExamples', () {
|
||||
test('handles a single example', () async {
|
||||
final Directory plugin = createFakePlugin('a_plugin', packagesDir);
|
||||
|
||||
final List<RepositoryPackage> examples =
|
||||
RepositoryPackage(plugin).getExamples().toList();
|
||||
|
||||
expect(examples.length, 1);
|
||||
expect(examples[0].path, plugin.childDirectory('example').path);
|
||||
});
|
||||
|
||||
test('handles multiple examples', () async {
|
||||
final Directory plugin = createFakePlugin('a_plugin', packagesDir,
|
||||
examples: <String>['example1', 'example2']);
|
||||
|
||||
final List<RepositoryPackage> examples =
|
||||
RepositoryPackage(plugin).getExamples().toList();
|
||||
|
||||
expect(examples.length, 2);
|
||||
expect(examples[0].path,
|
||||
plugin.childDirectory('example').childDirectory('example1').path);
|
||||
expect(examples[1].path,
|
||||
plugin.childDirectory('example').childDirectory('example2').path);
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user