| // Copyright 2013-2023 The Cobra Authors | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package doc | |
| import ( | |
| "bytes" | |
| "os" | |
| "path/filepath" | |
| "testing" | |
| "github.com/spf13/cobra" | |
| ) | |
| func TestGenMdDoc(t *testing.T) { | |
| // We generate on subcommand so we have both subcommands and parents. | |
| buf := new(bytes.Buffer) | |
| if err := GenMarkdown(echoCmd, buf); err != nil { | |
| t.Fatal(err) | |
| } | |
| output := buf.String() | |
| checkStringContains(t, output, echoCmd.Long) | |
| checkStringContains(t, output, echoCmd.Example) | |
| checkStringContains(t, output, "boolone") | |
| checkStringContains(t, output, "rootflag") | |
| checkStringContains(t, output, rootCmd.Short) | |
| checkStringContains(t, output, echoSubCmd.Short) | |
| checkStringOmits(t, output, deprecatedCmd.Short) | |
| checkStringContains(t, output, "Options inherited from parent commands") | |
| } | |
| func TestGenMdDocWithNoLongOrSynopsis(t *testing.T) { | |
| // We generate on subcommand so we have both subcommands and parents. | |
| buf := new(bytes.Buffer) | |
| if err := GenMarkdown(dummyCmd, buf); err != nil { | |
| t.Fatal(err) | |
| } | |
| output := buf.String() | |
| checkStringContains(t, output, dummyCmd.Example) | |
| checkStringContains(t, output, dummyCmd.Short) | |
| checkStringContains(t, output, "Options inherited from parent commands") | |
| checkStringOmits(t, output, "### Synopsis") | |
| } | |
| func TestGenMdNoHiddenParents(t *testing.T) { | |
| // We generate on subcommand so we have both subcommands and parents. | |
| for _, name := range []string{"rootflag", "strtwo"} { | |
| f := rootCmd.PersistentFlags().Lookup(name) | |
| f.Hidden = true | |
| defer func() { f.Hidden = false }() | |
| } | |
| buf := new(bytes.Buffer) | |
| if err := GenMarkdown(echoCmd, buf); err != nil { | |
| t.Fatal(err) | |
| } | |
| output := buf.String() | |
| checkStringContains(t, output, echoCmd.Long) | |
| checkStringContains(t, output, echoCmd.Example) | |
| checkStringContains(t, output, "boolone") | |
| checkStringOmits(t, output, "rootflag") | |
| checkStringContains(t, output, rootCmd.Short) | |
| checkStringContains(t, output, echoSubCmd.Short) | |
| checkStringOmits(t, output, deprecatedCmd.Short) | |
| checkStringOmits(t, output, "Options inherited from parent commands") | |
| } | |
| func TestGenMdNoTag(t *testing.T) { | |
| rootCmd.DisableAutoGenTag = true | |
| defer func() { rootCmd.DisableAutoGenTag = false }() | |
| buf := new(bytes.Buffer) | |
| if err := GenMarkdown(rootCmd, buf); err != nil { | |
| t.Fatal(err) | |
| } | |
| output := buf.String() | |
| checkStringOmits(t, output, "Auto generated") | |
| } | |
| func TestGenMdTree(t *testing.T) { | |
| c := &cobra.Command{Use: "do [OPTIONS] arg1 arg2"} | |
| tmpdir, err := os.MkdirTemp("", "test-gen-md-tree") | |
| if err != nil { | |
| t.Fatalf("Failed to create tmpdir: %v", err) | |
| } | |
| defer os.RemoveAll(tmpdir) | |
| if err := GenMarkdownTree(c, tmpdir); err != nil { | |
| t.Fatalf("GenMarkdownTree failed: %v", err) | |
| } | |
| if _, err := os.Stat(filepath.Join(tmpdir, "do.md")); err != nil { | |
| t.Fatalf("Expected file 'do.md' to exist") | |
| } | |
| } | |
| func BenchmarkGenMarkdownToFile(b *testing.B) { | |
| file, err := os.CreateTemp("", "") | |
| if err != nil { | |
| b.Fatal(err) | |
| } | |
| defer os.Remove(file.Name()) | |
| defer file.Close() | |
| b.ResetTimer() | |
| for i := 0; i < b.N; i++ { | |
| if err := GenMarkdown(rootCmd, file); err != nil { | |
| b.Fatal(err) | |
| } | |
| } | |
| } |