Merge pull request #36 from eparis/empty-slices
Empty slices should be empty - not length 1 with an empty string
diff --git a/flag.go b/flag.go
index 865259b..eba5fd9 100644
--- a/flag.go
+++ b/flag.go
@@ -262,12 +262,12 @@
func (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {
flag := f.Lookup(name)
if flag == nil {
- err := fmt.Errorf("flag accessed but not defined: %s\n", name)
+ err := fmt.Errorf("flag accessed but not defined: %s", name)
return nil, err
}
if flag.Value.Type() != ftype {
- err := fmt.Errorf("trying to get %s value of flag of type %s\n", ftype, flag.Value.Type())
+ err := fmt.Errorf("trying to get %s value of flag of type %s", ftype, flag.Value.Type())
return nil, err
}
diff --git a/int_slice.go b/int_slice.go
index 69e7e7c..b28353d 100644
--- a/int_slice.go
+++ b/int_slice.go
@@ -43,6 +43,10 @@
func intSliceConv(val string) (interface{}, error) {
val = strings.Trim(val, "[]")
+ // Empty string would cause a slice with one (empty) entry
+ if len(val) == 0 {
+ return []int{}, nil
+ }
ss := strings.Split(val, ",")
out := make([]int, len(ss))
for i, d := range ss {
diff --git a/int_slice_test.go b/int_slice_test.go
index 927e7f4..32c7cd7 100644
--- a/int_slice_test.go
+++ b/int_slice_test.go
@@ -17,6 +17,23 @@
return f
}
+func TestEmptyIS(t *testing.T) {
+ var is []int
+ f := setUpISFlagSet(&is)
+ err := f.Parse([]string{})
+ if err != nil {
+ t.Fatal("expected no error; got", err)
+ }
+
+ getIS, err := f.GetIntSlice("is")
+ if err != nil {
+ t.Fatal("got an error from GetStringSlice():", err)
+ }
+ if len(getIS) != 0 {
+ t.Fatalf("got is %v with len=%d but expected length=0", getIS, len(getIS))
+ }
+}
+
func TestIS(t *testing.T) {
var is []int
f := setUpISFlagSet(&is)
diff --git a/string_slice.go b/string_slice.go
index 20d94ba..2037bd8 100644
--- a/string_slice.go
+++ b/string_slice.go
@@ -25,6 +25,10 @@
func stringSliceConv(sval string) (interface{}, error) {
sval = strings.Trim(sval, "[]")
+ // An empty string would cause a slice with one (empty) string
+ if len(sval) == 0 {
+ return []string{}, nil
+ }
v := strings.Split(sval, ",")
return v, nil
}
diff --git a/string_slice_test.go b/string_slice_test.go
index d5c0d03..63eb9de 100644
--- a/string_slice_test.go
+++ b/string_slice_test.go
@@ -16,6 +16,23 @@
return f
}
+func TestEmptySS(t *testing.T) {
+ var ss []string
+ f := setUpSSFlagSet(&ss)
+ err := f.Parse([]string{})
+ if err != nil {
+ t.Fatal("expected no error; got", err)
+ }
+
+ getSS, err := f.GetStringSlice("ss")
+ if err != nil {
+ t.Fatal("got an error from GetStringSlice():", err)
+ }
+ if len(getSS) != 0 {
+ t.Fatalf("got ss %v with len=%d but expected length=0", getSS, len(getSS))
+ }
+}
+
func TestSS(t *testing.T) {
var ss []string
f := setUpSSFlagSet(&ss)