1
2
3
4
5 package pflag
6
7 import (
8 "bytes"
9 "fmt"
10 "strconv"
11 "testing"
12 )
13
14 func setUpS2IFlagSet(s2ip *map[string]int) *FlagSet {
15 f := NewFlagSet("test", ContinueOnError)
16 f.StringToIntVar(s2ip, "s2i", map[string]int{}, "Command separated ls2it!")
17 return f
18 }
19
20 func setUpS2IFlagSetWithDefault(s2ip *map[string]int) *FlagSet {
21 f := NewFlagSet("test", ContinueOnError)
22 f.StringToIntVar(s2ip, "s2i", map[string]int{"a": 1, "b": 2}, "Command separated ls2it!")
23 return f
24 }
25
26 func createS2IFlag(vals map[string]int) string {
27 var buf bytes.Buffer
28 i := 0
29 for k, v := range vals {
30 if i > 0 {
31 buf.WriteRune(',')
32 }
33 buf.WriteString(k)
34 buf.WriteRune('=')
35 buf.WriteString(strconv.Itoa(v))
36 i++
37 }
38 return buf.String()
39 }
40
41 func TestEmptyS2I(t *testing.T) {
42 var s2i map[string]int
43 f := setUpS2IFlagSet(&s2i)
44 err := f.Parse([]string{})
45 if err != nil {
46 t.Fatal("expected no error; got", err)
47 }
48
49 getS2I, err := f.GetStringToInt("s2i")
50 if err != nil {
51 t.Fatal("got an error from GetStringToInt():", err)
52 }
53 if len(getS2I) != 0 {
54 t.Fatalf("got s2i %v with len=%d but expected length=0", getS2I, len(getS2I))
55 }
56 }
57
58 func TestS2I(t *testing.T) {
59 var s2i map[string]int
60 f := setUpS2IFlagSet(&s2i)
61
62 vals := map[string]int{"a": 1, "b": 2, "d": 4, "c": 3}
63 arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals))
64 err := f.Parse([]string{arg})
65 if err != nil {
66 t.Fatal("expected no error; got", err)
67 }
68 for k, v := range s2i {
69 if vals[k] != v {
70 t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
71 }
72 }
73 getS2I, err := f.GetStringToInt("s2i")
74 if err != nil {
75 t.Fatalf("got error: %v", err)
76 }
77 for k, v := range getS2I {
78 if vals[k] != v {
79 t.Fatalf("expected s2i[%s] to be %d but got: %d from GetStringToInt", k, vals[k], v)
80 }
81 }
82 }
83
84 func TestS2IDefault(t *testing.T) {
85 var s2i map[string]int
86 f := setUpS2IFlagSetWithDefault(&s2i)
87
88 vals := map[string]int{"a": 1, "b": 2}
89
90 err := f.Parse([]string{})
91 if err != nil {
92 t.Fatal("expected no error; got", err)
93 }
94 for k, v := range s2i {
95 if vals[k] != v {
96 t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
97 }
98 }
99
100 getS2I, err := f.GetStringToInt("s2i")
101 if err != nil {
102 t.Fatal("got an error from GetStringToInt():", err)
103 }
104 for k, v := range getS2I {
105 if vals[k] != v {
106 t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v)
107 }
108 }
109 }
110
111 func TestS2IWithDefault(t *testing.T) {
112 var s2i map[string]int
113 f := setUpS2IFlagSetWithDefault(&s2i)
114
115 vals := map[string]int{"a": 1, "b": 2}
116 arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals))
117 err := f.Parse([]string{arg})
118 if err != nil {
119 t.Fatal("expected no error; got", err)
120 }
121 for k, v := range s2i {
122 if vals[k] != v {
123 t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
124 }
125 }
126
127 getS2I, err := f.GetStringToInt("s2i")
128 if err != nil {
129 t.Fatal("got an error from GetStringToInt():", err)
130 }
131 for k, v := range getS2I {
132 if vals[k] != v {
133 t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v)
134 }
135 }
136 }
137
138 func TestS2ICalledTwice(t *testing.T) {
139 var s2i map[string]int
140 f := setUpS2IFlagSet(&s2i)
141
142 in := []string{"a=1,b=2", "b=3"}
143 expected := map[string]int{"a": 1, "b": 3}
144 argfmt := "--s2i=%s"
145 arg1 := fmt.Sprintf(argfmt, in[0])
146 arg2 := fmt.Sprintf(argfmt, in[1])
147 err := f.Parse([]string{arg1, arg2})
148 if err != nil {
149 t.Fatal("expected no error; got", err)
150 }
151 for i, v := range s2i {
152 if expected[i] != v {
153 t.Fatalf("expected s2i[%s] to be %d but got: %d", i, expected[i], v)
154 }
155 }
156 }
157
View as plain text