[tool] Add pigeon support to update-dependency (#3640)

[tool] Add pigeon support to update-dependency
This commit is contained in:
stuartmorgan
2023-04-05 03:44:19 -07:00
committed by GitHub
parent 306bac94b4
commit f224eea858
26 changed files with 853 additions and 547 deletions

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
@ -211,10 +209,10 @@ void main() {
test(
'explicitly specifying the plugin (group) name of a federated plugin '
'should include all plugins in the group', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1/plugin1.dart
'''),
''')),
];
final Directory pluginGroup = packagesDir.childDirectory('plugin1');
final RepositoryPackage appFacingPackage =
@ -239,10 +237,10 @@ packages/plugin1/plugin1/plugin1.dart
test(
'specifying the app-facing package of a federated plugin using its '
'fully qualified name should include only that package', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1/plugin1.dart
'''),
''')),
];
final Directory pluginGroup = packagesDir.childDirectory('plugin1');
final RepositoryPackage appFacingPackage =
@ -259,10 +257,10 @@ packages/plugin1/plugin1/plugin1.dart
test(
'specifying a package of a federated plugin by its name should '
'include only that package', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1/plugin1.dart
'''),
''')),
];
final Directory pluginGroup = packagesDir.childDirectory('plugin1');
@ -383,8 +381,9 @@ packages/plugin1/plugin1/plugin1.dart
test(
'all plugins should be tested if there are no plugin related changes.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'AUTHORS'),
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'AUTHORS')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -398,11 +397,12 @@ packages/plugin1/plugin1/plugin1.dart
});
test('all plugins should be tested if .cirrus.yml changes.', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
.cirrus.yml
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -423,11 +423,12 @@ packages/plugin1/CHANGELOG
});
test('all plugins should be tested if .ci.yaml changes', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
.ci.yaml
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -448,11 +449,12 @@ packages/plugin1/CHANGELOG
test('all plugins should be tested if anything in .ci/ changes',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
.ci/Dockerfile
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -473,11 +475,12 @@ packages/plugin1/CHANGELOG
test('all plugins should be tested if anything in script/ changes.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
script/tool_runner.sh
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -498,11 +501,12 @@ packages/plugin1/CHANGELOG
test('all plugins should be tested if the root analysis options change.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
analysis_options.yaml
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -523,11 +527,12 @@ packages/plugin1/CHANGELOG
test('all plugins should be tested if formatting options change.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
.clang-format
packages/plugin1/CHANGELOG
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -547,8 +552,9 @@ packages/plugin1/CHANGELOG
});
test('Only changed plugin should be tested.', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -568,11 +574,12 @@ packages/plugin1/CHANGELOG
test('multiple files in one plugin should also test the plugin',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1.dart
packages/plugin1/ios/plugin1.m
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -585,11 +592,12 @@ packages/plugin1/ios/plugin1.m
test('multiple plugins changed should test all the changed plugins',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1.dart
packages/plugin2/ios/plugin2.m
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -606,12 +614,13 @@ packages/plugin2/ios/plugin2.m
test(
'multiple plugins inside the same plugin group changed should output the plugin group name',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1/plugin1.dart
packages/plugin1/plugin1_platform_interface/plugin1_platform_interface.dart
packages/plugin1/plugin1_web/plugin1_web.dart
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
@ -626,10 +635,11 @@ packages/plugin1/plugin1_web/plugin1_web.dart
test(
'changing one plugin in a federated group should only include that plugin',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1/plugin1.dart
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
@ -643,12 +653,13 @@ packages/plugin1/plugin1/plugin1.dart
});
test('--exclude flag works with --run-on-changed-packages', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/plugin1/plugin1.dart
packages/plugin2/ios/plugin2.m
packages/plugin3/plugin3.dart
'''),
''')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
@ -677,8 +688,9 @@ packages/plugin3/plugin3.dart
test(
'no packages should be tested if there are no plugin related changes.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'AUTHORS'),
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'AUTHORS')),
];
createFakePackage('a_package', packagesDir);
await runCapturingPrint(
@ -689,15 +701,16 @@ packages/plugin3/plugin3.dart
test('no packages should be tested even if special repo files change.',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
.cirrus.yml
.ci.yaml
.ci/Dockerfile
.clang-format
analysis_options.yaml
script/tool_runner.sh
'''),
''')),
];
createFakePackage('a_package', packagesDir);
await runCapturingPrint(
@ -707,8 +720,10 @@ script/tool_runner.sh
});
test('Only changed packages should be tested.', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/a_package/lib/a_package.dart'),
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(
MockProcess(stdout: 'packages/a_package/lib/a_package.dart')),
];
final RepositoryPackage packageA =
createFakePackage('a_package', packagesDir);
@ -728,11 +743,12 @@ script/tool_runner.sh
test('multiple packages changed should test all the changed packages',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/a_package/lib/a_package.dart
packages/b_package/lib/src/foo.dart
'''),
''')),
];
final RepositoryPackage packageA =
createFakePackage('a_package', packagesDir);
@ -747,11 +763,12 @@ packages/b_package/lib/src/foo.dart
});
test('honors --exclude flag', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: '''
processRunner.mockProcessesForExecutable['git-diff'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: '''
packages/a_package/lib/a_package.dart
packages/b_package/lib/src/foo.dart
'''),
''')),
];
final RepositoryPackage packageA =
createFakePackage('a_package', packagesDir);
@ -771,15 +788,18 @@ packages/b_package/lib/src/foo.dart
group('--packages-for-branch', () {
test('only tests changed packages relative to the merge base on a branch',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(stdout: 'a-branch'),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'a-branch')),
];
processRunner.mockProcessesForExecutable['git-merge-base'] = <Process>[
MockProcess(exitCode: 1), // --is-ancestor check
MockProcess(stdout: 'abc123'), // finding merge base
processRunner.mockProcessesForExecutable['git-merge-base'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(exitCode: 1), <String>['--is-ancestor']),
FakeProcessInfo(MockProcess(stdout: 'abc123'),
<String>['--fork-point']), // finding merge base
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -807,11 +827,12 @@ packages/b_package/lib/src/foo.dart
test('only tests changed packages relative to the previous commit on main',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(stdout: 'main'),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'main')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -842,11 +863,12 @@ packages/b_package/lib/src/foo.dart
test(
'only tests changed packages relative to the previous commit if '
'running on a specific hash from main', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(stdout: 'HEAD'),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'HEAD')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -878,15 +900,25 @@ packages/b_package/lib/src/foo.dart
test(
'only tests changed packages relative to the previous commit if '
'running on a specific hash from origin/main', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(stdout: 'HEAD'),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'HEAD')),
];
processRunner.mockProcessesForExecutable['git-merge-base'] = <Process>[
MockProcess(exitCode: 128), // Fail with a non-1 exit code for 'main'
MockProcess(), // Succeed for the variant.
processRunner.mockProcessesForExecutable['git-merge-base'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(exitCode: 128), <String>[
'--is-ancestor',
'HEAD',
'main'
]), // Fail with a non-1 exit code for 'main'
FakeProcessInfo(MockProcess(), <String>[
'--is-ancestor',
'HEAD',
'origin/main'
]), // Succeed for the variant.
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -918,11 +950,12 @@ packages/b_package/lib/src/foo.dart
test(
'only tests changed packages relative to the previous commit on master',
() async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(stdout: 'master'),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'master')),
];
final RepositoryPackage plugin1 =
createFakePlugin('plugin1', packagesDir);
@ -951,11 +984,12 @@ packages/b_package/lib/src/foo.dart
});
test('throws if getting the branch fails', () async {
processRunner.mockProcessesForExecutable['git-diff'] = <Process>[
MockProcess(stdout: 'packages/plugin1/plugin1.dart'),
processRunner.mockProcessesForExecutable['git-diff'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(stdout: 'packages/plugin1/plugin1.dart')),
];
processRunner.mockProcessesForExecutable['git-rev-parse'] = <Process>[
MockProcess(exitCode: 1),
processRunner.mockProcessesForExecutable['git-rev-parse'] =
<FakeProcessInfo>[
FakeProcessInfo(MockProcess(exitCode: 1)),
];
Error? commandError;