diff --git a/dev/tools/dartdoc.dart b/dev/tools/dartdoc.dart index 7f63307131..26ab9cfb1c 100644 --- a/dev/tools/dartdoc.dart +++ b/dev/tools/dartdoc.dart @@ -91,12 +91,12 @@ Future main(List arguments) async { pubEnvironment['PUB_CACHE'] = pubCachePath; } - final String pubExecutable = '$flutterRoot/bin/cache/dart-sdk/bin/pub'; + final String dartExecutable = '$flutterRoot/bin/cache/dart-sdk/bin/dart'; // Run pub. - ProcessWrapper process = ProcessWrapper(await Process.start( - pubExecutable, - ['get'], + ProcessWrapper process = ProcessWrapper(await runPubProcess( + dartBinaryPath: dartExecutable, + arguments: ['get'], workingDirectory: kDocsRoot, environment: pubEnvironment, )); @@ -120,8 +120,9 @@ Future main(List arguments) async { // Verify which version of snippets and dartdoc we're using. final ProcessResult snippetsResult = Process.runSync( - pubExecutable, + dartExecutable, [ + 'pub', 'global', 'list', ], @@ -216,11 +217,11 @@ Future main(List arguments) async { ]; String quote(String arg) => arg.contains(' ') ? "'$arg'" : arg; - print('Executing: (cd $kDocsRoot ; $pubExecutable ${dartdocArgs.map(quote).join(' ')})'); + print('Executing: (cd $kDocsRoot ; $dartExecutable ${dartdocArgs.map(quote).join(' ')})'); - process = ProcessWrapper(await Process.start( - pubExecutable, - dartdocArgs, + process = ProcessWrapper(await runPubProcess( + dartBinaryPath: dartExecutable, + arguments: dartdocArgs, workingDirectory: kDocsRoot, environment: pubEnvironment, )); @@ -464,7 +465,6 @@ void putRedirectInOldIndexLocation() { File('$kPublishRoot/flutter/index.html').writeAsStringSync(metaTag); } - void writeSnippetsIndexFile() { final Directory snippetsDir = Directory(path.join(kPublishRoot, 'snippets')); if (snippetsDir.existsSync()) { @@ -531,3 +531,18 @@ void printStream(Stream> stream, { String prefix = '', List f print('$prefix$line'.trim()); }); } + +Future runPubProcess({ + required String dartBinaryPath, + required List arguments, + String? workingDirectory, + Map? environment, + @visibleForTesting + ProcessManager processManager = const LocalProcessManager(), +}) { + return processManager.start( + [dartBinaryPath, 'pub', ...arguments], + workingDirectory: workingDirectory, + environment: environment, + ); +} diff --git a/dev/tools/test/dartdoc_test.dart b/dev/tools/test/dartdoc_test.dart index 1cd51dfb6b..5744650ee3 100644 --- a/dev/tools/test/dartdoc_test.dart +++ b/dev/tools/test/dartdoc_test.dart @@ -6,7 +6,7 @@ import 'package:platform/platform.dart'; import 'package:test/test.dart'; import '../../../packages/flutter_tools/test/src/fake_process_manager.dart'; -import '../dartdoc.dart' show getBranchName; +import '../dartdoc.dart' show getBranchName, runPubProcess; void main() { const String branchName = 'stable'; @@ -77,4 +77,22 @@ void main() { ); expect(processManager, hasNoRemainingExpectations); }); + + test("runPubProcess doesn't use the pub binary", () { + final ProcessManager processManager = FakeProcessManager.list( + [ + const FakeCommand( + command: ['dart', 'pub', '--one', '--two'], + ), + ], + ); + + runPubProcess( + dartBinaryPath: 'dart', + arguments: ['--one', '--two'], + processManager: processManager, + ); + + expect(processManager, hasNoRemainingExpectations); + }); }