summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/spf13/cobra/command_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/spf13/cobra/command_test.go')
-rw-r--r--vendor/github.com/spf13/cobra/command_test.go216
1 files changed, 216 insertions, 0 deletions
diff --git a/vendor/github.com/spf13/cobra/command_test.go b/vendor/github.com/spf13/cobra/command_test.go
new file mode 100644
index 000000000..7947f6c4a
--- /dev/null
+++ b/vendor/github.com/spf13/cobra/command_test.go
@@ -0,0 +1,216 @@
+package cobra
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "reflect"
+ "testing"
+)
+
+// test to ensure hidden commands run as intended
+func TestHiddenCommandExecutes(t *testing.T) {
+
+ // ensure that outs does not already equal what the command will be setting it
+ // to, if it did this test would not actually be testing anything...
+ if outs == "hidden" {
+ t.Errorf("outs should NOT EQUAL hidden")
+ }
+
+ cmdHidden.Execute()
+
+ // upon running the command, the value of outs should now be 'hidden'
+ if outs != "hidden" {
+ t.Errorf("Hidden command failed to run!")
+ }
+}
+
+// test to ensure hidden commands do not show up in usage/help text
+func TestHiddenCommandIsHidden(t *testing.T) {
+ if cmdHidden.IsAvailableCommand() {
+ t.Errorf("Hidden command found!")
+ }
+}
+
+func TestStripFlags(t *testing.T) {
+ tests := []struct {
+ input []string
+ output []string
+ }{
+ {
+ []string{"foo", "bar"},
+ []string{"foo", "bar"},
+ },
+ {
+ []string{"foo", "--bar", "-b"},
+ []string{"foo"},
+ },
+ {
+ []string{"-b", "foo", "--bar", "bar"},
+ []string{},
+ },
+ {
+ []string{"-i10", "echo"},
+ []string{"echo"},
+ },
+ {
+ []string{"-i=10", "echo"},
+ []string{"echo"},
+ },
+ {
+ []string{"--int=100", "echo"},
+ []string{"echo"},
+ },
+ {
+ []string{"-ib", "echo", "-bfoo", "baz"},
+ []string{"echo", "baz"},
+ },
+ {
+ []string{"-i=baz", "bar", "-i", "foo", "blah"},
+ []string{"bar", "blah"},
+ },
+ {
+ []string{"--int=baz", "-bbar", "-i", "foo", "blah"},
+ []string{"blah"},
+ },
+ {
+ []string{"--cat", "bar", "-i", "foo", "blah"},
+ []string{"bar", "blah"},
+ },
+ {
+ []string{"-c", "bar", "-i", "foo", "blah"},
+ []string{"bar", "blah"},
+ },
+ {
+ []string{"--persist", "bar"},
+ []string{"bar"},
+ },
+ {
+ []string{"-p", "bar"},
+ []string{"bar"},
+ },
+ }
+
+ cmdPrint := &Command{
+ Use: "print [string to print]",
+ Short: "Print anything to the screen",
+ Long: `an utterly useless command for testing.`,
+ Run: func(cmd *Command, args []string) {
+ tp = args
+ },
+ }
+
+ var flagi int
+ var flagstr string
+ var flagbool bool
+ cmdPrint.PersistentFlags().BoolVarP(&flagbool, "persist", "p", false, "help for persistent one")
+ cmdPrint.Flags().IntVarP(&flagi, "int", "i", 345, "help message for flag int")
+ cmdPrint.Flags().StringVarP(&flagstr, "bar", "b", "bar", "help message for flag string")
+ cmdPrint.Flags().BoolVarP(&flagbool, "cat", "c", false, "help message for flag bool")
+
+ for _, test := range tests {
+ output := stripFlags(test.input, cmdPrint)
+ if !reflect.DeepEqual(test.output, output) {
+ t.Errorf("expected: %v, got: %v", test.output, output)
+ }
+ }
+}
+
+func Test_DisableFlagParsing(t *testing.T) {
+ as := []string{"-v", "-race", "-file", "foo.go"}
+ targs := []string{}
+ cmdPrint := &Command{
+ DisableFlagParsing: true,
+ Run: func(cmd *Command, args []string) {
+ targs = args
+ },
+ }
+ osargs := []string{"cmd"}
+ os.Args = append(osargs, as...)
+ err := cmdPrint.Execute()
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(as, targs) {
+ t.Errorf("expected: %v, got: %v", as, targs)
+ }
+}
+
+func TestInitHelpFlagMergesFlags(t *testing.T) {
+ usage := "custom flag"
+ baseCmd := Command{Use: "testcmd"}
+ baseCmd.PersistentFlags().Bool("help", false, usage)
+ cmd := Command{Use: "do"}
+ baseCmd.AddCommand(&cmd)
+
+ cmd.initHelpFlag()
+ actual := cmd.Flags().Lookup("help").Usage
+ if actual != usage {
+ t.Fatalf("Expected the help flag from the base command with usage '%s', but got the default with usage '%s'", usage, actual)
+ }
+}
+
+func TestCommandsAreSorted(t *testing.T) {
+ EnableCommandSorting = true
+
+ originalNames := []string{"middle", "zlast", "afirst"}
+ expectedNames := []string{"afirst", "middle", "zlast"}
+
+ var tmpCommand = &Command{Use: "tmp"}
+
+ for _, name := range originalNames {
+ tmpCommand.AddCommand(&Command{Use: name})
+ }
+
+ for i, c := range tmpCommand.Commands() {
+ if expectedNames[i] != c.Name() {
+ t.Errorf("expected: %s, got: %s", expectedNames[i], c.Name())
+ }
+ }
+
+ EnableCommandSorting = true
+}
+
+func TestEnableCommandSortingIsDisabled(t *testing.T) {
+ EnableCommandSorting = false
+
+ originalNames := []string{"middle", "zlast", "afirst"}
+
+ var tmpCommand = &Command{Use: "tmp"}
+
+ for _, name := range originalNames {
+ tmpCommand.AddCommand(&Command{Use: name})
+ }
+
+ for i, c := range tmpCommand.Commands() {
+ if originalNames[i] != c.Name() {
+ t.Errorf("expected: %s, got: %s", originalNames[i], c.Name())
+ }
+ }
+
+ EnableCommandSorting = true
+}
+
+func TestFlagErrorFunc(t *testing.T) {
+
+ cmd := &Command{
+ Use: "print",
+ RunE: func(cmd *Command, args []string) error {
+ return nil
+ },
+ }
+ expectedFmt := "This is expected: %s"
+
+ cmd.SetFlagErrorFunc(func(c *Command, err error) error {
+ return fmt.Errorf(expectedFmt, err)
+ })
+ cmd.SetArgs([]string{"--bogus-flag"})
+ cmd.SetOutput(new(bytes.Buffer))
+
+ err := cmd.Execute()
+
+ expected := fmt.Sprintf(expectedFmt, "unknown flag: --bogus-flag")
+ if err.Error() != expected {
+ t.Errorf("expected %v, got %v", expected, err.Error())
+ }
+}