Add more tests

master
Ivan Klymenchenko 4 years ago
parent 664cc0b6be
commit ac8b4247ce

@ -28,6 +28,12 @@ const (
DebugUsage = "Print all commands to ~/.config/smug/smug.log" DebugUsage = "Print all commands to ~/.config/smug/smug.log"
) )
// Creates a new FlagSet.
// Moved it to a variable to be able to override it in the tests.
var NewFlagSet = func(cmd string) *pflag.FlagSet {
return pflag.NewFlagSet(cmd, pflag.ContinueOnError)
}
func ParseOptions(argv []string, helpRequested func()) (Options, error) { func ParseOptions(argv []string, helpRequested func()) (Options, error) {
if len(argv) < 2 { if len(argv) < 2 {
helpRequested() helpRequested()
@ -37,7 +43,8 @@ func ParseOptions(argv []string, helpRequested func()) (Options, error) {
cmd := argv[0] cmd := argv[0]
project := argv[1] project := argv[1]
flags := pflag.NewFlagSet(cmd, 0) flags := NewFlagSet(cmd)
windows := flags.StringArrayP("windows", "w", []string{}, WindowsUsage) windows := flags.StringArrayP("windows", "w", []string{}, WindowsUsage)
attach := flags.BoolP("attach", "a", false, AttachUsage) attach := flags.BoolP("attach", "a", false, AttachUsage)
debug := flags.BoolP("debug", "d", false, DebugUsage) debug := flags.BoolP("debug", "d", false, DebugUsage)

@ -3,44 +3,87 @@ package main
import ( import (
"reflect" "reflect"
"testing" "testing"
"github.com/spf13/pflag"
) )
var usageTestTable = []struct { var usageTestTable = []struct {
argv []string argv []string
opts Options opts Options
err error
helpCalls int
}{ }{
{ {
[]string{"start", "smug"}, []string{"start", "smug"},
Options{"start", "smug", []string{}, false, false}, Options{"start", "smug", []string{}, false, false},
nil,
0,
}, },
{ {
[]string{"start", "smug", "-w", "foo"}, []string{"start", "smug", "-w", "foo"},
Options{"start", "smug", []string{"foo"}, false, false}, Options{"start", "smug", []string{"foo"}, false, false},
nil,
0,
}, },
{ {
[]string{"start", "smug:foo,bar"}, []string{"start", "smug:foo,bar"},
Options{"start", "smug", []string{"foo", "bar"}, false, false}, Options{"start", "smug", []string{"foo", "bar"}, false, false},
nil,
0,
}, },
{ {
[]string{"start", "smug", "--attach", "--debug"}, []string{"start", "smug", "--attach", "--debug"},
Options{"start", "smug", []string{}, true, true}, Options{"start", "smug", []string{}, true, true},
nil,
0,
}, },
{ {
[]string{"start", "smug", "-ad"}, []string{"start", "smug", "-ad"},
Options{"start", "smug", []string{}, true, true}, Options{"start", "smug", []string{}, true, true},
nil,
0,
},
{
[]string{"start"},
Options{},
ErrHelp,
1,
},
{
[]string{"start", "--help"},
Options{},
ErrHelp,
1,
}, },
} }
func TestParseOptions(t *testing.T) { func TestParseOptions(t *testing.T) {
for _, v := range usageTestTable { helpCalls := 0
opts, err := ParseOptions(v.argv, func() {}) helpRequested := func() {
helpCalls++
}
if err != nil { NewFlagSet = func(cmd string) *pflag.FlagSet {
t.Fail() flagSet := pflag.NewFlagSet(cmd, pflag.ContinueOnError)
} flagSet.Usage = helpRequested
return flagSet
}
for _, v := range usageTestTable {
opts, err := ParseOptions(v.argv, helpRequested)
if !reflect.DeepEqual(v.opts, opts) { if !reflect.DeepEqual(v.opts, opts) {
t.Errorf("expected struct %v, got %v", v.opts, opts) t.Errorf("expected struct %v, got %v", v.opts, opts)
} }
if helpCalls != v.helpCalls {
t.Errorf("expected to get %d help calls, got %d", v.helpCalls, helpCalls)
}
if err != v.err {
t.Errorf("expected to get error %v, got %v", v.err, err)
}
helpCalls = 0
} }
} }

Loading…
Cancel
Save