49
flag_test.go
Normal file
49
flag_test.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package flag
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
rutil "github.com/unistack-org/micro/v3/util/reflect"
|
||||
)
|
||||
|
||||
func TestLoad(t *testing.T) {
|
||||
os.Args = append(os.Args, "-broker", "5566:33")
|
||||
type config struct {
|
||||
Broker string `flag:"name=broker,desc='description with, comma',default='127.0.0.1:9092'"`
|
||||
Verbose bool `flag:"name=verbose,desc='verbose output',default='false value'"`
|
||||
}
|
||||
|
||||
cfg := &config{}
|
||||
|
||||
fields, err := rutil.StructFields(cfg)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
for _, sf := range fields {
|
||||
tf, ok := sf.Field.Tag.Lookup("flag")
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
fn, fv, fd := getFlagOpts(tf)
|
||||
|
||||
switch sf.Value.Kind() {
|
||||
case reflect.String:
|
||||
v := sf.Value.Addr().Interface().(*string)
|
||||
flag.StringVar(v, fn, fv, fd)
|
||||
case reflect.Bool:
|
||||
v := sf.Value.Addr().Interface().(*bool)
|
||||
i, _ := strconv.ParseBool(fv)
|
||||
flag.BoolVar(v, fn, i, fd)
|
||||
}
|
||||
}
|
||||
|
||||
flag.Parse()
|
||||
if cfg.Broker != "5566:33" {
|
||||
t.Fatalf("failed to parse flags broker value invalid: %#+v", cfg)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user