@@ -609,6 +609,30 @@ func TestNewFlagSet(t *testing.T) {
609609 }
610610}
611611
612+ func TestFlagSetWithArrays (t * testing.T ) {
613+ t .Parallel ()
614+
615+ config := & struct {
616+ MyArray []string `flag:"true" `
617+ }{MyArray : []string {"v1" , "v2" }}
618+
619+ valueOfConfig := reflect .ValueOf (config )
620+ fs , err := newFlagSet (nil , valueOfConfig )
621+ With (t ).Verify (err ).Will (BeNil ()).OrFail ()
622+ if len (fs .flags ) != 1 {
623+ t .Fatalf ("Expected 1 flag, got %d" , len (fs .flags ))
624+ }
625+
626+ f := fs .flags [0 ]
627+ With (t ).Verify (f .Name ).Will (EqualTo ("my-array" )).OrFail ()
628+ With (t ).Verify (f .EnvVarName ).Will (BeNil ()).OrFail ()
629+ With (t ).Verify (f .HasValue ).Will (EqualTo (true )).OrFail ()
630+ With (t ).Verify (f .ValueName ).Will (BeNil ()).OrFail ()
631+ With (t ).Verify (f .Description ).Will (BeNil ()).OrFail ()
632+ With (t ).Verify (f .Required ).Will (BeNil ()).OrFail ()
633+ With (t ).Verify (f .DefaultValue ).Will (EqualTo ("v1,v2" )).OrFail ()
634+ }
635+
612636func TestFlagSetGetMergedFlagDefs (t * testing.T ) {
613637 t .Parallel ()
614638 type testCase struct {
@@ -891,6 +915,51 @@ func TestFlagSetApply(t *testing.T) {
891915 expectedError string
892916 }
893917 testCases := map [string ]testCase {
918+ "all types are supported from CLI" : {
919+ config : & struct {
920+ String string `flag:"true"`
921+ Int int `flag:"true"`
922+ Float32 float32 `flag:"true"`
923+ Float64 float64 `flag:"true"`
924+ Bool bool `flag:"true"`
925+ StringArray []string `flag:"true"`
926+ IntArray []int `flag:"true"`
927+ Float32Array []float32 `flag:"true"`
928+ Float64Array []float64 `flag:"true"`
929+ }{},
930+ args : []string {
931+ "--string" , "s1" ,
932+ "--int" , "9" ,
933+ "--float32" , "1.2" ,
934+ "--float64" , "123.456" ,
935+ "--bool" ,
936+ "--string-array" , `sa1,"s with space",sa3,,,"` ,
937+ "--int-array" , `1,2,3,5,8` ,
938+ "--float32array" , `1.2,3.4,5.6` ,
939+ "--float64array" , `11.22,33.44,55.66` ,
940+ },
941+ expectedConfig : & struct {
942+ String string `flag:"true"`
943+ Int int `flag:"true"`
944+ Float32 float32 `flag:"true"`
945+ Float64 float64 `flag:"true"`
946+ Bool bool `flag:"true"`
947+ StringArray []string `flag:"true"`
948+ IntArray []int `flag:"true"`
949+ Float32Array []float32 `flag:"true"`
950+ Float64Array []float64 `flag:"true"`
951+ }{
952+ String : "s1" ,
953+ Int : 9 ,
954+ Float32 : 1.2 ,
955+ Float64 : 123.456 ,
956+ Bool : true ,
957+ StringArray : []string {"sa1" , "s with space" , "sa3" , "" , "" , "" },
958+ IntArray : []int {1 , 2 , 3 , 5 , 8 },
959+ Float32Array : []float32 {1.2 , 3.4 , 5.6 },
960+ Float64Array : []float64 {11.22 , 33.44 , 55.66 },
961+ },
962+ },
894963 "CLI overrides environment variables" : {
895964 config : & struct {
896965 F1 string `name:"my-field1"`
0 commit comments