github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/testhelpers/commands/runner.go (about)

     1  package commands
     2  
     3  import (
     4  	"github.com/cloudfoundry/cli/cf/command"
     5  	testreq "github.com/cloudfoundry/cli/testhelpers/requirements"
     6  	testterm "github.com/cloudfoundry/cli/testhelpers/terminal"
     7  )
     8  
     9  type RunCommandResult int
    10  
    11  const (
    12  	RunCommandResultSuccess            = iota
    13  	RunCommandResultFailed             = iota
    14  	RunCommandResultRequirementsFailed = iota
    15  )
    16  
    17  func RunCommand(cmd command.Command, args []string, requirementsFactory *testreq.FakeReqFactory) (passedRequirements bool) {
    18  	context := NewContext(cmd.Metadata().Name, args)
    19  
    20  	defer func() {
    21  		errMsg := recover()
    22  
    23  		if errMsg != nil && errMsg != testterm.QuietPanic {
    24  			panic(errMsg)
    25  		}
    26  	}()
    27  
    28  	requirements, err := cmd.GetRequirements(requirementsFactory, context)
    29  	if err != nil {
    30  		return
    31  	}
    32  
    33  	for _, requirement := range requirements {
    34  		success := requirement.Execute()
    35  		if !success {
    36  			return
    37  		}
    38  	}
    39  
    40  	passedRequirements = true
    41  	cmd.Run(context)
    42  
    43  	return
    44  }
    45  
    46  func RunCommandMoreBetter(cmd command.Command, requirementsFactory *testreq.FakeReqFactory, args ...string) (result RunCommandResult) {
    47  	defer func() {
    48  		errMsg := recover()
    49  		if errMsg == nil {
    50  			return
    51  		}
    52  
    53  		if errMsg != nil && errMsg != testterm.QuietPanic {
    54  			panic(errMsg)
    55  		}
    56  
    57  		result = RunCommandResultFailed
    58  	}()
    59  
    60  	context := NewContext(cmd.Metadata().Name, args)
    61  	requirements, err := cmd.GetRequirements(requirementsFactory, context)
    62  	if err != nil {
    63  		return RunCommandResultRequirementsFailed
    64  	}
    65  
    66  	for _, requirement := range requirements {
    67  		success := requirement.Execute()
    68  		if !success {
    69  			return RunCommandResultRequirementsFailed
    70  		}
    71  	}
    72  
    73  	cmd.Run(context)
    74  
    75  	return RunCommandResultSuccess
    76  }