@@ -15,12 +15,6 @@ namespace System.CommandLine.Tests
1515{ 
1616    public  partial  class  ParserTests 
1717    { 
18-         private  T  GetValue < T > ( ParseResult  parseResult ,  Option < T >  option ) 
19-             =>  parseResult . GetValue ( option ) ; 
20- 
21-         private  T  GetValue < T > ( ParseResult  parseResult ,  Argument < T >  argument ) 
22-             =>  parseResult . GetValue ( argument ) ; 
23- 
2418        [ Fact ] 
2519        public  void  An_option_can_be_checked_by_object_instance ( ) 
2620        { 
@@ -816,7 +810,7 @@ public void Commands_can_have_default_argument_values()
816810
817811            ParseResult  result  =  command . Parse ( "command" ) ; 
818812
819-             GetValue ( result ,   argument ) 
813+             result . GetValue ( argument ) 
820814                  . Should ( ) 
821815                  . Be ( "default" ) ; 
822816
@@ -861,7 +855,7 @@ public void When_an_option_with_a_default_value_is_not_matched_then_the_option_c
861855            ParseResult  result  =  command . Parse ( "command" ) ; 
862856
863857            result . GetResult ( option ) . Should ( ) . NotBeNull ( ) ; 
864-             GetValue ( result ,   option ) . Should ( ) . Be ( "the-default" ) ; 
858+             result . GetValue ( option ) . Should ( ) . Be ( "the-default" ) ; 
865859        } 
866860
867861        [ Fact ] 
@@ -926,6 +920,48 @@ public void When_an_argument_with_a_default_value_is_not_matched_then_there_are_
926920                  . BeEmpty ( ) ; 
927921        } 
928922
923+         [ Fact ] 
924+         public  void  When_an_argument_with_a_default_value_is_matched_then_the_option_result_is_implicit ( ) 
925+         { 
926+             var  argument  =  new  Argument < string > ( "the-arg" ) 
927+             { 
928+                 DefaultValueFactory  =  _ =>  "the-default" 
929+             } ; 
930+ 
931+             var  command  =  new  Command ( "command" ) 
932+             { 
933+                 argument 
934+             } ; 
935+ 
936+             var  result  =  command . Parse ( "command the-explicit-value" ) ; 
937+ 
938+             result . GetResult ( argument ) 
939+                   . Implicit 
940+                   . Should ( ) 
941+                   . BeFalse ( ) ; 
942+         } 
943+ 
944+         [ Fact ] 
945+         public  void  When_an_argument_with_a_default_value_is_not_matched_then_the_option_result_is_implicit ( ) 
946+         { 
947+             var  argument  =  new  Argument < string > ( "the-arg" ) 
948+             { 
949+                 DefaultValueFactory  =  _ =>  "the-default" 
950+             } ; 
951+ 
952+             var  command  =  new  Command ( "command" ) 
953+             { 
954+                 argument 
955+             } ; 
956+ 
957+             var  result  =  command . Parse ( "command" ) ; 
958+ 
959+             result . GetResult ( argument ) 
960+                   . Implicit 
961+                   . Should ( ) 
962+                   . BeTrue ( ) ; 
963+         } 
964+ 
929965        [ Fact ] 
930966        public  void  Command_default_argument_value_does_not_override_parsed_value ( ) 
931967        { 
@@ -941,7 +977,7 @@ public void Command_default_argument_value_does_not_override_parsed_value()
941977
942978            var  result  =  command . Parse ( "the-directory" ) ; 
943979
944-             GetValue ( result ,   argument ) 
980+             result . GetValue ( argument ) 
945981                  . Name 
946982                  . Should ( ) 
947983                  . Be ( "the-directory" ) ; 
@@ -1125,7 +1161,7 @@ public void Option_arguments_can_start_with_prefixes_that_make_them_look_like_op
11251161
11261162            var  result  =  command . Parse ( input ) ; 
11271163
1128-             GetValue ( result ,   optionX ) . Should ( ) . Be ( "-y" ) ; 
1164+             result . GetValue ( optionX ) . Should ( ) . Be ( "-y" ) ; 
11291165        } 
11301166
11311167        [ Fact ] 
@@ -1144,9 +1180,9 @@ public void Option_arguments_can_start_with_prefixes_that_make_them_look_like_bu
11441180
11451181            var  result  =  command . Parse ( "-a -bc" ) ; 
11461182
1147-             GetValue ( result ,   optionA ) . Should ( ) . Be ( "-bc" ) ; 
1148-             GetValue ( result ,   optionB ) . Should ( ) . BeFalse ( ) ; 
1149-             GetValue ( result ,   optionC ) . Should ( ) . BeFalse ( ) ; 
1183+             result . GetValue ( optionA ) . Should ( ) . Be ( "-bc" ) ; 
1184+             result . GetValue ( optionB ) . Should ( ) . BeFalse ( ) ; 
1185+             result . GetValue ( optionC ) . Should ( ) . BeFalse ( ) ; 
11501186        } 
11511187
11521188        [ Fact ] 
@@ -1161,7 +1197,7 @@ public void Option_arguments_can_match_subcommands()
11611197
11621198            var  result  =  root . Parse ( "-a subcommand" ) ; 
11631199
1164-             GetValue ( result ,   optionA ) . Should ( ) . Be ( "subcommand" ) ; 
1200+             result . GetValue ( optionA ) . Should ( ) . Be ( "subcommand" ) ; 
11651201            result . CommandResult . Command . Should ( ) . BeSameAs ( root ) ; 
11661202        } 
11671203
@@ -1182,7 +1218,7 @@ public void Arguments_can_match_subcommands()
11821218
11831219            result . CommandResult . Command . Should ( ) . BeSameAs ( subcommand ) ; 
11841220
1185-             GetValue ( result ,   argument ) 
1221+             result . GetValue ( argument ) 
11861222                  . Should ( ) 
11871223                  . BeEquivalentSequenceTo ( "one" ,  "two" ,  "three" ,  "subcommand" ,  "four" ) ; 
11881224
@@ -1207,7 +1243,7 @@ public void Option_arguments_can_match_the_aliases_of_sibling_options_when_non_s
12071243            var  result  =  command . Parse ( input ) ; 
12081244
12091245            result . Errors . Should ( ) . BeEmpty ( ) ; 
1210-             GetValue ( result ,   optionX ) . Should ( ) . Be ( "-y" ) ; 
1246+             result . GetValue ( optionX ) . Should ( ) . Be ( "-y" ) ; 
12111247        } 
12121248
12131249        [ Fact ] 
@@ -1222,7 +1258,7 @@ public void Single_option_arguments_that_match_option_aliases_are_parsed_correct
12221258
12231259            var  result  =  command . Parse ( "-x -x" ) ; 
12241260
1225-             GetValue ( result ,   optionX ) . Should ( ) . Be ( "-x" ) ; 
1261+             result . GetValue ( optionX ) . Should ( ) . Be ( "-x" ) ; 
12261262        } 
12271263
12281264        [ Theory ] 
@@ -1249,8 +1285,8 @@ public void Boolean_options_are_not_greedy(string commandLine)
12491285
12501286            result . Errors . Should ( ) . BeEmpty ( ) ; 
12511287
1252-             GetValue ( result ,   optX ) . Should ( ) . BeTrue ( ) ; 
1253-             GetValue ( result ,   optY ) . Should ( ) . BeTrue ( ) ; 
1288+             result . GetValue ( optX ) . Should ( ) . BeTrue ( ) ; 
1289+             result . GetValue ( optY ) . Should ( ) . BeTrue ( ) ; 
12541290        } 
12551291
12561292        [ Fact ] 
@@ -1267,8 +1303,8 @@ public void Multiple_option_arguments_that_match_multiple_arity_option_aliases_a
12671303
12681304            var  result  =  command . Parse ( "-x -x -x -y -y -x -y -y -y -x -x -y" ) ; 
12691305
1270-             GetValue ( result ,   optionX ) . Should ( ) . BeEquivalentTo ( new [ ]  {  "-x" ,  "-y" ,  "-y"  } ) ; 
1271-             GetValue ( result ,   optionY ) . Should ( ) . BeEquivalentTo ( new [ ]  {  "-x" ,  "-y" ,  "-x"  } ) ; 
1306+             result . GetValue ( optionX ) . Should ( ) . BeEquivalentTo ( new [ ]  {  "-x" ,  "-y" ,  "-y"  } ) ; 
1307+             result . GetValue ( optionY ) . Should ( ) . BeEquivalentTo ( new [ ]  {  "-x" ,  "-y" ,  "-x"  } ) ; 
12721308        } 
12731309
12741310        [ Fact ] 
@@ -1285,7 +1321,7 @@ public void Bundled_option_arguments_that_match_option_aliases_are_parsed_correc
12851321
12861322            var  result  =  command . Parse ( "-yxx" ) ; 
12871323
1288-             GetValue ( result ,   optionX ) . Should ( ) . Be ( "x" ) ; 
1324+             result . GetValue ( optionX ) . Should ( ) . Be ( "x" ) ; 
12891325        } 
12901326
12911327        [ Fact ] 
@@ -1302,8 +1338,8 @@ public void Argument_name_is_not_matched_as_a_token()
13021338
13031339            var  result  =  command . Parse ( "name one two three" ) ; 
13041340
1305-             GetValue ( result ,   nameArg ) . Should ( ) . Be ( "name" ) ; 
1306-             GetValue ( result ,   columnsArg ) . Should ( ) . BeEquivalentTo ( "one" ,  "two" ,  "three" ) ; 
1341+             result . GetValue ( nameArg ) . Should ( ) . Be ( "name" ) ; 
1342+             result . GetValue ( columnsArg ) . Should ( ) . BeEquivalentTo ( "one" ,  "two" ,  "three" ) ; 
13071343        } 
13081344
13091345        [ Fact ] 
@@ -1328,7 +1364,7 @@ public void Boolean_options_with_no_argument_specified_do_not_match_subsequent_a
13281364
13291365            var  result  =  command . Parse ( "-v an-argument" ) ; 
13301366
1331-             GetValue ( result ,   option ) . Should ( ) . BeTrue ( ) ; 
1367+             result . GetValue ( option ) . Should ( ) . BeTrue ( ) ; 
13321368        } 
13331369
13341370        [ Fact ] 
@@ -1345,8 +1381,8 @@ public void When_a_command_line_has_unmatched_tokens_they_are_not_applied_to_sub
13451381
13461382            var  result  =  command . Parse ( "-x 23 unmatched-token -y 42" ) ; 
13471383
1348-             GetValue ( result ,   optionX ) . Should ( ) . Be ( "23" ) ; 
1349-             GetValue ( result ,   optionY ) . Should ( ) . Be ( "42" ) ; 
1384+             result . GetValue ( optionX ) . Should ( ) . Be ( "23" ) ; 
1385+             result . GetValue ( optionY ) . Should ( ) . Be ( "42" ) ; 
13501386            result . UnmatchedTokens . Should ( ) . BeEquivalentTo ( "unmatched-token" ) ; 
13511387        } 
13521388
@@ -1648,7 +1684,7 @@ public void Parsed_value_of_empty_string_arg_is_an_empty_string(string arg1, str
16481684
16491685            var  result  =  rootCommand . Parse ( new [ ]  {  arg1 ,  arg2  } ) ; 
16501686
1651-             GetValue ( result ,   option ) . Should ( ) . BeEmpty ( ) ; 
1687+             result . GetValue ( option ) . Should ( ) . BeEmpty ( ) ; 
16521688        } 
16531689    } 
16541690} 
0 commit comments