11using System ;
22using System . Collections . Generic ;
33using System . Text ;
4+ using System . Threading ;
45using MatthiWare . CommandLine ;
56using Xunit ;
7+ using static MatthiWare . CommandLineParser . Tests . XUnitExtensions ;
68
79namespace MatthiWare . CommandLineParser . Tests
810{
@@ -11,30 +13,135 @@ public class CommandLineParserTests
1113 [ Fact ]
1214 public void ParseTests ( )
1315 {
14-
1516 var parser = new CommandLineParser < Options > ( ) ;
1617
17- parser . Configure ( opt => opt . Message )
18- . ShortName ( "-m" )
19- . LongName ( "--message" )
18+ parser . Configure ( opt => opt . Option1 )
19+ . ShortName ( "-o" )
2020 . Default ( "Default message" )
2121 . Required ( ) ;
2222
23- var parsed = parser . Parse ( new string [ ] { "app.exe" , "-m " , "test" } ) ;
23+ var parsed = parser . Parse ( new string [ ] { "app.exe" , "-o " , "test" } ) ;
2424
2525 Assert . NotNull ( parsed ) ;
2626
27- Assert . Equal ( "test" , parsed . Result . Message ) ;
27+ Assert . False ( parsed . HasErrors ) ;
28+
29+ Assert . Equal ( "test" , parsed . Result . Option1 ) ;
30+ }
31+
32+ [ Theory ]
33+ [ InlineData ( new [ ] { "app.exe" , "-1" , "message1" , "-2" , "-3" } , "message1" , "message2" , "message3" ) ]
34+ [ InlineData ( new [ ] { "app.exe" , "-1" , "-2" , "message2" , "-3" } , "message1" , "message2" , "message3" ) ]
35+ [ InlineData ( new [ ] { "app.exe" , "-1" , "-2" , "-3" } , "message1" , "message2" , "message3" ) ]
36+ public void ParseWithDefaults ( string [ ] args , string result1 , string result2 , string result3 )
37+ {
38+ var parser = new CommandLineParser < OptionsWithThreeParams > ( ) ;
39+
40+ parser . Configure ( opt => opt . Option1 )
41+ . ShortName ( "-1" )
42+ . Default ( result1 )
43+ . Required ( ) ;
44+
45+ parser . Configure ( opt => opt . Option2 )
46+ . ShortName ( "-2" )
47+ . Default ( result2 )
48+ . Required ( ) ;
49+
50+ parser . Configure ( opt => opt . Option3 )
51+ . ShortName ( "-3" )
52+ . Default ( result3 )
53+ . Required ( ) ;
54+
55+ var parsed = parser . Parse ( args ) ;
56+
57+ Assert . NotNull ( parsed ) ;
58+
59+ Assert . False ( parsed . HasErrors ) ;
60+
61+ Assert . Equal ( result1 , parsed . Result . Option1 ) ;
62+ Assert . Equal ( result2 , parsed . Result . Option2 ) ;
63+ Assert . Equal ( result3 , parsed . Result . Option3 ) ;
2864 }
2965
3066 [ Fact ]
31- public void ConfigureTests ( )
67+ public void ParseWithCommandTests ( )
3268 {
69+ var wait = new ManualResetEvent ( false ) ;
70+
3371 var parser = new CommandLineParser < Options > ( ) ;
3472
35- parser . Configure ( opt => opt . Message )
73+ parser . Configure ( opt => opt . Option1 )
74+ . ShortName ( "-o" )
75+ . Default ( "Default message" )
76+ . Required ( ) ;
77+
78+ var addCmd = parser . AddCommand < AddOption > ( )
79+ . ShortName ( "-A" )
80+ . LongName ( "--Add" )
81+ . OnExecuting ( x =>
82+ {
83+ Assert . Equal ( "my message" , x . Message ) ;
84+ wait . Set ( ) ;
85+ } ) ;
86+
87+
88+ addCmd . Configure ( opt => opt . Message )
89+ . LongName ( "--message" )
3690 . ShortName ( "-m" )
91+ . Required ( ) ;
92+
93+ var parsed = parser . Parse ( new string [ ] { "app.exe" , "-o" , "test" , "--Add" , "-m" , "my message" } ) ;
94+
95+ Assert . False ( parsed . HasErrors ) ;
96+
97+ Assert . NotNull ( parsed ) ;
98+
99+ Assert . Equal ( "test" , parsed . Result . Option1 ) ;
100+
101+ parsed . ExecuteCommands ( ) ;
102+
103+ Assert . True ( wait . WaitOne ( 2000 ) ) ;
104+ }
105+
106+ [ Theory ]
107+ [ InlineData ( new [ ] { "app.exe" , "--Add" , "-m" , "message2" , "-m" , "message1" } , "message1" , "message2" ) ]
108+ [ InlineData ( new [ ] { "app.exe" , "-m" , "message1" , "--Add" , "-m" , "message2" } , "message1" , "message2" ) ]
109+ public void ParseCommandTests ( string [ ] args , string result1 , string result2 )
110+ {
111+ var parser = new CommandLineParser < AddOption > ( ) ;
112+
113+ parser . AddCommand < AddOption > ( )
114+ . LongName ( "--add" )
115+ . ShortName ( "-a" )
116+ . Required ( )
117+ . OnExecuting ( r => Assert . Equal ( result2 , r . Message ) )
118+ . Configure ( c => c . Message )
119+ . LongName ( "--message" )
120+ . ShortName ( "-m" )
121+ . Required ( ) ;
122+
123+ parser . Configure ( opt => opt . Message )
37124 . LongName ( "--message" )
125+ . ShortName ( "-m" )
126+ . Required ( ) ;
127+
128+ var result = parser . Parse ( args ) ;
129+
130+ Assert . False ( result . HasErrors ) ;
131+
132+ result . ExecuteCommands ( ) ;
133+
134+ Assert . Equal ( result1 , result . Result . Message ) ;
135+ }
136+
137+ [ Fact ]
138+ public void ConfigureTests ( )
139+ {
140+ var parser = new CommandLineParser < Options > ( ) ;
141+
142+ parser . Configure ( opt => opt . Option1 )
143+ . ShortName ( "-o" )
144+ . LongName ( "--opt" )
38145 . Default ( "Default message" )
39146 . Required ( ) ;
40147
@@ -51,19 +158,29 @@ public void ConfigureTests()
51158 Assert . NotNull ( message ) ;
52159 Assert . NotNull ( option ) ;
53160
54- Assert . Equal ( "-m " , message . ShortName ) ;
55- Assert . Equal ( "--message " , message . LongName ) ;
161+ Assert . Equal ( "-o " , message . ShortName ) ;
162+ Assert . Equal ( "--opt " , message . LongName ) ;
56163 Assert . True ( message . HasDefault ) ;
57164
58165 Assert . Equal ( "-x" , option . ShortName ) ;
59166 Assert . Equal ( "--xsomething" , option . LongName ) ;
60167 Assert . False ( option . HasDefault ) ;
61168 }
62169
63- private class Options
170+ private class AddOption
64171 {
65172 public string Message { get ; set ; }
173+ }
174+ private class Options
175+ {
176+ public string Option1 { get ; set ; }
66177 public bool Option2 { get ; set ; }
67178 }
179+ private class OptionsWithThreeParams
180+ {
181+ public string Option1 { get ; set ; }
182+ public string Option2 { get ; set ; }
183+ public string Option3 { get ; set ; }
184+ }
68185 }
69186}
0 commit comments