Skip to content

Commit b408453

Browse files
authored
fix(dart_frog_cli): handle UsageException when invalid option is passed (#399)
1 parent 2dc8915 commit b408453

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

packages/dart_frog_cli/lib/src/command_runner.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,17 @@ class DartFrogCommandRunner extends CommandRunner<int> {
5050

5151
@override
5252
Future<int> run(Iterable<String> args) async {
53-
final argResults = parse(args);
54-
late final int exitCode;
53+
late final ArgResults argResults;
54+
try {
55+
argResults = parse(args);
56+
} on UsageException catch (error) {
57+
_logger.err('$error');
58+
return ExitCode.usage.code;
59+
}
5560

5661
_sigint.watch().listen(_onSigint);
5762

63+
late final int exitCode;
5864
try {
5965
exitCode = await runCommand(argResults) ?? ExitCode.success.code;
6066
} catch (error) {

packages/dart_frog_cli/test/src/command_runner_test.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,26 @@ void main() {
8282
});
8383

8484
group('run', () {
85+
test('shows usage when invalid option is passed', () async {
86+
final exitCode = await commandRunner.run(['--invalid-option']);
87+
expect(exitCode, ExitCode.usage.code);
88+
verify(
89+
() => logger.err(
90+
any(
91+
that: predicate<String>((message) {
92+
final containsError = message.contains(
93+
'Could not find an option named "invalid-option".',
94+
);
95+
final containsUsage = message.contains(
96+
'Usage: dart_frog <command> [arguments]',
97+
);
98+
return containsError && containsUsage;
99+
}),
100+
),
101+
),
102+
).called(1);
103+
});
104+
85105
test('checks for updates on sigint', () async {
86106
final exitCalls = <int>[];
87107
commandRunner = DartFrogCommandRunner(

0 commit comments

Comments
 (0)