diff --git a/docs_test.go b/docs_test.go index e489751..e4e47d7 100644 --- a/docs_test.go +++ b/docs_test.go @@ -8,6 +8,7 @@ import ( "net/mail" "os" "testing" + "time" "github.com/stretchr/testify/require" "github.com/urfave/cli/v3" @@ -37,6 +38,32 @@ func normalizeNewlines(d []byte) []byte { ) } +func buildFlagTest(t *testing.T) *cli.Command { + return &cli.Command{ + Writer: io.Discard, + Name: "main", + Flags: []cli.Flag{ + &cli.BoolFlag{Name: "bool-false"}, + &cli.BoolFlag{Name: "bool-true", Value: true}, + &cli.StringFlag{Name: "string-empty"}, + &cli.StringFlag{Name: "string-set", Value: "a string"}, + &cli.StringMapFlag{Name: "string-map-empty"}, + &cli.StringMapFlag{Name: "string-map-set", Value: map[string]string{"a": "b"}}, + &cli.StringSliceFlag{Name: "string-slice-empty"}, + &cli.StringSliceFlag{Name: "string-slice-set", Value: []string{"a", "b"}}, + &cli.IntFlag{Name: "string-empty"}, + &cli.IntFlag{Name: "string-set", Value: 42}, + &cli.UintFlag{Name: "string-empty"}, + &cli.UintFlag{Name: "string-set", Value: 21}, + &cli.FloatFlag{Name: "string-empty"}, + &cli.FloatFlag{Name: "string-set", Value: 88.32}, + &cli.DurationFlag{Name: "string-empty"}, + &cli.DurationFlag{Name: "string-set", Value: 12 * time.Minute}, + &cli.TimestampFlag{Name: "string-empty"}, + &cli.TimestampFlag{Name: "string-set", Value: time.Unix(1729456800, 0).UTC()}, + }} +} + func buildExtendedTestCommand(t *testing.T) *cli.Command { return &cli.Command{ Writer: io.Discard, @@ -342,6 +369,15 @@ func TestToMarkdown(t *testing.T) { require.NoError(t, err) expectFileContent(t, "testdata/expected-doc-no-usagetext.md", res) }) + + t.Run("test all flag types", func(t *testing.T) { + app := buildFlagTest(t) + + res, err := ToMarkdown(app) + + require.NoError(t, err) + expectFileContent(t, "testdata/expected-doc-all-flag-types.md", res) + }) } func TestToMan(t *testing.T) { diff --git a/testdata/expected-doc-all-flag-types.md b/testdata/expected-doc-all-flag-types.md new file mode 100644 index 0000000..74d1078 --- /dev/null +++ b/testdata/expected-doc-all-flag-types.md @@ -0,0 +1,73 @@ +# NAME + +main + +# SYNOPSIS + +main + +``` +[--bool-false] +[--bool-true] +[--string-empty]=[value] +[--string-empty]=[value] +[--string-empty]=[value] +[--string-empty]=[value] +[--string-empty]=[value] +[--string-empty]=[value] +[--string-map-empty]=[value] +[--string-map-set]=[value] +[--string-set]=[value] +[--string-set]=[value] +[--string-set]=[value] +[--string-set]=[value] +[--string-set]=[value] +[--string-set]=[value] +[--string-slice-empty]=[value] +[--string-slice-set]=[value] +``` + +**Usage**: + +``` +main [GLOBAL OPTIONS] [command [COMMAND OPTIONS]] [ARGUMENTS...] +``` + +# GLOBAL OPTIONS + +**--bool-false**: (default: false) + +**--bool-true**: (default: true) + +**--string-empty**="": + +**--string-empty**="": (default: 0) + +**--string-empty**="": (default: 0) + +**--string-empty**="": (default: 0) + +**--string-empty**="": (default: 0001-01-01 00:00:00 +0000 UTC) + +**--string-empty**="": (default: 0s) + +**--string-map-empty**="": (default: map[]) + +**--string-map-set**="": (default: map[a:b]) + +**--string-set**="": (default: 12m0s) + +**--string-set**="": (default: 2024-10-20 20:40:00 +0000 UTC) + +**--string-set**="": (default: 21) + +**--string-set**="": (default: 42) + +**--string-set**="": (default: 88.32) + +**--string-set**="": (default: a string) + +**--string-slice-empty**="": (default: []) + +**--string-slice-set**="": (default: [a b]) +