1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
package program
import (
"fmt"
"testing"
"github.com/elves/elvish/program/shell"
"github.com/elves/elvish/program/web"
)
var findProgramTests = []struct {
args []string
checker func(Program) bool
}{
{[]string{"-help"}, isShowHelp},
{[]string{"-version"}, isShowVersion},
{[]string{"-buildinfo"}, isShowBuildInfo},
{[]string{"-buildinfo", "-json"}, func(p Program) bool {
return p.(ShowBuildInfo).JSON
}},
{[]string{}, isShell},
{[]string{"-c", "echo"}, func(p Program) bool {
return p.(*shell.Shell).Cmd
}},
{[]string{"-compileonly"}, func(p Program) bool {
return p.(*shell.Shell).CompileOnly
}},
{[]string{"-web"}, isWeb},
{[]string{"-web", "x"}, isShowCorrectUsage},
{[]string{"-web", "-c"}, isShowCorrectUsage},
{[]string{"-web", "-port", "233"}, func(p Program) bool {
return p.(*web.Web).Port == 233
}},
{[]string{"-daemon"}, isDaemon},
{[]string{"-daemon", "x"}, isShowCorrectUsage},
{[]string{"-bin", "/elvish"}, func(p Program) bool {
return p.(*shell.Shell).BinPath == "/elvish"
}},
{[]string{"-db", "/db"}, func(p Program) bool {
return p.(*shell.Shell).DbPath == "/db"
}},
{[]string{"-sock", "/sock"}, func(p Program) bool {
return p.(*shell.Shell).SockPath == "/sock"
}},
{[]string{"-web", "-bin", "/elvish"}, func(p Program) bool {
return p.(*web.Web).BinPath == "/elvish"
}},
{[]string{"-web", "-db", "/db"}, func(p Program) bool {
return p.(*web.Web).DbPath == "/db"
}},
{[]string{"-web", "-sock", "/sock"}, func(p Program) bool {
return p.(*web.Web).SockPath == "/sock"
}},
{[]string{"-daemon", "-bin", "/elvish"}, func(p Program) bool {
return p.(Daemon).inner.BinPath == "/elvish"
}},
{[]string{"-daemon", "-db", "/db"}, func(p Program) bool {
return p.(Daemon).inner.DbPath == "/db"
}},
{[]string{"-daemon", "-sock", "/sock"}, func(p Program) bool {
return p.(Daemon).inner.SockPath == "/sock"
}},
}
func isShowHelp(p Program) bool { _, ok := p.(ShowHelp); return ok }
func isShowCorrectUsage(p Program) bool { _, ok := p.(ShowCorrectUsage); return ok }
func isShowVersion(p Program) bool { _, ok := p.(ShowVersion); return ok }
func isShowBuildInfo(p Program) bool { _, ok := p.(ShowBuildInfo); return ok }
func isDaemon(p Program) bool { _, ok := p.(Daemon); return ok }
func isWeb(p Program) bool { _, ok := p.(*web.Web); return ok }
func isShell(p Program) bool { _, ok := p.(*shell.Shell); return ok }
func TestFindProgram(t *testing.T) {
for i, test := range findProgramTests {
f := parse(test.args)
p := FindProgram(f)
if !test.checker(p) {
t.Errorf("test #%d (args = %q) failed", i, test.args)
}
}
}
func parse(args []string) *flagSet {
f := newFlagSet()
err := f.Parse(args)
if err != nil {
panic(fmt.Sprintln("bad flags in test", args))
}
return f
}
|