github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/flagparse/parse_test.go (about) 1 package flagparse 2 3 import ( 4 "fmt" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 // Arg is the application's argument options. 12 type Arg struct { 13 Duration time.Duration `flag:"d"` 14 MyFlag myFlag `flag:"my"` 15 Out []string 16 Port int `flag:"p" val:"1234"` 17 Input string `flag:"i" val:"" required:"true"` 18 Version bool `val:"false" usage:"Show version"` 19 Other string `flag:"-"` 20 V int `flag:"v" count:"true"` 21 Size uint64 `flag:",s" size:"true" val:"10MiB"` 22 Pmem float32 23 } 24 25 type myFlag struct { 26 Value string 27 } 28 29 func (i *myFlag) String() string { return i.Value } 30 31 func (i *myFlag) Set(value string) error { 32 i.Value = value 33 return nil 34 } 35 36 func TestParse(t *testing.T) { 37 arg := &Arg{} 38 ParseArgs(arg, []string{"app", "-i", "5003", "-out", "a", "-out", "b", "-my", "mymy", "-d", "10s", "-vvv", "-s", "2KiB", "-pmem", "0.618"}) 39 assert.Equal(t, 10*time.Second, arg.Duration) 40 assert.Equal(t, myFlag{Value: "mymy"}, arg.MyFlag) 41 assert.Equal(t, []string{"a", "b"}, arg.Out) 42 assert.Equal(t, 1234, arg.Port) 43 assert.Equal(t, "5003", arg.Input) 44 assert.Equal(t, 3, arg.V) 45 assert.Equal(t, uint64(2*1024), arg.Size) 46 assert.Equal(t, float32(0.618), arg.Pmem) 47 // ... use arg 48 } 49 50 // Usage is optional for customized show. 51 func (a Arg) Usage() string { 52 return fmt.Sprintf(` 53 Usage of pcap (%s): 54 -i string HTTP port to capture, or BPF, or pcap file 55 -v Show version 56 `, a.VersionInfo()) 57 } 58 59 // VersionInfo is optional for customized version. 60 func (a Arg) VersionInfo() string { return "v0.0.2 2021-05-19 08:33:18" }