improve error message when `--base-href` argument does not start with `/` (#142667)
Resolves https://github.com/flutter/flutter/issues/137700.
In particular, see [this comment from the thread](https://github.com/flutter/flutter/issues/137700#issuecomment-1920241979) to see exactly what this PR is addressing.
diff --git a/packages/flutter_tools/lib/src/commands/build_web.dart b/packages/flutter_tools/lib/src/commands/build_web.dart
index cf3f92a..52e2410 100644
--- a/packages/flutter_tools/lib/src/commands/build_web.dart
+++ b/packages/flutter_tools/lib/src/commands/build_web.dart
@@ -166,7 +166,10 @@
}
final String? baseHref = stringArg('base-href');
if (baseHref != null && !(baseHref.startsWith('/') && baseHref.endsWith('/'))) {
- throwToolExit('base-href should start and end with /');
+ throwToolExit(
+ 'Received a --base-href value of "$baseHref"\n'
+ '--base-href should start and end with /',
+ );
}
if (!flutterProject.web.existsSync()) {
throwToolExit('Missing index.html.');
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
index a9a1bc1..073bc90 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/build_web_test.dart
@@ -355,6 +355,28 @@
ProcessManager: () => processManager,
BuildSystem: () => TestBuildSystem.all(BuildResult(success: true)),
});
+
+ testUsingContext('Rejects --base-href value that does not start with /', () async {
+ final TestWebBuildCommand buildCommand = TestWebBuildCommand(fileSystem: fileSystem);
+ final CommandRunner<void> runner = createTestCommandRunner(buildCommand);
+
+ await expectLater(
+ runner.run(<String>[
+ 'build',
+ 'web',
+ '--no-pub',
+ '--base-href=i_dont_start_with_a_forward_slash',
+ ]),
+ throwsToolExit(
+ message: 'Received a --base-href value of "i_dont_start_with_a_forward_slash"\n'
+ '--base-href should start and end with /',
+ ),
+ );
+ }, overrides: <Type, Generator>{
+ Platform: () => fakePlatform,
+ FileSystem: () => fileSystem,
+ ProcessManager: () => processManager,
+ });
}
void setupFileSystemForEndToEndTest(FileSystem fileSystem) {