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" }