Add explicit doc.GenMan SEE ALSO test covering #229

This commit is contained in:
Garth Kidd 2016-01-21 12:06:00 +11:00
parent cb8496d6b2
commit 57f473263e

View File

@ -1,11 +1,14 @@
package doc package doc
import ( import (
"bufio"
"bytes" "bytes"
"fmt" "fmt"
"os" "os"
"strings" "strings"
"testing" "testing"
"github.com/spf13/cobra"
) )
var _ = fmt.Println var _ = fmt.Println
@ -95,3 +98,65 @@ func TestGenManNoGenTag(t *testing.T) {
unexpected := translate("#HISTORY") unexpected := translate("#HISTORY")
checkStringOmits(t, found, unexpected) 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)
}