44using Xunit ;
55using FluentAssertions ;
66using CommandLine . Tests . Fakes ;
7+ using System . Threading . Tasks ;
78
89namespace CommandLine . Tests . Unit
910{
@@ -19,6 +20,16 @@ public static void Invoke_parsed_lambda_when_parsed()
1920 "value" . Should ( ) . BeEquivalentTo ( expected ) ;
2021 }
2122
23+ [ Fact ]
24+ public static async Task Invoke_parsed_lambda_when_parsedAsync ( )
25+ {
26+ var expected = string . Empty ;
27+ await Parser . Default . ParseArguments < Simple_Options > ( new [ ] { "--stringvalue" , "value" } )
28+ . WithParsedAsync ( opts => Task . Run ( ( ) => expected = opts . StringValue ) ) ;
29+
30+ "value" . Should ( ) . BeEquivalentTo ( expected ) ;
31+ }
32+
2233 [ Fact ]
2334 public static void Invoke_parsed_lambda_when_parsed_for_verbs ( )
2435 {
@@ -32,6 +43,20 @@ public static void Invoke_parsed_lambda_when_parsed_for_verbs()
3243 "https://value.org/user/file.git" . Should ( ) . BeEquivalentTo ( expected ) ;
3344 }
3445
46+ [ Fact ]
47+ public static async Task Invoke_parsed_lambda_when_parsed_for_verbsAsync ( )
48+ {
49+ var expected = string . Empty ;
50+ var parsedArguments = Parser . Default . ParseArguments < Add_Verb , Commit_Verb , Clone_Verb > (
51+ new [ ] { "clone" , "https://value.org/user/file.git" } ) ;
52+
53+ await parsedArguments . WithParsedAsync < Add_Verb > ( opts => Task . Run ( ( ) => expected = "wrong1" ) ) ;
54+ await parsedArguments . WithParsedAsync < Commit_Verb > ( opts => Task . Run ( ( ) => expected = "wrong2" ) ) ;
55+ await parsedArguments . WithParsedAsync < Clone_Verb > ( opts => Task . Run ( ( ) => expected = opts . Urls . First ( ) ) ) ;
56+
57+ "https://value.org/user/file.git" . Should ( ) . BeEquivalentTo ( expected ) ;
58+ }
59+
3560 [ Fact ]
3661 public static void Invoke_not_parsed_lambda_when_not_parsed ( )
3762 {
@@ -42,6 +67,16 @@ public static void Invoke_not_parsed_lambda_when_not_parsed()
4267 "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
4368 }
4469
70+ [ Fact ]
71+ public static async Task Invoke_not_parsed_lambda_when_not_parsedAsync ( )
72+ {
73+ var expected = "a default" ;
74+ await Parser . Default . ParseArguments < Simple_Options > ( new [ ] { "-i" , "aaa" } )
75+ . WithNotParsedAsync ( _ => Task . Run ( ( ) => expected = "changed" ) ) ;
76+
77+ "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
78+ }
79+
4580 [ Fact ]
4681 public static void Invoke_not_parsed_lambda_when_parsed_for_verbs ( )
4782 {
@@ -55,6 +90,20 @@ public static void Invoke_not_parsed_lambda_when_parsed_for_verbs()
5590 "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
5691 }
5792
93+ [ Fact ]
94+ public static async Task Invoke_not_parsed_lambda_when_parsed_for_verbsAsync ( )
95+ {
96+ var expected = "a default" ;
97+ var parsedArguments = Parser . Default . ParseArguments < Add_Verb , Commit_Verb , Clone_Verb > ( new [ ] { "undefined" , "-xyz" } ) ;
98+
99+ await parsedArguments . WithParsedAsync < Add_Verb > ( opts => Task . Run ( ( ) => expected = "wrong1" ) ) ;
100+ await parsedArguments . WithParsedAsync < Commit_Verb > ( opts => Task . Run ( ( ) => expected = "wrong2" ) ) ;
101+ await parsedArguments . WithParsedAsync < Clone_Verb > ( opts => Task . Run ( ( ) => expected = "wrong3" ) ) ;
102+ await parsedArguments . WithNotParsedAsync ( _ => Task . Run ( ( ) => expected = "changed" ) ) ;
103+
104+ "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
105+ }
106+
58107 [ Fact ]
59108 public static void Invoke_proper_lambda_when_parsed ( )
60109 {
@@ -66,6 +115,18 @@ public static void Invoke_proper_lambda_when_parsed()
66115 "value" . Should ( ) . BeEquivalentTo ( expected ) ;
67116 }
68117
118+ [ Fact ]
119+ public static async Task Invoke_proper_lambda_when_parsedAsync ( )
120+ {
121+ var expected = string . Empty ;
122+ var parsedArguments = Parser . Default . ParseArguments < Simple_Options > ( new [ ] { "--stringvalue" , "value" } ) ;
123+
124+ await parsedArguments . WithParsedAsync ( opts => Task . Run ( ( ) => expected = opts . StringValue ) ) ;
125+ await parsedArguments . WithNotParsedAsync ( _ => Task . Run ( ( ) => expected = "changed" ) ) ;
126+
127+ "value" . Should ( ) . BeEquivalentTo ( expected ) ;
128+ }
129+
69130 [ Fact ]
70131 public static void Invoke_proper_lambda_when_not_parsed ( )
71132 {
@@ -77,6 +138,18 @@ public static void Invoke_proper_lambda_when_not_parsed()
77138 "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
78139 }
79140
141+ [ Fact ]
142+ public static async Task Invoke_proper_lambda_when_not_parsedAsync ( )
143+ {
144+ var expected = "a default" ;
145+ var parsedArguments = Parser . Default . ParseArguments < Simple_Options > ( new [ ] { "-i" , "aaa" } ) ;
146+
147+ await parsedArguments . WithParsedAsync ( opts => Task . Run ( ( ) => expected = opts . StringValue ) ) ;
148+ await parsedArguments . WithNotParsedAsync ( _ => Task . Run ( ( ) => expected = "changed" ) ) ;
149+
150+ "changed" . Should ( ) . BeEquivalentTo ( expected ) ;
151+ }
152+
80153 [ Fact ]
81154 public static void Turn_sucessful_parsing_into_exit_code ( )
82155 {
@@ -137,6 +210,21 @@ public static void Invoke_parsed_lambda_when_parsed_for_base_verbs()
137210 "dummy.bin" . Should ( ) . BeEquivalentTo ( expected ) ;
138211 }
139212
213+ [ Fact ]
214+ public static async Task Invoke_parsed_lambda_when_parsed_for_base_verbsAsync ( )
215+ {
216+ var expected = string . Empty ;
217+ var parsedArguments = Parser . Default . ParseArguments < Add_Verb , Commit_Verb , Clone_Verb , Derived_Verb > (
218+ new [ ] { "derivedadd" , "dummy.bin" } ) ;
219+
220+ await parsedArguments . WithParsedAsync < Add_Verb > ( opts => Task . Run ( ( ) => expected = "wrong1" ) ) ;
221+ await parsedArguments . WithParsedAsync < Commit_Verb > ( opts => Task . Run ( ( ) => expected = "wrong2" ) ) ;
222+ await parsedArguments . WithParsedAsync < Clone_Verb > ( opts => Task . Run ( ( ) => expected = "wrong3" ) ) ;
223+ await parsedArguments . WithParsedAsync < Base_Class_For_Verb > ( opts => Task . Run ( ( ) => expected = opts . FileName ) ) ;
224+
225+ "dummy.bin" . Should ( ) . BeEquivalentTo ( expected ) ;
226+ }
227+
140228 [ Fact ]
141229 public static void Turn_sucessful_parsing_into_exit_code_for_single_base_verbs ( )
142230 {
0 commit comments