From 8fbf89b9f27ac8589f5213c62f8dd5d3ffdb19f2 Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 18 May 2022 01:07:08 +0530 Subject: [PATCH] [flutter_tools] throw error when argResults is null (#103827) --- .../lib/src/runner/flutter_command.dart | 8 +++--- .../test/general.shard/args_test.dart | 28 +++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 20bd201c3a..b0efe074a2 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1524,20 +1524,20 @@ abstract class FlutterCommand extends Command { /// Gets the parsed command-line option named [name] as a `bool?`. bool? boolArg(String name) { - if (argResults == null || !argParser.options.containsKey(name)) { + if (!argParser.options.containsKey(name)) { return null; } - return argResults?[name] as bool?; + return argResults![name] as bool; } /// Gets the parsed command-line option named [name] as a `String`. String? stringArgDeprecated(String name) => argResults?[name] as String?; String? stringArg(String name) { - if (argResults == null || !argParser.options.containsKey(name)) { + if (!argParser.options.containsKey(name)) { return null; } - return argResults?[name] as String?; + return argResults![name] as String; } /// Gets the parsed command-line option named [name] as an `int`. diff --git a/packages/flutter_tools/test/general.shard/args_test.dart b/packages/flutter_tools/test/general.shard/args_test.dart index 0380ddd9a8..46e5b39f98 100644 --- a/packages/flutter_tools/test/general.shard/args_test.dart +++ b/packages/flutter_tools/test/general.shard/args_test.dart @@ -15,19 +15,6 @@ import '../src/context.dart'; import '../src/testbed.dart'; import 'runner/utils.dart'; -class CommandDummy extends FlutterCommand{ - @override - String get description => 'description'; - - @override - String get name => 'test'; - - @override - Future runCommand() async { - return FlutterCommandResult.success(); - } -} - void main() { test('Help for command line arguments is consistently styled and complete', () => Testbed().run(() { final FlutterCommandRunner runner = FlutterCommandRunner(verboseHelp: true); @@ -47,6 +34,9 @@ void main() { final FlutterCommandRunner runner = FlutterCommandRunner(verboseHelp: true); command.argParser.addFlag('key'); command.argParser.addFlag('key-false'); + // argResults will be null at this point, if attempt to read them is made, + // exception `Null check operator used on a null value` would be thrown. + expect(() => command.boolArg('key'), throwsA(const TypeMatcher())); runner.addCommand(command); await runner.run(['dummy', '--key']); @@ -62,11 +52,19 @@ void main() { }); testUsingContext('String? safe argResults', () async { - final CommandDummy command = CommandDummy(); + final DummyFlutterCommand command = DummyFlutterCommand( + commandFunction: () async { + return const FlutterCommandResult(ExitStatus.success); + } + ); final FlutterCommandRunner runner = FlutterCommandRunner(verboseHelp: true); command.argParser.addOption('key'); + // argResults will be null at this point, if attempt to read them is made, + // exception `Null check operator used on a null value` would be thrown + expect(() => command.stringArg('key'), throwsA(const TypeMatcher())); + runner.addCommand(command); - await runner.run(['test', '--key=value']); + await runner.run(['dummy', '--key=value']); expect(command.stringArg('key'), 'value'); expect(command.stringArg('empty'), null);