Merge pull request #192 from apriendeau/executeC
Creates the ExecuteC function while maintaining Execute signature
This commit is contained in:
		@ -248,6 +248,18 @@ func simpleTester(c *Command, input string) resulter {
 | 
				
			|||||||
	return resulter{err, output, c}
 | 
						return resulter{err, output, c}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func simpleTesterC(c *Command, input string) resulter {
 | 
				
			||||||
 | 
						buf := new(bytes.Buffer)
 | 
				
			||||||
 | 
						// Testing flag with invalid input
 | 
				
			||||||
 | 
						c.SetOutput(buf)
 | 
				
			||||||
 | 
						c.SetArgs(strings.Split(input, " "))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmd, err := c.ExecuteC()
 | 
				
			||||||
 | 
						output := buf.String()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return resulter{err, output, cmd}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func fullTester(c *Command, input string) resulter {
 | 
					func fullTester(c *Command, input string) resulter {
 | 
				
			||||||
	buf := new(bytes.Buffer)
 | 
						buf := new(bytes.Buffer)
 | 
				
			||||||
	// Testing flag with invalid input
 | 
						// Testing flag with invalid input
 | 
				
			||||||
@ -561,6 +573,41 @@ func TestInvalidSubcommandFlags(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestSubcommandExecuteC(t *testing.T) {
 | 
				
			||||||
 | 
						cmd := initializeWithRootCmd()
 | 
				
			||||||
 | 
						double := &Command{
 | 
				
			||||||
 | 
							Use: "double message",
 | 
				
			||||||
 | 
							Run: func(c *Command, args []string) {
 | 
				
			||||||
 | 
								msg := strings.Join(args, " ")
 | 
				
			||||||
 | 
								c.Println(msg, msg)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echo := &Command{
 | 
				
			||||||
 | 
							Use: "echo message",
 | 
				
			||||||
 | 
							Run: func(c *Command, args []string) {
 | 
				
			||||||
 | 
								msg := strings.Join(args, " ")
 | 
				
			||||||
 | 
								c.Println(msg, msg)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmd.AddCommand(double, echo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result := simpleTesterC(cmd, "double hello world")
 | 
				
			||||||
 | 
						checkResultContains(t, result, "hello world hello world")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if result.Command.Name() != "double" {
 | 
				
			||||||
 | 
							t.Errorf("invalid cmd returned from ExecuteC: should be 'double' but got %s", result.Command.Name())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result = simpleTesterC(cmd, "echo msg to be echoed")
 | 
				
			||||||
 | 
						checkResultContains(t, result, "msg to be echoed")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if result.Command.Name() != "echo" {
 | 
				
			||||||
 | 
							t.Errorf("invalid cmd returned from ExecuteC: should be 'echo' but got %s", result.Command.Name())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSubcommandArgEvaluation(t *testing.T) {
 | 
					func TestSubcommandArgEvaluation(t *testing.T) {
 | 
				
			||||||
	cmd := initializeWithRootCmd()
 | 
						cmd := initializeWithRootCmd()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								command.go
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								command.go
									
									
									
									
									
								
							@ -614,11 +614,16 @@ func (c *Command) errorMsgFromParse() string {
 | 
				
			|||||||
// Call execute to use the args (os.Args[1:] by default)
 | 
					// Call execute to use the args (os.Args[1:] by default)
 | 
				
			||||||
// and run through the command tree finding appropriate matches
 | 
					// and run through the command tree finding appropriate matches
 | 
				
			||||||
// for commands and then corresponding flags.
 | 
					// for commands and then corresponding flags.
 | 
				
			||||||
func (c *Command) Execute() (err error) {
 | 
					func (c *Command) Execute() error {
 | 
				
			||||||
 | 
						_, err := c.ExecuteC()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *Command) ExecuteC() (cmd *Command, err error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Regardless of what command execute is called on, run on Root only
 | 
						// Regardless of what command execute is called on, run on Root only
 | 
				
			||||||
	if c.HasParent() {
 | 
						if c.HasParent() {
 | 
				
			||||||
		return c.Root().Execute()
 | 
							return c.Root().ExecuteC()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if EnableWindowsMouseTrap && runtime.GOOS == "windows" {
 | 
						if EnableWindowsMouseTrap && runtime.GOOS == "windows" {
 | 
				
			||||||
@ -652,9 +657,8 @@ func (c *Command) Execute() (err error) {
 | 
				
			|||||||
			c.Println("Error:", err.Error())
 | 
								c.Println("Error:", err.Error())
 | 
				
			||||||
			c.Printf("Run '%v --help' for usage.\n", c.CommandPath())
 | 
								c.Printf("Run '%v --help' for usage.\n", c.CommandPath())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return err
 | 
							return c, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = cmd.execute(flags)
 | 
						err = cmd.execute(flags)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// If root command has SilentErrors flagged,
 | 
							// If root command has SilentErrors flagged,
 | 
				
			||||||
@ -662,7 +666,7 @@ func (c *Command) Execute() (err error) {
 | 
				
			|||||||
		if !cmd.SilenceErrors && !c.SilenceErrors {
 | 
							if !cmd.SilenceErrors && !c.SilenceErrors {
 | 
				
			||||||
			if err == flag.ErrHelp {
 | 
								if err == flag.ErrHelp {
 | 
				
			||||||
				cmd.HelpFunc()(cmd, args)
 | 
									cmd.HelpFunc()(cmd, args)
 | 
				
			||||||
				return nil
 | 
									return cmd, nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			c.Println("Error:", err.Error())
 | 
								c.Println("Error:", err.Error())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -672,9 +676,9 @@ func (c *Command) Execute() (err error) {
 | 
				
			|||||||
		if !cmd.SilenceUsage && !c.SilenceUsage {
 | 
							if !cmd.SilenceUsage && !c.SilenceUsage {
 | 
				
			||||||
			c.Println(cmd.UsageString())
 | 
								c.Println(cmd.UsageString())
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return err
 | 
							return cmd, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return
 | 
						return cmd, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Command) initHelpFlag() {
 | 
					func (c *Command) initHelpFlag() {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user