func (cmd *Help) Execute(c flags.FlagContext) error { if len(c.Args()) == 0 { help.ShowHelp(cmd.ui.Writer(), help.GetHelpTemplate()) } else { cmdName := c.Args()[0] if commandregistry.Commands.CommandExists(cmdName) { cmd.ui.Say(commandregistry.Commands.CommandUsage(cmdName)) } else { //check plugin commands found := false for _, meta := range cmd.config.Plugins() { for _, c := range meta.Commands { if c.Name == cmdName || c.Alias == cmdName { output := T("NAME:") + "\n" output += " " + c.Name + " - " + c.HelpText + "\n" if c.Alias != "" { output += "\n" + T("ALIAS:") + "\n" output += " " + c.Alias + "\n" } output += "\n" + T("USAGE:") + "\n" output += " " + c.UsageDetails.Usage + "\n" if len(c.UsageDetails.Options) > 0 { output += "\n" + T("OPTIONS:") + "\n" //find longest name length l := 0 for n := range c.UsageDetails.Options { if len(n) > l { l = len(n) } } for n, f := range c.UsageDetails.Options { output += " -" + n + strings.Repeat(" ", 7+(l-len(n))) + f + "\n" } } cmd.ui.Say(output) found = true } } } if !found { return errors.New("'" + cmdName + "' is not a registered command. See 'cf help'") } } } return nil }
var buffer *gbytes.Buffer BeforeEach(func() { buffer = gbytes.NewBuffer() }) AfterEach(func() { buffer.Close() }) It("shows help for all commands", func() { dummyTemplate := ` {{range .Commands}}{{range .CommandSubGroups}}{{range .}} {{.Name}} {{end}}{{end}}{{end}} ` help.ShowHelp(buffer, dummyTemplate) Expect(buffer).To(gbytes.Say("login")) for _, metadata := range commandregistry.Commands.Metadatas() { if metadata.Hidden { continue } Expect(buffer.Contents()).To(ContainSubstring(metadata.Name)) } }) It("shows help for all installed plugin's commands", func() { confighelpers.PluginRepoDir = func() string { return filepath.Join("..", "..", "fixtures", "config", "help-plugin-test-config") }