| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of ths2i source code s2i governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package pflag |
| |
| import ( |
| "bytes" |
| "fmt" |
| "strconv" |
| "testing" |
| ) |
| |
| func setUpS2IFlagSet(s2ip *map[string]int) *FlagSet { |
| f := NewFlagSet("test", ContinueOnError) |
| f.StringToIntVar(s2ip, "s2i", map[string]int{}, "Command separated ls2it!") |
| return f |
| } |
| |
| func setUpS2IFlagSetWithDefault(s2ip *map[string]int) *FlagSet { |
| f := NewFlagSet("test", ContinueOnError) |
| f.StringToIntVar(s2ip, "s2i", map[string]int{"a": 1, "b": 2}, "Command separated ls2it!") |
| return f |
| } |
| |
| func createS2IFlag(vals map[string]int) string { |
| var buf bytes.Buffer |
| i := 0 |
| for k, v := range vals { |
| if i > 0 { |
| buf.WriteRune(',') |
| } |
| buf.WriteString(k) |
| buf.WriteRune('=') |
| buf.WriteString(strconv.Itoa(v)) |
| i++ |
| } |
| return buf.String() |
| } |
| |
| func TestEmptyS2I(t *testing.T) { |
| var s2i map[string]int |
| f := setUpS2IFlagSet(&s2i) |
| err := f.Parse([]string{}) |
| if err != nil { |
| t.Fatal("expected no error; got", err) |
| } |
| |
| getS2I, err := f.GetStringToInt("s2i") |
| if err != nil { |
| t.Fatal("got an error from GetStringToInt():", err) |
| } |
| if len(getS2I) != 0 { |
| t.Fatalf("got s2i %v with len=%d but expected length=0", getS2I, len(getS2I)) |
| } |
| } |
| |
| func TestS2I(t *testing.T) { |
| var s2i map[string]int |
| f := setUpS2IFlagSet(&s2i) |
| |
| vals := map[string]int{"a": 1, "b": 2, "d": 4, "c": 3} |
| arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals)) |
| err := f.Parse([]string{arg}) |
| if err != nil { |
| t.Fatal("expected no error; got", err) |
| } |
| for k, v := range s2i { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v) |
| } |
| } |
| getS2I, err := f.GetStringToInt("s2i") |
| if err != nil { |
| t.Fatalf("got error: %v", err) |
| } |
| for k, v := range getS2I { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d but got: %d from GetStringToInt", k, vals[k], v) |
| } |
| } |
| } |
| |
| func TestS2IDefault(t *testing.T) { |
| var s2i map[string]int |
| f := setUpS2IFlagSetWithDefault(&s2i) |
| |
| vals := map[string]int{"a": 1, "b": 2} |
| |
| err := f.Parse([]string{}) |
| if err != nil { |
| t.Fatal("expected no error; got", err) |
| } |
| for k, v := range s2i { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v) |
| } |
| } |
| |
| getS2I, err := f.GetStringToInt("s2i") |
| if err != nil { |
| t.Fatal("got an error from GetStringToInt():", err) |
| } |
| for k, v := range getS2I { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v) |
| } |
| } |
| } |
| |
| func TestS2IWithDefault(t *testing.T) { |
| var s2i map[string]int |
| f := setUpS2IFlagSetWithDefault(&s2i) |
| |
| vals := map[string]int{"a": 1, "b": 2} |
| arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals)) |
| err := f.Parse([]string{arg}) |
| if err != nil { |
| t.Fatal("expected no error; got", err) |
| } |
| for k, v := range s2i { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v) |
| } |
| } |
| |
| getS2I, err := f.GetStringToInt("s2i") |
| if err != nil { |
| t.Fatal("got an error from GetStringToInt():", err) |
| } |
| for k, v := range getS2I { |
| if vals[k] != v { |
| t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v) |
| } |
| } |
| } |
| |
| func TestS2ICalledTwice(t *testing.T) { |
| var s2i map[string]int |
| f := setUpS2IFlagSet(&s2i) |
| |
| in := []string{"a=1,b=2", "b=3"} |
| expected := map[string]int{"a": 1, "b": 3} |
| argfmt := "--s2i=%s" |
| arg1 := fmt.Sprintf(argfmt, in[0]) |
| arg2 := fmt.Sprintf(argfmt, in[1]) |
| err := f.Parse([]string{arg1, arg2}) |
| if err != nil { |
| t.Fatal("expected no error; got", err) |
| } |
| for i, v := range s2i { |
| if expected[i] != v { |
| t.Fatalf("expected s2i[%s] to be %d but got: %d", i, expected[i], v) |
| } |
| } |
| } |