X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e7f41c4af1298b91106f9b1d8fb87a68e46a3f64..a84ab41802835786e188b11e61f64f0db16d54c1:/lib/cmd/cmd_test.go diff --git a/lib/cmd/cmd_test.go b/lib/cmd/cmd_test.go index 2d9228a30b..2d03722adc 100644 --- a/lib/cmd/cmd_test.go +++ b/lib/cmd/cmd_test.go @@ -6,12 +6,13 @@ package cmd import ( "bytes" + "flag" "fmt" "io" "strings" "testing" - "git.curoverse.com/arvados.git/lib/cmdtest" + "git.arvados.org/arvados.git/lib/cmdtest" check "gopkg.in/check.v1" ) @@ -24,18 +25,28 @@ var _ = check.Suite(&CmdSuite{}) type CmdSuite struct{} -var testCmd = Multi(map[string]RunFunc{ - "echo": func(prog string, args []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) int { +var testCmd = Multi(map[string]Handler{ + "echo": HandlerFunc(func(prog string, args []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) int { fmt.Fprintln(stdout, strings.Join(args, " ")) return 0 - }, + }), }) func (s *CmdSuite) TestHello(c *check.C) { defer cmdtest.LeakCheck(c)() stdout := bytes.NewBuffer(nil) stderr := bytes.NewBuffer(nil) - exited := testCmd("prog", []string{"echo", "hello", "world"}, bytes.NewReader(nil), stdout, stderr) + exited := testCmd.RunCommand("prog", []string{"echo", "hello", "world"}, bytes.NewReader(nil), stdout, stderr) + c.Check(exited, check.Equals, 0) + c.Check(stdout.String(), check.Equals, "hello world\n") + c.Check(stderr.String(), check.Equals, "") +} + +func (s *CmdSuite) TestHelloViaProg(c *check.C) { + defer cmdtest.LeakCheck(c)() + stdout := bytes.NewBuffer(nil) + stderr := bytes.NewBuffer(nil) + exited := testCmd.RunCommand("/usr/local/bin/echo", []string{"hello", "world"}, bytes.NewReader(nil), stdout, stderr) c.Check(exited, check.Equals, 0) c.Check(stdout.String(), check.Equals, "hello world\n") c.Check(stderr.String(), check.Equals, "") @@ -45,19 +56,17 @@ func (s *CmdSuite) TestUsage(c *check.C) { defer cmdtest.LeakCheck(c)() stdout := bytes.NewBuffer(nil) stderr := bytes.NewBuffer(nil) - exited := testCmd("prog", []string{"nosuchcommand", "hi"}, bytes.NewReader(nil), stdout, stderr) + exited := testCmd.RunCommand("prog", []string{"nosuchcommand", "hi"}, bytes.NewReader(nil), stdout, stderr) c.Check(exited, check.Equals, 2) c.Check(stdout.String(), check.Equals, "") - c.Check(stderr.String(), check.Matches, `(?ms)^unrecognized command "nosuchcommand"\n.*echo.*\n`) + c.Check(stderr.String(), check.Matches, `(?ms)^prog: unrecognized command "nosuchcommand"\n.*echo.*\n`) } -func (s *CmdSuite) TestWithLateSubcommand(c *check.C) { +func (s *CmdSuite) TestSubcommandToFront(c *check.C) { defer cmdtest.LeakCheck(c)() - stdout := bytes.NewBuffer(nil) - stderr := bytes.NewBuffer(nil) - run := WithLateSubcommand(testCmd, []string{"format", "f"}, []string{"n"}) - exited := run("prog", []string{"--format=yaml", "-n", "-format", "beep", "echo", "hi"}, bytes.NewReader(nil), stdout, stderr) - c.Check(exited, check.Equals, 0) - c.Check(stdout.String(), check.Equals, "--format=yaml -n -format beep hi\n") - c.Check(stderr.String(), check.Equals, "") + flags := flag.NewFlagSet("", flag.ContinueOnError) + flags.String("format", "json", "") + flags.Bool("n", false, "") + args := SubcommandToFront([]string{"--format=yaml", "-n", "-format", "beep", "echo", "hi"}, flags) + c.Check(args, check.DeepEquals, []string{"echo", "--format=yaml", "-n", "-format", "beep", "hi"}) }