1
2
3
4
5 package pflag
6
7 import (
8 "fmt"
9 "strconv"
10 "strings"
11 "testing"
12 )
13
14 func setUpI32SFlagSet(isp *[]int32) *FlagSet {
15 f := NewFlagSet("test", ContinueOnError)
16 f.Int32SliceVar(isp, "is", []int32{}, "Command separated list!")
17 return f
18 }
19
20 func setUpI32SFlagSetWithDefault(isp *[]int32) *FlagSet {
21 f := NewFlagSet("test", ContinueOnError)
22 f.Int32SliceVar(isp, "is", []int32{0, 1}, "Command separated list!")
23 return f
24 }
25
26 func TestEmptyI32S(t *testing.T) {
27 var is []int32
28 f := setUpI32SFlagSet(&is)
29 err := f.Parse([]string{})
30 if err != nil {
31 t.Fatal("expected no error; got", err)
32 }
33
34 getI32S, err := f.GetInt32Slice("is")
35 if err != nil {
36 t.Fatal("got an error from GetInt32Slice():", err)
37 }
38 if len(getI32S) != 0 {
39 t.Fatalf("got is %v with len=%d but expected length=0", getI32S, len(getI32S))
40 }
41 }
42
43 func TestI32S(t *testing.T) {
44 var is []int32
45 f := setUpI32SFlagSet(&is)
46
47 vals := []string{"1", "2", "4", "3"}
48 arg := fmt.Sprintf("--is=%s", strings.Join(vals, ","))
49 err := f.Parse([]string{arg})
50 if err != nil {
51 t.Fatal("expected no error; got", err)
52 }
53 for i, v := range is {
54 d64, err := strconv.ParseInt(vals[i], 0, 32)
55 if err != nil {
56 t.Fatalf("got error: %v", err)
57 }
58 d := int32(d64)
59 if d != v {
60 t.Fatalf("expected is[%d] to be %s but got: %d", i, vals[i], v)
61 }
62 }
63 getI32S, err := f.GetInt32Slice("is")
64 if err != nil {
65 t.Fatalf("got error: %v", err)
66 }
67 for i, v := range getI32S {
68 d64, err := strconv.ParseInt(vals[i], 0, 32)
69 if err != nil {
70 t.Fatalf("got error: %v", err)
71 }
72 d := int32(d64)
73 if d != v {
74 t.Fatalf("expected is[%d] to be %s but got: %d from GetInt32Slice", i, vals[i], v)
75 }
76 }
77 }
78
79 func TestI32SDefault(t *testing.T) {
80 var is []int32
81 f := setUpI32SFlagSetWithDefault(&is)
82
83 vals := []string{"0", "1"}
84
85 err := f.Parse([]string{})
86 if err != nil {
87 t.Fatal("expected no error; got", err)
88 }
89 for i, v := range is {
90 d64, err := strconv.ParseInt(vals[i], 0, 32)
91 if err != nil {
92 t.Fatalf("got error: %v", err)
93 }
94 d := int32(d64)
95 if d != v {
96 t.Fatalf("expected is[%d] to be %d but got: %d", i, d, v)
97 }
98 }
99
100 getI32S, err := f.GetInt32Slice("is")
101 if err != nil {
102 t.Fatal("got an error from GetInt32Slice():", err)
103 }
104 for i, v := range getI32S {
105 d64, err := strconv.ParseInt(vals[i], 0, 32)
106 if err != nil {
107 t.Fatal("got an error from GetInt32Slice():", err)
108 }
109 d := int32(d64)
110 if d != v {
111 t.Fatalf("expected is[%d] to be %d from GetInt32Slice but got: %d", i, d, v)
112 }
113 }
114 }
115
116 func TestI32SWithDefault(t *testing.T) {
117 var is []int32
118 f := setUpI32SFlagSetWithDefault(&is)
119
120 vals := []string{"1", "2"}
121 arg := fmt.Sprintf("--is=%s", strings.Join(vals, ","))
122 err := f.Parse([]string{arg})
123 if err != nil {
124 t.Fatal("expected no error; got", err)
125 }
126 for i, v := range is {
127 d64, err := strconv.ParseInt(vals[i], 0, 32)
128 if err != nil {
129 t.Fatalf("got error: %v", err)
130 }
131 d := int32(d64)
132 if d != v {
133 t.Fatalf("expected is[%d] to be %d but got: %d", i, d, v)
134 }
135 }
136
137 getI32S, err := f.GetInt32Slice("is")
138 if err != nil {
139 t.Fatal("got an error from GetInt32Slice():", err)
140 }
141 for i, v := range getI32S {
142 d64, err := strconv.ParseInt(vals[i], 0, 32)
143 if err != nil {
144 t.Fatalf("got error: %v", err)
145 }
146 d := int32(d64)
147 if d != v {
148 t.Fatalf("expected is[%d] to be %d from GetInt32Slice but got: %d", i, d, v)
149 }
150 }
151 }
152
153 func TestI32SAsSliceValue(t *testing.T) {
154 var i32s []int32
155 f := setUpI32SFlagSet(&i32s)
156
157 in := []string{"1", "2"}
158 argfmt := "--is=%s"
159 arg1 := fmt.Sprintf(argfmt, in[0])
160 arg2 := fmt.Sprintf(argfmt, in[1])
161 err := f.Parse([]string{arg1, arg2})
162 if err != nil {
163 t.Fatal("expected no error; got", err)
164 }
165
166 f.VisitAll(func(f *Flag) {
167 if val, ok := f.Value.(SliceValue); ok {
168 _ = val.Replace([]string{"3"})
169 }
170 })
171 if len(i32s) != 1 || i32s[0] != 3 {
172 t.Fatalf("Expected ss to be overwritten with '3.1', but got: %v", i32s)
173 }
174 }
175
176 func TestI32SCalledTwice(t *testing.T) {
177 var is []int32
178 f := setUpI32SFlagSet(&is)
179
180 in := []string{"1,2", "3"}
181 expected := []int32{1, 2, 3}
182 argfmt := "--is=%s"
183 arg1 := fmt.Sprintf(argfmt, in[0])
184 arg2 := fmt.Sprintf(argfmt, in[1])
185 err := f.Parse([]string{arg1, arg2})
186 if err != nil {
187 t.Fatal("expected no error; got", err)
188 }
189 for i, v := range is {
190 if expected[i] != v {
191 t.Fatalf("expected is[%d] to be %d but got: %d", i, expected[i], v)
192 }
193 }
194 }
195
View as plain text