@@ -615,6 +615,164 @@ pos_c
615
615
) ;
616
616
}
617
617
618
+ #[ test]
619
+ fn suggest_delimiter_values ( ) {
620
+ let mut cmd = Command :: new ( "delimiter" )
621
+ . arg (
622
+ clap:: Arg :: new ( "delimiter" )
623
+ . long ( "delimiter" )
624
+ . short ( 'D' )
625
+ . value_parser ( [
626
+ PossibleValue :: new ( "comma" ) ,
627
+ PossibleValue :: new ( "space" ) ,
628
+ PossibleValue :: new ( "tab" ) ,
629
+ ] )
630
+ . value_delimiter ( ',' ) ,
631
+ )
632
+ . arg (
633
+ clap:: Arg :: new ( "pos" )
634
+ . index ( 1 )
635
+ . value_parser ( [ "a_pos" , "b_pos" , "c_pos" ] )
636
+ . value_delimiter ( ',' ) ,
637
+ ) ;
638
+
639
+ assert_data_eq ! (
640
+ complete!( cmd, "--delimiter [TAB]" ) ,
641
+ snapbox:: str ![
642
+ "comma
643
+ space
644
+ tab"
645
+ ]
646
+ ) ;
647
+
648
+ assert_data_eq ! (
649
+ complete!( cmd, "--delimiter=[TAB]" ) ,
650
+ snapbox:: str ![
651
+ "--delimiter=comma
652
+ --delimiter=space
653
+ --delimiter=tab"
654
+ ]
655
+ ) ;
656
+
657
+ assert_data_eq ! ( complete!( cmd, "--delimiter c[TAB]" ) , snapbox:: str ![ "comma" ] ) ;
658
+
659
+ assert_data_eq ! (
660
+ complete!( cmd, "--delimiter=c[TAB]" ) ,
661
+ snapbox:: str ![ "--delimiter=comma" ]
662
+ ) ;
663
+
664
+ assert_data_eq ! (
665
+ complete!( cmd, "--delimiter comma,[TAB]" ) ,
666
+ snapbox:: str ![
667
+ "comma,comma
668
+ comma,space
669
+ comma,tab"
670
+ ]
671
+ ) ;
672
+
673
+ assert_data_eq ! (
674
+ complete!( cmd, "--delimiter=comma,[TAB]" ) ,
675
+ snapbox:: str ![
676
+ "--delimiter=comma,comma
677
+ --delimiter=comma,space
678
+ --delimiter=comma,tab
679
+ --delimiter=comma,a_pos
680
+ --delimiter=comma,b_pos
681
+ --delimiter=comma,c_pos"
682
+ ]
683
+ ) ;
684
+
685
+ assert_data_eq ! (
686
+ complete!( cmd, "--delimiter comma,s[TAB]" ) ,
687
+ snapbox:: str ![ "comma,space" ]
688
+ ) ;
689
+
690
+ assert_data_eq ! (
691
+ complete!( cmd, "--delimiter=comma,s[TAB]" ) ,
692
+ snapbox:: str ![ "--delimiter=comma,space" ]
693
+ ) ;
694
+
695
+ assert_data_eq ! (
696
+ complete!( cmd, "-D [TAB]" ) ,
697
+ snapbox:: str ![
698
+ "comma
699
+ space
700
+ tab"
701
+ ]
702
+ ) ;
703
+
704
+ assert_data_eq ! (
705
+ complete!( cmd, "-D=[TAB]" ) ,
706
+ snapbox:: str ![
707
+ "-D=comma
708
+ -D=space
709
+ -D=tab"
710
+ ]
711
+ ) ;
712
+
713
+ assert_data_eq ! ( complete!( cmd, "-D c[TAB]" ) , snapbox:: str ![ "comma" ] ) ;
714
+
715
+ assert_data_eq ! ( complete!( cmd, "-D=c[TAB]" ) , snapbox:: str ![ "-D=comma" ] ) ;
716
+
717
+ assert_data_eq ! (
718
+ complete!( cmd, "-D comma,[TAB]" ) ,
719
+ snapbox:: str ![
720
+ "comma,comma
721
+ comma,space
722
+ comma,tab"
723
+ ]
724
+ ) ;
725
+
726
+ assert_data_eq ! (
727
+ complete!( cmd, "-D=comma,[TAB]" ) ,
728
+ snapbox:: str ![
729
+ "-D=comma,comma
730
+ -D=comma,space
731
+ -D=comma,tab
732
+ -D=comma,a_pos
733
+ -D=comma,b_pos
734
+ -D=comma,c_pos"
735
+ ]
736
+ ) ;
737
+
738
+ assert_data_eq ! (
739
+ complete!( cmd, "-D comma,s[TAB]" ) ,
740
+ snapbox:: str ![ "comma,space" ]
741
+ ) ;
742
+
743
+ assert_data_eq ! (
744
+ complete!( cmd, "-D=comma,s[TAB]" ) ,
745
+ snapbox:: str ![ "-D=comma,space" ]
746
+ ) ;
747
+
748
+ assert_data_eq ! (
749
+ complete!( cmd, "-- [TAB]" ) ,
750
+ snapbox:: str ![
751
+ "--delimiter
752
+ --help\t Print help
753
+ -D
754
+ -h\t Print help
755
+ a_pos
756
+ b_pos
757
+ c_pos"
758
+ ]
759
+ ) ;
760
+
761
+ assert_data_eq ! (
762
+ complete!( cmd, " -- a_pos,[TAB]" ) ,
763
+ snapbox:: str ![
764
+ "a_pos,a_pos
765
+ a_pos,b_pos
766
+ a_pos,c_pos"
767
+ ]
768
+ ) ;
769
+
770
+ assert_data_eq ! (
771
+ complete!( cmd, "-- a_pos,b[TAB]" ) ,
772
+ snapbox:: str ![ "a_pos,b_pos" ]
773
+ ) ;
774
+ }
775
+
618
776
fn complete ( cmd : & mut Command , args : impl AsRef < str > , current_dir : Option < & Path > ) -> String {
619
777
let input = args. as_ref ( ) ;
620
778
let mut args = vec ! [ std:: ffi:: OsString :: from( cmd. get_name( ) ) ] ;
0 commit comments