Skip to content

Commit

Permalink
Merge pull request spf13#230 from garthk/fix-man-see-also
Browse files Browse the repository at this point in the history
Ensure SEE ALSO list has no leading comma.
  • Loading branch information
eparis committed Mar 22, 2016
2 parents 57021c6 + 57f4732 commit 966e604
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 7 deletions.
14 changes: 7 additions & 7 deletions doc/man_docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,12 @@ func genMan(cmd *cobra.Command, header *GenManHeader) []byte {
}
if hasSeeAlso(cmd) {
fmt.Fprintf(buf, "# SEE ALSO\n")
seealsos := make([]string, 0)
if cmd.HasParent() {
parentPath := cmd.Parent().CommandPath()
dashParentPath := strings.Replace(parentPath, " ", "-", -1)
fmt.Fprintf(buf, "**%s(%s)**", dashParentPath, header.Section)
seealso := fmt.Sprintf("**%s(%s)**", dashParentPath, header.Section)
seealsos = append(seealsos, seealso)
cmd.VisitParents(func(c *cobra.Command) {
if c.DisableAutoGenTag {
cmd.DisableAutoGenTag = c.DisableAutoGenTag
Expand All @@ -200,16 +202,14 @@ func genMan(cmd *cobra.Command, header *GenManHeader) []byte {
}
children := cmd.Commands()
sort.Sort(byName(children))
for i, c := range children {
for _, c := range children {
if !c.IsAvailableCommand() || c.IsHelpCommand() {
continue
}
if cmd.HasParent() || i > 0 {
fmt.Fprintf(buf, ", ")
}
fmt.Fprintf(buf, "**%s-%s(%s)**", dashCommandName, c.Name(), header.Section)
seealso := fmt.Sprintf("**%s-%s(%s)**", dashCommandName, c.Name(), header.Section)
seealsos = append(seealsos, seealso)
}
fmt.Fprintf(buf, "\n")
fmt.Fprintf(buf, "%s\n", strings.Join(seealsos, ", "))
}
if !cmd.DisableAutoGenTag {
fmt.Fprintf(buf, "# HISTORY\n%s Auto generated by spf13/cobra\n", header.Date.Format("2-Jan-2006"))
Expand Down
65 changes: 65 additions & 0 deletions doc/man_docs_test.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package doc

import (
"bufio"
"bytes"
"fmt"
"os"
"strings"
"testing"

"github.com/spf13/cobra"
)

var _ = fmt.Println
Expand Down Expand Up @@ -95,3 +98,65 @@ func TestGenManNoGenTag(t *testing.T) {
unexpected := translate("#HISTORY")
checkStringOmits(t, found, unexpected)
}

func TestGenManSeeAlso(t *testing.T) {
noop := func(cmd *cobra.Command, args []string) {}

top := &cobra.Command{Use: "top", Run: noop}
aaa := &cobra.Command{Use: "aaa", Run: noop, Hidden: true} // #229
bbb := &cobra.Command{Use: "bbb", Run: noop}
ccc := &cobra.Command{Use: "ccc", Run: noop}
top.AddCommand(aaa, bbb, ccc)

out := new(bytes.Buffer)
header := &GenManHeader{}
if err := GenMan(top, header, out); err != nil {
t.Fatal(err)
}

scanner := bufio.NewScanner(out)

if err := AssertLineFound(scanner, ".SH SEE ALSO"); err != nil {
t.Fatal(fmt.Errorf("Couldn't find SEE ALSO section header: %s", err.Error()))
}

if err := AssertNextLineEquals(scanner, ".PP"); err != nil {
t.Fatal(fmt.Errorf("First line after SEE ALSO wasn't break-indent: %s", err.Error()))
}

if err := AssertNextLineEquals(scanner, `\fBtop\-bbb(1)\fP, \fBtop\-ccc(1)\fP`); err != nil {
t.Fatal(fmt.Errorf("Second line after SEE ALSO wasn't correct: %s", err.Error()))
}
}

func AssertLineFound(scanner *bufio.Scanner, expectedLine string) error {
for scanner.Scan() {
line := scanner.Text()
if line == expectedLine {
return nil
}
}

if err := scanner.Err(); err != nil {
return fmt.Errorf("AssertLineFound: scan failed: %s", err.Error())
}

return fmt.Errorf("AssertLineFound: hit EOF before finding %#v", expectedLine)
}

func AssertNextLineEquals(scanner *bufio.Scanner, expectedLine string) error {
if scanner.Scan() {
line := scanner.Text()
if line == expectedLine {
return nil
} else {
return fmt.Errorf("AssertNextLineEquals: got %#v, not %#v", line, expectedLine)
}
}

if err := scanner.Err(); err != nil {
return fmt.Errorf("AssertNextLineEquals: scan failed: %s", err.Error())
}

return fmt.Errorf("AssertNextLineEquals: hit EOF before finding %#v", expectedLine)
}

0 comments on commit 966e604

Please sign in to comment.