github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/testhelpers/commands/runner.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/cloudfoundry/cli/cf/command_registry"
     8  	"github.com/cloudfoundry/cli/flags"
     9  	testreq "github.com/cloudfoundry/cli/testhelpers/requirements"
    10  	testterm "github.com/cloudfoundry/cli/testhelpers/terminal"
    11  )
    12  
    13  type RunCommandResult int
    14  
    15  const (
    16  	RunCommandResultSuccess            = iota
    17  	RunCommandResultFailed             = iota
    18  	RunCommandResultRequirementsFailed = iota
    19  )
    20  
    21  func RunCliCommand(cmdName string, args []string, requirementsFactory *testreq.FakeReqFactory, updateFunc func(bool), pluginCall bool) (passedRequirements bool) {
    22  	updateFunc(pluginCall)
    23  	cmd := command_registry.Commands.FindCommand(cmdName)
    24  	context := flags.NewFlagContext(cmd.MetaData().Flags)
    25  	context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing)
    26  	err := context.Parse(args...)
    27  	if err != nil {
    28  		fmt.Println("ERROR:", err)
    29  		os.Exit(1)
    30  	}
    31  
    32  	defer func() {
    33  		errMsg := recover()
    34  
    35  		if errMsg != nil && errMsg != testterm.QuietPanic {
    36  			panic(errMsg)
    37  		}
    38  	}()
    39  	requirements, err := cmd.Requirements(requirementsFactory, context)
    40  	if err != nil {
    41  		return false
    42  	}
    43  
    44  	for _, requirement := range requirements {
    45  		if !requirement.Execute() {
    46  			return false
    47  		}
    48  	}
    49  
    50  	passedRequirements = true
    51  
    52  	cmd.Execute(context)
    53  
    54  	return
    55  }
    56  
    57  func RunCliCommandWithoutDependency(cmdName string, args []string, requirementsFactory *testreq.FakeReqFactory) (passedRequirements bool) {
    58  	cmd := command_registry.Commands.FindCommand(cmdName)
    59  	context := flags.NewFlagContext(cmd.MetaData().Flags)
    60  	context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing)
    61  	err := context.Parse(args...)
    62  	if err != nil {
    63  		fmt.Println("ERROR:", err)
    64  		os.Exit(1)
    65  	}
    66  
    67  	defer func() {
    68  		errMsg := recover()
    69  
    70  		if errMsg != nil && errMsg != testterm.QuietPanic {
    71  			panic(errMsg)
    72  		}
    73  	}()
    74  	requirements, err := cmd.Requirements(requirementsFactory, context)
    75  	if err != nil {
    76  		return false
    77  	}
    78  
    79  	for _, requirement := range requirements {
    80  		if !requirement.Execute() {
    81  			return false
    82  		}
    83  	}
    84  
    85  	passedRequirements = true
    86  
    87  	cmd.Execute(context)
    88  
    89  	return
    90  }
    91  
    92  func RunCommandMoreBetter(cmdName string, args []string, requirementsFactory *testreq.FakeReqFactory, updateFunc func(bool), pluginCall bool) (result RunCommandResult) {
    93  	updateFunc(pluginCall)
    94  	cmd := command_registry.Commands.FindCommand(cmdName)
    95  	context := flags.NewFlagContext(cmd.MetaData().Flags)
    96  	context.SkipFlagParsing(cmd.MetaData().SkipFlagParsing)
    97  	err := context.Parse(args...)
    98  	if err != nil {
    99  		fmt.Println("ERROR:", err)
   100  		return RunCommandResultFailed
   101  	}
   102  
   103  	defer func() {
   104  		errMsg := recover()
   105  
   106  		if errMsg != nil && errMsg != testterm.QuietPanic {
   107  			panic(errMsg)
   108  		}
   109  
   110  		result = RunCommandResultFailed
   111  	}()
   112  	requirements, err := cmd.Requirements(requirementsFactory, context)
   113  	if err != nil {
   114  		return RunCommandResultRequirementsFailed
   115  	}
   116  
   117  	for _, requirement := range requirements {
   118  		if !requirement.Execute() {
   119  			return RunCommandResultRequirementsFailed
   120  		}
   121  	}
   122  
   123  	cmd.Execute(context)
   124  
   125  	return RunCommandResultSuccess
   126  }