220 lines
3.8 KiB
Go
220 lines
3.8 KiB
Go
//go:build !urfave_cli_no_docs
|
|
// +build !urfave_cli_no_docs
|
|
|
|
package cli
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestToMarkdownFull(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
|
|
// When
|
|
res, err := app.ToMarkdown()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-full.md", res)
|
|
}
|
|
|
|
func TestToMarkdownNoFlags(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
app.Flags = nil
|
|
|
|
// When
|
|
res, err := app.ToMarkdown()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-no-flags.md", res)
|
|
}
|
|
|
|
func TestToMarkdownNoCommands(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
app.Commands = nil
|
|
|
|
// When
|
|
res, err := app.ToMarkdown()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-no-commands.md", res)
|
|
}
|
|
|
|
func TestToMarkdownNoAuthors(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
app.Authors = []*Author{}
|
|
|
|
// When
|
|
res, err := app.ToMarkdown()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-no-authors.md", res)
|
|
}
|
|
|
|
func TestToMarkdownNoUsageText(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
app.UsageText = ""
|
|
|
|
// When
|
|
res, err := app.ToMarkdown()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-no-usagetext.md", res)
|
|
}
|
|
|
|
func TestToMan(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
|
|
// When
|
|
res, err := app.ToMan()
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-full.man", res)
|
|
}
|
|
|
|
func TestToManParseError(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
|
|
// When
|
|
// temporarily change the global variable for testing
|
|
tmp := MarkdownDocTemplate
|
|
MarkdownDocTemplate = `{{ .App.Name`
|
|
_, err := app.ToMan()
|
|
MarkdownDocTemplate = tmp
|
|
|
|
// Then
|
|
expect(t, err, errors.New(`template: cli:1: unclosed action`))
|
|
}
|
|
|
|
func TestToManWithSection(t *testing.T) {
|
|
// Given
|
|
app := testApp()
|
|
|
|
// When
|
|
res, err := app.ToManWithSection(8)
|
|
|
|
// Then
|
|
expect(t, err, nil)
|
|
expectFileContent(t, "testdata/expected-doc-full.man", res)
|
|
}
|
|
|
|
func Test_prepareUsageText(t *testing.T) {
|
|
t.Run("no UsageText provided", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{}
|
|
|
|
// When
|
|
res := prepareUsageText(&cmd)
|
|
|
|
// Then
|
|
expect(t, res, "")
|
|
})
|
|
|
|
t.Run("single line UsageText", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{UsageText: "Single line usage text"}
|
|
|
|
// When
|
|
res := prepareUsageText(&cmd)
|
|
|
|
// Then
|
|
expect(t, res, ">Single line usage text\n")
|
|
})
|
|
|
|
t.Run("multiline UsageText", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{
|
|
UsageText: `
|
|
Usage for the usage text
|
|
- Should be a part of the same code block
|
|
`,
|
|
}
|
|
|
|
// When
|
|
res := prepareUsageText(&cmd)
|
|
|
|
// Then
|
|
test := ` Usage for the usage text
|
|
- Should be a part of the same code block
|
|
`
|
|
expect(t, res, test)
|
|
})
|
|
|
|
t.Run("multiline UsageText has formatted embedded markdown", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{
|
|
UsageText: `
|
|
Usage for the usage text
|
|
|
|
` + "```" + `
|
|
func() { ... }
|
|
` + "```" + `
|
|
|
|
Should be a part of the same code block
|
|
`,
|
|
}
|
|
|
|
// When
|
|
res := prepareUsageText(&cmd)
|
|
|
|
// Then
|
|
test := ` Usage for the usage text
|
|
|
|
` + "```" + `
|
|
func() { ... }
|
|
` + "```" + `
|
|
|
|
Should be a part of the same code block
|
|
`
|
|
expect(t, res, test)
|
|
})
|
|
}
|
|
|
|
func Test_prepareUsage(t *testing.T) {
|
|
t.Run("no Usage provided", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{}
|
|
|
|
// When
|
|
res := prepareUsage(&cmd, "")
|
|
|
|
// Then
|
|
expect(t, res, "")
|
|
})
|
|
|
|
t.Run("simple Usage", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{Usage: "simple usage text"}
|
|
|
|
// When
|
|
res := prepareUsage(&cmd, "")
|
|
|
|
// Then
|
|
expect(t, res, cmd.Usage+"\n")
|
|
})
|
|
|
|
t.Run("simple Usage with UsageText", func(t *testing.T) {
|
|
// Given
|
|
cmd := Command{Usage: "simple usage text"}
|
|
|
|
// When
|
|
res := prepareUsage(&cmd, "a non-empty string")
|
|
|
|
// Then
|
|
expect(t, res, cmd.Usage+"\n\n")
|
|
})
|
|
}
|