12876: Pass commands through to ruby/python programs.
[arvados.git] / lib / cmd / cmd_test.go
index 2d9228a30b6746c600cc37ac4a8ce591fcc0d17b..d8a4861572341046dab556ade76a0cb4f2ffe342 100644 (file)
@@ -6,6 +6,7 @@ package cmd
 
 import (
        "bytes"
+       "flag"
        "fmt"
        "io"
        "strings"
@@ -24,18 +25,18 @@ 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, "")
@@ -45,19 +46,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`)
 }
 
-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"})
 }