JMS #4: Flag testing
This commit is contained in:
parent
3f76896c4f
commit
3119b075d6
25
cli_test.go
25
cli_test.go
@ -5,18 +5,35 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_SimpleCLIFlags(t *testing.T) {
|
func Test_SettingFlags(t *testing.T) {
|
||||||
Flags = []Flag{
|
Flags = []Flag{
|
||||||
StringFlag{"foo", "default", "a foo flag"},
|
StringFlag{"foo", "default", "a string flag"},
|
||||||
|
IntFlag{"bar", 42, "an int flag"},
|
||||||
|
BoolFlag{"bat", "a bool flag"},
|
||||||
}
|
}
|
||||||
Action = func(c *Context) {
|
Action = func(c *Context) {
|
||||||
expect(t, c.String("foo"), "hello world")
|
expect(t, c.String("foo"), "hello world")
|
||||||
|
expect(t, c.Int("bar"), 245)
|
||||||
|
expect(t, c.Bool("bat"), true)
|
||||||
}
|
}
|
||||||
Run([]string{ "command", "--foo", "hello world" })
|
Run([]string{"command", "--foo", "hello world", "--bar", "245", "--bat"})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helpers */
|
func Test_FlagDefaults(t *testing.T) {
|
||||||
|
Flags = []Flag{
|
||||||
|
StringFlag{"foo", "default", "a string flag"},
|
||||||
|
IntFlag{"bar", 42, "an int flag"},
|
||||||
|
BoolFlag{"bat", "a bool flag"},
|
||||||
|
}
|
||||||
|
Action = func(c *Context) {
|
||||||
|
expect(t, c.String("foo"), "default")
|
||||||
|
expect(t, c.Int("bar"), 42)
|
||||||
|
expect(t, c.Bool("bat"), false)
|
||||||
|
}
|
||||||
|
Run([]string{"command"})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test Helpers */
|
||||||
func expect(t *testing.T, a interface{}, b interface{}) {
|
func expect(t *testing.T, a interface{}, b interface{}) {
|
||||||
if a != b {
|
if a != b {
|
||||||
t.Errorf("Expected %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
|
t.Errorf("Expected %v (type %v) - Got %v (type %v)", b, reflect.TypeOf(b), a, reflect.TypeOf(a))
|
||||||
|
54
flag.go
54
flag.go
@ -8,25 +8,19 @@ type Flag interface {
|
|||||||
Apply(*flag.FlagSet)
|
Apply(*flag.FlagSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flagSet(flags []Flag) *flag.FlagSet {
|
||||||
|
set := flag.NewFlagSet(Name, flag.ExitOnError)
|
||||||
|
for _, f := range flags {
|
||||||
|
f.Apply(set)
|
||||||
|
}
|
||||||
|
return set
|
||||||
|
}
|
||||||
|
|
||||||
type BoolFlag struct {
|
type BoolFlag struct {
|
||||||
Name string
|
Name string
|
||||||
Usage string
|
Usage string
|
||||||
}
|
}
|
||||||
|
|
||||||
type StringFlag struct {
|
|
||||||
Name string
|
|
||||||
Value string
|
|
||||||
Usage string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f StringFlag) String() string {
|
|
||||||
return fmt.Sprintf("--%v 'string'\t%v", f.Name, f.Usage)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f StringFlag) Apply(set *flag.FlagSet) {
|
|
||||||
set.String(f.Name, f.Value, f.Usage)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f BoolFlag) String() string {
|
func (f BoolFlag) String() string {
|
||||||
return fmt.Sprintf("--%v\t%v", f.Name, f.Usage)
|
return fmt.Sprintf("--%v\t%v", f.Name, f.Usage)
|
||||||
}
|
}
|
||||||
@ -35,10 +29,30 @@ func (f BoolFlag) Apply(set *flag.FlagSet) {
|
|||||||
set.Bool(f.Name, false, f.Usage)
|
set.Bool(f.Name, false, f.Usage)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagSet(flags []Flag) *flag.FlagSet {
|
type StringFlag struct {
|
||||||
set := flag.NewFlagSet(Name, flag.ExitOnError)
|
Name string
|
||||||
for _, f := range flags {
|
Value string
|
||||||
f.Apply(set)
|
Usage string
|
||||||
}
|
}
|
||||||
return set
|
|
||||||
|
func (f StringFlag) String() string {
|
||||||
|
return fmt.Sprintf("--%v '%v'\t%v", f.Name, f.Value, f.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f StringFlag) Apply(set *flag.FlagSet) {
|
||||||
|
set.String(f.Name, f.Value, f.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
type IntFlag struct {
|
||||||
|
Name string
|
||||||
|
Value int
|
||||||
|
Usage string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f IntFlag) String() string {
|
||||||
|
return fmt.Sprintf("--%v '%v'\t%v", f.Name, f.Value, f.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f IntFlag) Apply(set *flag.FlagSet) {
|
||||||
|
set.Int(f.Name, f.Value, f.Usage)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user