|
|
@@ -5,7 +5,9 @@ package opt
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "flag"
|
|
|
"reflect"
|
|
|
+ "strings"
|
|
|
"testing"
|
|
|
)
|
|
|
|
|
|
@@ -127,3 +129,38 @@ func TestUnmarshalAlloc(t *testing.T) {
|
|
|
t.Errorf("got %v allocs, want 0", n)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestBoolFlag(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ arguments string
|
|
|
+ wantParseError bool // expect flag.Parse to error
|
|
|
+ want Bool
|
|
|
+ }{
|
|
|
+ {"", false, Bool("")},
|
|
|
+ {"-test", true, Bool("")},
|
|
|
+ {`-test=""`, true, Bool("")},
|
|
|
+ {"-test invalid", true, Bool("")},
|
|
|
+
|
|
|
+ {"-test true", false, NewBool(true)},
|
|
|
+ {"-test 1", false, NewBool(true)},
|
|
|
+
|
|
|
+ {"-test false", false, NewBool(false)},
|
|
|
+ {"-test 0", false, NewBool(false)},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tt := range tests {
|
|
|
+ var got Bool
|
|
|
+ fs := flag.NewFlagSet(t.Name(), flag.ContinueOnError)
|
|
|
+ fs.Var(&BoolFlag{&got}, "test", "test flag")
|
|
|
+
|
|
|
+ arguments := strings.Split(tt.arguments, " ")
|
|
|
+ err := fs.Parse(arguments)
|
|
|
+ if (err != nil) != tt.wantParseError {
|
|
|
+ t.Errorf("flag.Parse(%q) returned error %v, want %v", arguments, err, tt.wantParseError)
|
|
|
+ }
|
|
|
+
|
|
|
+ if got != tt.want {
|
|
|
+ t.Errorf("flag.Parse(%q) got %q, want %q", arguments, got, tt.want)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|