51
flag_test.go
51
flag_test.go
@@ -1,49 +1,46 @@
|
||||
package flag
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"context"
|
||||
"os"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
rutil "github.com/unistack-org/micro/v3/util/reflect"
|
||||
"github.com/unistack-org/micro/v3/config"
|
||||
)
|
||||
|
||||
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'"`
|
||||
os.Args = append(os.Args, "-verbose")
|
||||
os.Args = append(os.Args, "-wait", "5s")
|
||||
os.Args = append(os.Args, "-addr", "33,44")
|
||||
os.Args = append(os.Args, "-time", time.RFC822)
|
||||
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'"`
|
||||
Addr []string `flag:"name=addr,desc='addrs',default='127.0.0.1:9092'"`
|
||||
Wait time.Duration `flag:"name=wait,desc='wait time',default='2s'"`
|
||||
Time time.Time `flag:"name=time,desc='some time',default='02 Jan 06 15:04 MST'"`
|
||||
}
|
||||
|
||||
cfg := &config{}
|
||||
ctx := context.Background()
|
||||
cfg := &Config{}
|
||||
|
||||
fields, err := rutil.StructFields(cfg)
|
||||
if err != nil {
|
||||
c := NewConfig(config.Struct(cfg), TimeFormat(time.RFC822))
|
||||
if err := c.Init(); 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)
|
||||
}
|
||||
if err := c.Load(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
flag.Parse()
|
||||
if cfg.Broker != "5566:33" {
|
||||
t.Fatalf("failed to parse flags broker value invalid: %#+v", cfg)
|
||||
}
|
||||
if tf := cfg.Time.Format(time.RFC822); tf != "02 Jan 06 14:32 MSK" {
|
||||
t.Fatalf("parse time error: %v", cfg.Time)
|
||||
}
|
||||
|
||||
t.Logf("cfg %#+v", cfg)
|
||||
}
|
||||
|
Reference in New Issue
Block a user