mirror of
https://github.com/flutter/packages.git
synced 2025-06-30 23:03:11 +08:00
[tools] Add mockito support to update-dependency (#4260)
Regenerates mocks when updating `mockito` using the tooling. Fixes https://github.com/flutter/flutter/issues/124196
This commit is contained in:
@ -170,9 +170,13 @@ ${response.httpResponse.body}
|
|||||||
if (!await _regeneratePigeonFiles(package)) {
|
if (!await _regeneratePigeonFiles(package)) {
|
||||||
return PackageResult.fail(<String>['Failed to update pigeon files']);
|
return PackageResult.fail(<String>['Failed to update pigeon files']);
|
||||||
}
|
}
|
||||||
|
} else if (dependency == 'mockito') {
|
||||||
|
if (!await _regenerateMocks(package)) {
|
||||||
|
return PackageResult.fail(<String>['Failed to update mocks']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// TODO(stuartmorgan): Add additional handling of known packages that
|
// TODO(stuartmorgan): Add additional handling of known packages that
|
||||||
// do file generation (mockito, etc.).
|
// do file generation.
|
||||||
|
|
||||||
return PackageResult.success();
|
return PackageResult.success();
|
||||||
}
|
}
|
||||||
@ -258,6 +262,43 @@ ${response.httpResponse.body}
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Re-runs Mockito mock generation for [package] if necessary.
|
||||||
|
Future<bool> _regenerateMocks(RepositoryPackage package) async {
|
||||||
|
final Pubspec pubspec = package.parsePubspec();
|
||||||
|
if (!pubspec.devDependencies.keys.contains('build_runner')) {
|
||||||
|
print(
|
||||||
|
'${indentation}No build_runner dependency; skipping mock regeneration.');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
print('${indentation}Running pub get...');
|
||||||
|
final io.ProcessResult getResult = await processRunner
|
||||||
|
.run('dart', <String>['pub', 'get'], workingDir: package.directory);
|
||||||
|
if (getResult.exitCode != 0) {
|
||||||
|
printError('dart pub get failed (${getResult.exitCode}):\n'
|
||||||
|
'${getResult.stdout}\n${getResult.stderr}\n');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
print('${indentation}Updating mocks...');
|
||||||
|
final io.ProcessResult buildRunnerResult = await processRunner.run(
|
||||||
|
'dart',
|
||||||
|
<String>[
|
||||||
|
'run',
|
||||||
|
'build_runner',
|
||||||
|
'build',
|
||||||
|
'--delete-conflicting-outputs'
|
||||||
|
],
|
||||||
|
workingDir: package.directory);
|
||||||
|
if (buildRunnerResult.exitCode != 0) {
|
||||||
|
printError(
|
||||||
|
'"dart run build_runner build" failed (${buildRunnerResult.exitCode}):\n'
|
||||||
|
'${buildRunnerResult.stdout}\n${buildRunnerResult.stderr}\n');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _PubDependencyInfo {
|
class _PubDependencyInfo {
|
||||||
|
@ -466,5 +466,122 @@ dev_dependencies:
|
|||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('regenerates mocks when updating mockito if necessary', () async {
|
||||||
|
final RepositoryPackage package =
|
||||||
|
createFakePackage('a_package', packagesDir);
|
||||||
|
addDependency(package, 'mockito', version: '1.0.0');
|
||||||
|
addDevDependency(package, 'build_runner');
|
||||||
|
|
||||||
|
await runCapturingPrint(runner, <String>[
|
||||||
|
'update-dependency',
|
||||||
|
'--pub-package',
|
||||||
|
'mockito',
|
||||||
|
'--version',
|
||||||
|
'1.5.0',
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
processRunner.recordedCalls,
|
||||||
|
orderedEquals(<ProcessCall>[
|
||||||
|
ProcessCall(
|
||||||
|
'dart',
|
||||||
|
const <String>['pub', 'get'],
|
||||||
|
package.path,
|
||||||
|
),
|
||||||
|
ProcessCall(
|
||||||
|
'dart',
|
||||||
|
const <String>[
|
||||||
|
'run',
|
||||||
|
'build_runner',
|
||||||
|
'build',
|
||||||
|
'--delete-conflicting-outputs'
|
||||||
|
],
|
||||||
|
package.path,
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('skips regenerating mocks when there is no build_runner dependency',
|
||||||
|
() async {
|
||||||
|
final RepositoryPackage package =
|
||||||
|
createFakePackage('a_package', packagesDir);
|
||||||
|
addDependency(package, 'mockito', version: '1.0.0');
|
||||||
|
|
||||||
|
await runCapturingPrint(runner, <String>[
|
||||||
|
'update-dependency',
|
||||||
|
'--pub-package',
|
||||||
|
'mockito',
|
||||||
|
'--version',
|
||||||
|
'1.5.0',
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(processRunner.recordedCalls.isEmpty, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updating mockito fails if pub get fails', () async {
|
||||||
|
final RepositoryPackage package =
|
||||||
|
createFakePackage('a_package', packagesDir);
|
||||||
|
addDependency(package, 'mockito', version: '1.0.0');
|
||||||
|
addDevDependency(package, 'build_runner');
|
||||||
|
|
||||||
|
processRunner.mockProcessesForExecutable['dart'] = <FakeProcessInfo>[
|
||||||
|
FakeProcessInfo(MockProcess(exitCode: 1), <String>['pub', 'get'])
|
||||||
|
];
|
||||||
|
|
||||||
|
Error? commandError;
|
||||||
|
final List<String> output = await runCapturingPrint(runner, <String>[
|
||||||
|
'update-dependency',
|
||||||
|
'--pub-package',
|
||||||
|
'mockito',
|
||||||
|
'--version',
|
||||||
|
'1.5.0',
|
||||||
|
], errorHandler: (Error e) {
|
||||||
|
commandError = e;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(commandError, isA<ToolExit>());
|
||||||
|
expect(
|
||||||
|
output,
|
||||||
|
containsAllInOrder(<Matcher>[
|
||||||
|
contains('dart pub get failed'),
|
||||||
|
contains('Failed to update mocks'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('updating mockito fails if running build_runner fails', () async {
|
||||||
|
final RepositoryPackage package =
|
||||||
|
createFakePackage('a_package', packagesDir);
|
||||||
|
addDependency(package, 'mockito', version: '1.0.0');
|
||||||
|
addDevDependency(package, 'build_runner');
|
||||||
|
|
||||||
|
processRunner.mockProcessesForExecutable['dart'] = <FakeProcessInfo>[
|
||||||
|
FakeProcessInfo(MockProcess(), <String>['pub', 'get']),
|
||||||
|
FakeProcessInfo(
|
||||||
|
MockProcess(exitCode: 1), <String>['run', 'build_runner']),
|
||||||
|
];
|
||||||
|
|
||||||
|
Error? commandError;
|
||||||
|
final List<String> output = await runCapturingPrint(runner, <String>[
|
||||||
|
'update-dependency',
|
||||||
|
'--pub-package',
|
||||||
|
'mockito',
|
||||||
|
'--version',
|
||||||
|
'1.5.0',
|
||||||
|
], errorHandler: (Error e) {
|
||||||
|
commandError = e;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(commandError, isA<ToolExit>());
|
||||||
|
expect(
|
||||||
|
output,
|
||||||
|
containsAllInOrder(<Matcher>[
|
||||||
|
contains('"dart run build_runner build" failed'),
|
||||||
|
contains('Failed to update mocks'),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user