@@ -199,6 +199,25 @@ public void Ensure_Parser_Calls_The_Callback_With_Expected_Int32_When_Using_Long
199199 } ) ;
200200 }
201201
202+ [ Test ]
203+ public void Ensure_Negative_Integer_Can_Be_Specified_With_Unix_Style ( )
204+ {
205+ var parser = CreateFluentParser ( ) ;
206+
207+ int actual = 0 ;
208+
209+ parser . Setup < int > ( "integer" )
210+ . Callback ( i => actual = i ) ;
211+
212+ var result = parser . Parse ( new [ ] { "--integer" , "--" , "-123" } ) ;
213+
214+ Assert . IsFalse ( result . HasErrors ) ;
215+ Assert . IsFalse ( result . EmptyArgs ) ;
216+ Assert . IsFalse ( result . HelpCalled ) ;
217+
218+ Assert . AreEqual ( - 123 , actual ) ;
219+ }
220+
202221 #endregion Int32 Option
203222
204223 #region Double Option
@@ -247,6 +266,25 @@ public void Ensure_Parser_Calls_The_Callback_With_Expected_Double_When_Using_Lon
247266 } ) ;
248267 }
249268
269+ [ Test ]
270+ public void Ensure_Negative_Double_Can_Be_Specified_With_Unix_Style ( )
271+ {
272+ var parser = CreateFluentParser ( ) ;
273+
274+ double actual = 0 ;
275+
276+ parser . Setup < double > ( "double" )
277+ . Callback ( i => actual = i ) ;
278+
279+ var result = parser . Parse ( new [ ] { "--double" , "--" , "-123.456" } ) ;
280+
281+ Assert . IsFalse ( result . HasErrors ) ;
282+ Assert . IsFalse ( result . EmptyArgs ) ;
283+ Assert . IsFalse ( result . HelpCalled ) ;
284+
285+ Assert . AreEqual ( - 123.456 , actual ) ;
286+ }
287+
250288 #endregion Double Option
251289
252290 #region Enum Option
@@ -866,6 +904,110 @@ public void Ensure_Obsolete_Setup_Does_Not_Allow_Long_Option_With_One_Char()
866904
867905 #endregion
868906
907+ #region Addtional Arguments
908+
909+ [ Test ]
910+ public void Ensure_Additional_Arguments_Callback_Called_When_Additional_Args_Provided ( )
911+ {
912+ var parser = CreateFluentParser ( ) ;
913+
914+ var capturedAdditionalArgs = new List < string > ( ) ;
915+
916+ parser . Setup < string > ( "my-option" )
917+ . CaptureAdditionalArguments ( capturedAdditionalArgs . AddRange ) ;
918+
919+ var result = parser . Parse ( new [ ] { "--my-option" , "value" , "--" , "addArg1" , "addArg2" } ) ;
920+
921+ Assert . IsFalse ( result . HasErrors ) ;
922+ Assert . IsFalse ( result . EmptyArgs ) ;
923+ Assert . IsFalse ( result . HelpCalled ) ;
924+
925+ Assert . AreEqual ( 2 , capturedAdditionalArgs . Count ( ) ) ;
926+ Assert . IsTrue ( capturedAdditionalArgs . Contains ( "addArg1" ) ) ;
927+ Assert . IsTrue ( capturedAdditionalArgs . Contains ( "addArg2" ) ) ;
928+ }
929+
930+ [ Test ]
931+ public void Ensure_Additional_Arguments_Callback_Not_Called_When_No_Additional_Args_Provided ( )
932+ {
933+ var parser = CreateFluentParser ( ) ;
934+
935+ var capturedAdditionalArgs = new List < string > ( ) ;
936+
937+ parser . Setup < string > ( "my-option" )
938+ . CaptureAdditionalArguments ( capturedAdditionalArgs . AddRange ) ;
939+
940+ var result = parser . Parse ( new [ ] { "--my-option" , "value" } ) ;
941+
942+ Assert . IsFalse ( result . HasErrors ) ;
943+ Assert . IsFalse ( result . EmptyArgs ) ;
944+ Assert . IsFalse ( result . HelpCalled ) ;
945+
946+ Assert . IsEmpty ( capturedAdditionalArgs ) ;
947+ }
948+
949+ [ Test ]
950+ public void Ensure_Additional_Arguments_Callback_Not_Called_When_No_Additional_Args_Follow_A_Double_Dash ( )
951+ {
952+ var parser = CreateFluentParser ( ) ;
953+
954+ var capturedAdditionalArgs = new List < string > ( ) ;
955+
956+ parser . Setup < string > ( "my-option" )
957+ . CaptureAdditionalArguments ( capturedAdditionalArgs . AddRange ) ;
958+
959+ var result = parser . Parse ( new [ ] { "--my-option" , "value" , "--" } ) ;
960+
961+ Assert . IsFalse ( result . HasErrors ) ;
962+ Assert . IsFalse ( result . EmptyArgs ) ;
963+ Assert . IsFalse ( result . HelpCalled ) ;
964+
965+ Assert . IsEmpty ( capturedAdditionalArgs ) ;
966+ }
967+
968+ [ Test ]
969+ public void Ensure_Stable_When_Additional_Args_Are_Provided_But_Capture_Additional_Arguments_Has_Not_Been_Setup ( )
970+ {
971+ var parser = CreateFluentParser ( ) ;
972+
973+ parser . Setup < string > ( "my-option" ) ;
974+
975+ var result = parser . Parse ( new [ ] { "--my-option" , "value" , "--" , "addArg1" , "addArg2" } ) ;
976+
977+ Assert . IsFalse ( result . HasErrors ) ;
978+ Assert . IsFalse ( result . EmptyArgs ) ;
979+ Assert . IsFalse ( result . HelpCalled ) ;
980+ }
981+
982+ #endregion
983+
984+ #region Lists
985+
986+ [ Test ]
987+ public void Ensure_Can_Parse_Mulitple_Arguments_Containing_Negative_Integers_To_A_List ( )
988+ {
989+ var parser = CreateFluentParser ( ) ;
990+
991+ var actual = new List < int > ( ) ;
992+
993+ parser . Setup < List < int > > ( "integers" )
994+ . Callback ( actual . AddRange ) ;
995+
996+ var result = parser . Parse ( new [ ] { "--integers" , "--" , "123" , "-123" , "-321" , "321" } ) ;
997+
998+ Assert . IsFalse ( result . HasErrors ) ;
999+ Assert . IsFalse ( result . EmptyArgs ) ;
1000+ Assert . IsFalse ( result . HelpCalled ) ;
1001+
1002+ Assert . AreEqual ( 4 , actual . Count ( ) ) ;
1003+ Assert . IsTrue ( actual . Contains ( 123 ) ) ;
1004+ Assert . IsTrue ( actual . Contains ( - 123 ) ) ;
1005+ Assert . IsTrue ( actual . Contains ( - 321 ) ) ;
1006+ Assert . IsTrue ( actual . Contains ( 321 ) ) ;
1007+ }
1008+
1009+ #endregion
1010+
8691011 #endregion Top Level Tests
8701012
8711013 #region Duplicate Options Tests
0 commit comments