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 }