A flags_test.go
This commit is contained in:
parent
af3fb9f552
commit
8e7daebb18
1 changed files with 85 additions and 0 deletions
85
flags/flags_test.go
Normal file
85
flags/flags_test.go
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
package flags
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
CMD = "TEST"
|
||||
SUMMARY = "SUMMARY"
|
||||
)
|
||||
|
||||
type options struct {
|
||||
Descriptor Arg
|
||||
Tags Arg
|
||||
Source String
|
||||
Write Bool
|
||||
Help Bool
|
||||
}
|
||||
|
||||
func initOpts() options {
|
||||
return options{
|
||||
Arg{"", "midfix file descriptor"},
|
||||
Arg{"", "tags to add to new file"},
|
||||
String{"--source", "-s", "", "path to source list. reads from stdin if omitted."},
|
||||
Bool{"--write", "-w", false, "write sorted list back to --key file"},
|
||||
Bool{"--help", "-h", false, "show help"},
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArgsInternal(t *testing.T) {
|
||||
flags := []Flag{
|
||||
&Arg{"", "midfix file descriptor"},
|
||||
&Arg{"", "tags to add to new file"},
|
||||
&String{"--source", "-s", "", "path to source list. reads from stdin if omitted."},
|
||||
&Bool{"--write", "-w", false, "write sorted list back to --key file"},
|
||||
&Bool{"--help", "-h", false, "show help"},
|
||||
}
|
||||
args := []string{"--source", "foo"}
|
||||
parseArgsInternal(CMD, SUMMARY, args, initOpts(), flags)
|
||||
assert.False(t, flags[0].IsSet())
|
||||
assert.False(t, flags[0].IsHelp())
|
||||
assert.True(t, flags[2].IsSet())
|
||||
assert.True(t, flags[4].IsHelp())
|
||||
|
||||
}
|
||||
|
||||
// TODO: return errors from Help routines and print at top level, so I can test those cases
|
||||
func TestParseArgsString(t *testing.T) {
|
||||
args := []string{"--source", "foo"}
|
||||
opts := initOpts()
|
||||
ParseArgs(CMD, SUMMARY, args, &opts)
|
||||
assert.Equal(t, opts.Source.Val, "foo")
|
||||
}
|
||||
|
||||
func TestParseArgs(t *testing.T) {
|
||||
opts := initOpts()
|
||||
cases := []struct {
|
||||
name string
|
||||
args []string
|
||||
stringVal *string
|
||||
stringWant string
|
||||
boolVal *bool
|
||||
boolWant bool
|
||||
}{
|
||||
{"arg", []string{"bar"}, &opts.Descriptor.Val, "bar", nil, false},
|
||||
{"arg arg", []string{"bar", "foo"}, &opts.Tags.Val, "foo", nil, false},
|
||||
{"--bool", []string{"--write"}, nil, "", &opts.Write.Val, true},
|
||||
{"arg --bool", []string{"foo", "--write"}, &opts.Descriptor.Val, "foo", &opts.Write.Val, true},
|
||||
{"--flag val", []string{"--source", "foo"}, &opts.Source.Val, "foo", nil, false},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
ParseArgs(CMD, SUMMARY, tc.args, &opts)
|
||||
if tc.boolVal != nil {
|
||||
assert.True(t, *tc.boolVal)
|
||||
}
|
||||
if tc.stringVal != nil {
|
||||
assert.Equal(t, *tc.stringVal, tc.stringWant)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue