github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/util/testhelpers/commands/runner.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"code.cloudfoundry.org/cli/cf/commandregistry"
     8  	"code.cloudfoundry.org/cli/cf/flags"
     9  	"code.cloudfoundry.org/cli/cf/requirements"
    10  	testterm "code.cloudfoundry.org/cli/util/testhelpers/terminal"
    11  )
    12  
    13  type RunCommandResult int
    14  
    15  const (
    16  	RunCommandResultSuccess = iota
    17  )
    18  
    19  func RunCLICommand(cmdName string, args []string, requirementsFactory requirements.Factory, updateFunc func(bool), pluginCall bool, ui *testterm.FakeUI) bool {
    20  	updateFunc(pluginCall)
    21  	cmd := commandregistry.Commands.FindCommand(cmdName)
    22  	context := flags.NewFlagContext(cmd.MetaData().Flags)
    23  	context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing)
    24  	err := context.Parse(args...)
    25  	if err != nil {
    26  		fmt.Println("ERROR:", err)
    27  		os.Exit(1)
    28  	}
    29  
    30  	var requirements []requirements.Requirement
    31  	requirements, err = cmd.Requirements(requirementsFactory, context)
    32  	if err != nil {
    33  		return false
    34  	}
    35  	for _, requirement := range requirements {
    36  		if err = requirement.Execute(); err != nil {
    37  			return false
    38  		}
    39  	}
    40  
    41  	err = cmd.Execute(context)
    42  	if err != nil {
    43  		ui.Failed(err.Error())
    44  		return false
    45  	}
    46  
    47  	return true
    48  }
    49  
    50  func RunCLICommandWithoutDependency(cmdName string, args []string, requirementsFactory requirements.Factory, ui *testterm.FakeUI) bool {
    51  	cmd := commandregistry.Commands.FindCommand(cmdName)
    52  	context := flags.NewFlagContext(cmd.MetaData().Flags)
    53  	context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing)
    54  	err := context.Parse(args...)
    55  	if err != nil {
    56  		fmt.Println("ERROR:", err)
    57  		os.Exit(1)
    58  	}
    59  
    60  	defer func() {
    61  		errMsg := recover()
    62  
    63  		if errMsg != nil {
    64  			panic(errMsg)
    65  		}
    66  	}()
    67  
    68  	requirements, err := cmd.Requirements(requirementsFactory, context)
    69  	if err != nil {
    70  		return false
    71  	}
    72  
    73  	for _, requirement := range requirements {
    74  		if err = requirement.Execute(); err != nil {
    75  			return false
    76  		}
    77  	}
    78  
    79  	err = cmd.Execute(context)
    80  	if err != nil {
    81  		ui.Failed(err.Error())
    82  	}
    83  
    84  	return true
    85  }