10 func setUpBSFlagSet(bsp *[]bool) *FlagSet {
11 f := NewFlagSet("test", ContinueOnError)
12 f.BoolSliceVar(bsp, "bs", []bool{}, "Command separated list!")
16 func setUpBSFlagSetWithDefault(bsp *[]bool) *FlagSet {
17 f := NewFlagSet("test", ContinueOnError)
18 f.BoolSliceVar(bsp, "bs", []bool{false, true}, "Command separated list!")
22 func TestEmptyBS(t *testing.T) {
24 f := setUpBSFlagSet(&bs)
25 err := f.Parse([]string{})
27 t.Fatal("expected no error; got", err)
30 getBS, err := f.GetBoolSlice("bs")
32 t.Fatal("got an error from GetBoolSlice():", err)
35 t.Fatalf("got bs %v with len=%d but expected length=0", getBS, len(getBS))
39 func TestBS(t *testing.T) {
41 f := setUpBSFlagSet(&bs)
43 vals := []string{"1", "F", "TRUE", "0"}
44 arg := fmt.Sprintf("--bs=%s", strings.Join(vals, ","))
45 err := f.Parse([]string{arg})
47 t.Fatal("expected no error; got", err)
49 for i, v := range bs {
50 b, err := strconv.ParseBool(vals[i])
52 t.Fatalf("got error: %v", err)
55 t.Fatalf("expected is[%d] to be %s but got: %t", i, vals[i], v)
58 getBS, err := f.GetBoolSlice("bs")
60 t.Fatalf("got error: %v", err)
62 for i, v := range getBS {
63 b, err := strconv.ParseBool(vals[i])
65 t.Fatalf("got error: %v", err)
68 t.Fatalf("expected bs[%d] to be %s but got: %t from GetBoolSlice", i, vals[i], v)
73 func TestBSDefault(t *testing.T) {
75 f := setUpBSFlagSetWithDefault(&bs)
77 vals := []string{"false", "T"}
79 err := f.Parse([]string{})
81 t.Fatal("expected no error; got", err)
83 for i, v := range bs {
84 b, err := strconv.ParseBool(vals[i])
86 t.Fatalf("got error: %v", err)
89 t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v)
93 getBS, err := f.GetBoolSlice("bs")
95 t.Fatal("got an error from GetBoolSlice():", err)
97 for i, v := range getBS {
98 b, err := strconv.ParseBool(vals[i])
100 t.Fatal("got an error from GetBoolSlice():", err)
103 t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v)
108 func TestBSWithDefault(t *testing.T) {
110 f := setUpBSFlagSetWithDefault(&bs)
112 vals := []string{"FALSE", "1"}
113 arg := fmt.Sprintf("--bs=%s", strings.Join(vals, ","))
114 err := f.Parse([]string{arg})
116 t.Fatal("expected no error; got", err)
118 for i, v := range bs {
119 b, err := strconv.ParseBool(vals[i])
121 t.Fatalf("got error: %v", err)
124 t.Fatalf("expected bs[%d] to be %t but got: %t", i, b, v)
128 getBS, err := f.GetBoolSlice("bs")
130 t.Fatal("got an error from GetBoolSlice():", err)
132 for i, v := range getBS {
133 b, err := strconv.ParseBool(vals[i])
135 t.Fatalf("got error: %v", err)
138 t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v)
143 func TestBSCalledTwice(t *testing.T) {
145 f := setUpBSFlagSet(&bs)
147 in := []string{"T,F", "T"}
148 expected := []bool{true, false, true}
150 arg1 := fmt.Sprintf(argfmt, in[0])
151 arg2 := fmt.Sprintf(argfmt, in[1])
152 err := f.Parse([]string{arg1, arg2})
154 t.Fatal("expected no error; got", err)
156 for i, v := range bs {
157 if expected[i] != v {
158 t.Fatalf("expected bs[%d] to be %t but got %t", i, expected[i], v)
163 func TestBSBadQuoting(t *testing.T) {
170 Want: []bool{true, false, true},
171 FlagArg: []string{"1", "0", "true"},
174 Want: []bool{true, false},
175 FlagArg: []string{"True", "F"},
178 Want: []bool{true, false},
179 FlagArg: []string{"T", "0"},
182 Want: []bool{true, false},
183 FlagArg: []string{"1", "0"},
186 Want: []bool{true, false, false},
187 FlagArg: []string{"true,false", "false"},
190 Want: []bool{true, false, false, true, false, true, false},
191 FlagArg: []string{`"true,false,false,1,0, T"`, " false "},
194 Want: []bool{false, false, true, false, true, false, true},
195 FlagArg: []string{`"0, False, T,false , true,F"`, "true"},
199 for i, test := range tests {
202 f := setUpBSFlagSet(&bs)
204 if err := f.Parse([]string{fmt.Sprintf("--bs=%s", strings.Join(test.FlagArg, ","))}); err != nil {
205 t.Fatalf("flag parsing failed with error: %s\nparsing:\t%#v\nwant:\t\t%#v",
206 err, test.FlagArg, test.Want[i])
209 for j, b := range bs {
210 if b != test.Want[j] {
211 t.Fatalf("bad value parsed for test %d on bool %d:\nwant:\t%t\ngot:\t%t", i, j, test.Want[j], b)