[Tool] [Code Excerpt] allow excerpts in example readme (#3758)

Adds the ability to add code excerpts to README files within the example directory.
This commit is contained in:
Tarrin Neal
2023-04-19 14:31:11 -07:00
committed by GitHub
parent 8d3bf84a42
commit 84ebba2979
4 changed files with 81 additions and 1 deletions

View File

@ -1,3 +1,7 @@
## 0.13.4+4
* Allows code excerpts in `example/README.md`.
## 0.13.4+3 ## 0.13.4+3
* Moves source to flutter/packages. * Moves source to flutter/packages.

View File

@ -89,6 +89,10 @@ class UpdateExcerptsCommand extends PackageLoopingCommand {
if (!await _injectSnippets(example, targetPackage: package)) { if (!await _injectSnippets(example, targetPackage: package)) {
return PackageResult.fail(<String>['Unable to inject excerpts']); return PackageResult.fail(<String>['Unable to inject excerpts']);
} }
if (!await _injectSnippets(example, targetPackage: example)) {
return PackageResult.fail(
<String>['Unable to inject example excerpts']);
}
} finally { } finally {
// Clean up the pubspec changes and extracted excerpts directory. // Clean up the pubspec changes and extracted excerpts directory.
_undoPubspecChanges(example); _undoPubspecChanges(example);

View File

@ -1,7 +1,7 @@
name: flutter_plugin_tools name: flutter_plugin_tools
description: Productivity and CI utils for flutter/packages description: Productivity and CI utils for flutter/packages
repository: https://github.com/flutter/packages/tree/main/script/tool repository: https://github.com/flutter/packages/tree/main/script/tool
version: 0.13.4+3 version: 0.13.4+4
dependencies: dependencies:
args: ^2.1.0 args: ^2.1.0

View File

@ -109,6 +109,50 @@ void main() {
])); ]));
}); });
test('updates example readme when config is present', () async {
final RepositoryPackage package = createFakePlugin('a_package', packagesDir,
extraFiles: <String>[kReadmeExcerptConfigPath]);
final Directory example = getExampleDir(package);
final List<String> output =
await runCapturingPrint(runner, <String>['update-excerpts']);
expect(
processRunner.recordedCalls,
containsAll(<ProcessCall>[
ProcessCall(
'dart',
const <String>[
'run',
'build_runner',
'build',
'--config',
'excerpt',
'--output',
'excerpts',
'--delete-conflicting-outputs',
],
example.path),
ProcessCall(
'dart',
const <String>[
'run',
'code_excerpt_updater',
'--write-in-place',
'--yaml',
'--no-escape-ng-interpolation',
'README.md',
],
example.path),
]));
expect(
output,
containsAllInOrder(<Matcher>[
contains('Ran for 1 package(s)'),
]));
});
test('skips when no config is present', () async { test('skips when no config is present', () async {
createFakePlugin('a_package', packagesDir); createFakePlugin('a_package', packagesDir);
@ -231,6 +275,34 @@ void main() {
])); ]));
}); });
test('fails if example injection fails', () async {
createFakePlugin('a_package', packagesDir,
extraFiles: <String>[kReadmeExcerptConfigPath]);
processRunner.mockProcessesForExecutable['dart'] = <FakeProcessInfo>[
FakeProcessInfo(MockProcess(), <String>['pub', 'get']),
FakeProcessInfo(MockProcess(), <String>['run', 'build_runner']),
FakeProcessInfo(MockProcess(), <String>['run', 'code_excerpt_updater']),
FakeProcessInfo(
MockProcess(exitCode: 1), <String>['run', 'code_excerpt_updater']),
];
Error? commandError;
final List<String> output = await runCapturingPrint(
runner, <String>['update-excerpts'], errorHandler: (Error e) {
commandError = e;
});
expect(commandError, isA<ToolExit>());
expect(
output,
containsAllInOrder(<Matcher>[
contains('The following packages had errors:'),
contains('a_package:\n'
' Unable to inject example excerpts')
]));
});
test('fails if READMEs are changed with --fail-on-change', () async { test('fails if READMEs are changed with --fail-on-change', () async {
createFakePlugin('a_plugin', packagesDir, createFakePlugin('a_plugin', packagesDir,
extraFiles: <String>[kReadmeExcerptConfigPath]); extraFiles: <String>[kReadmeExcerptConfigPath]);