@@ -383,6 +383,77 @@ public void LegalFilePathsOnly_accepts_option_arguments_containing_valid_path_ch
383383 }
384384 }
385385
386+ public class FileNameValidity
387+ {
388+ [ Fact ]
389+ public void LegalFileNamesOnly_rejects_command_arguments_containing_invalid_file_name_characters ( )
390+ {
391+ var command = new Command ( "the-command" )
392+ {
393+ new Argument < string > ( ) . LegalFileNamesOnly ( )
394+ } ;
395+
396+ var invalidCharacter = Path . GetInvalidFileNameChars ( ) . First ( c => c != '"' ) ;
397+
398+ var result = command . Parse ( $ "the-command { invalidCharacter } ") ;
399+
400+ result . Errors
401+ . Should ( )
402+ . Contain ( e => e . SymbolResult . Symbol == command . Arguments . First ( ) &&
403+ e . Message == $ "Character not allowed in a file name: { invalidCharacter } ") ;
404+ }
405+
406+ [ Fact ]
407+ public void LegalFileNamesOnly_rejects_option_arguments_containing_invalid_file_name_characters ( )
408+ {
409+ var command = new Command ( "the-command" )
410+ {
411+ new Option < string > ( "-x" ) . LegalFileNamesOnly ( )
412+ } ;
413+
414+ var invalidCharacter = Path . GetInvalidFileNameChars ( ) . First ( c => c != '"' ) ;
415+
416+ var result = command . Parse ( $ "the-command -x { invalidCharacter } ") ;
417+
418+ result . Errors
419+ . Should ( )
420+ . Contain ( e => e . SymbolResult . Symbol . Name == "x" &&
421+ e . Message == $ "Character not allowed in a file name: { invalidCharacter } ") ;
422+ }
423+
424+ [ Fact ]
425+ public void LegalFileNamesOnly_accepts_command_arguments_containing_valid_file_name_characters ( )
426+ {
427+ var command = new Command ( "the-command" )
428+ {
429+ new Argument < string [ ] > ( ) . LegalFileNamesOnly ( )
430+ } ;
431+
432+ var validFileName = Path . GetFileName ( Directory . GetCurrentDirectory ( ) ) ;
433+ var validNonExistingFileName = Guid . NewGuid ( ) . ToString ( ) ;
434+
435+ var result = command . Parse ( $ "the-command { validFileName } { validNonExistingFileName } ") ;
436+
437+ result . Errors . Should ( ) . BeEmpty ( ) ;
438+ }
439+
440+ [ Fact ]
441+ public void LegalFileNamesOnly_accepts_option_arguments_containing_valid_file_name_characters ( )
442+ {
443+ var command = new Command ( "the-command" )
444+ {
445+ new Option < string [ ] > ( "-x" ) . LegalFileNamesOnly ( )
446+ } ;
447+
448+ var validFileName = Path . GetFileName ( Directory . GetCurrentDirectory ( ) ) ;
449+ var validNonExistingFileName = Guid . NewGuid ( ) . ToString ( ) ;
450+
451+ var result = command . Parse ( $ "the-command -x { validFileName } { validNonExistingFileName } ") ;
452+
453+ result . Errors . Should ( ) . BeEmpty ( ) ;
454+ }
455+ }
456+
386457 public class FileExistence
387458 {
388459 [ Fact ]
0 commit comments