github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/internal/docs/markdown_test.go (about)

     1  package docs
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/spf13/cobra"
    10  )
    11  
    12  func TestGenMdDoc(t *testing.T) {
    13  	// We generate on subcommand so we have both subcommands and parents.
    14  	buf := new(bytes.Buffer)
    15  	if err := GenMarkdown(echoCmd, buf); err != nil {
    16  		t.Fatal(err)
    17  	}
    18  	output := buf.String()
    19  
    20  	checkStringContains(t, output, echoCmd.Long)
    21  	checkStringContains(t, output, echoCmd.Example)
    22  	checkStringContains(t, output, "boolone")
    23  	checkStringContains(t, output, "rootflag")
    24  	checkStringOmits(t, output, rootCmd.Short)
    25  	checkStringOmits(t, output, echoSubCmd.Short)
    26  	checkStringOmits(t, output, deprecatedCmd.Short)
    27  	checkStringContains(t, output, "Options inherited from parent commands")
    28  }
    29  
    30  func TestGenMdDocWithNoLongOrSynopsis(t *testing.T) {
    31  	// We generate on subcommand so we have both subcommands and parents.
    32  	buf := new(bytes.Buffer)
    33  	if err := GenMarkdown(dummyCmd, buf); err != nil {
    34  		t.Fatal(err)
    35  	}
    36  	output := buf.String()
    37  
    38  	checkStringContains(t, output, dummyCmd.Example)
    39  	checkStringContains(t, output, dummyCmd.Short)
    40  	checkStringContains(t, output, "Options inherited from parent commands")
    41  	checkStringOmits(t, output, "### Synopsis")
    42  }
    43  
    44  func TestGenMdNoHiddenParents(t *testing.T) {
    45  	// We generate on subcommand so we have both subcommands and parents.
    46  	for _, name := range []string{"rootflag", "strtwo"} {
    47  		f := rootCmd.PersistentFlags().Lookup(name)
    48  		f.Hidden = true
    49  		defer func() { f.Hidden = false }()
    50  	}
    51  	buf := new(bytes.Buffer)
    52  	if err := GenMarkdown(echoCmd, buf); err != nil {
    53  		t.Fatal(err)
    54  	}
    55  	output := buf.String()
    56  
    57  	checkStringContains(t, output, echoCmd.Long)
    58  	checkStringContains(t, output, echoCmd.Example)
    59  	checkStringContains(t, output, "boolone")
    60  	checkStringOmits(t, output, "rootflag")
    61  	checkStringOmits(t, output, rootCmd.Short)
    62  	checkStringOmits(t, output, echoSubCmd.Short)
    63  	checkStringOmits(t, output, deprecatedCmd.Short)
    64  	checkStringOmits(t, output, "Options inherited from parent commands")
    65  }
    66  
    67  func TestGenMdTree(t *testing.T) {
    68  	c := &cobra.Command{Use: "do [OPTIONS] arg1 arg2"}
    69  	tmpdir, err := os.MkdirTemp("", "test-gen-md-tree")
    70  	if err != nil {
    71  		t.Fatalf("Failed to create tmpdir: %v", err)
    72  	}
    73  	defer os.RemoveAll(tmpdir)
    74  
    75  	if err := GenMarkdownTree(c, tmpdir); err != nil {
    76  		t.Fatalf("GenMarkdownTree failed: %v", err)
    77  	}
    78  
    79  	if _, err := os.Stat(filepath.Join(tmpdir, "do.md")); err != nil {
    80  		t.Fatalf("Expected file 'do.md' to exist")
    81  	}
    82  }
    83  
    84  func BenchmarkGenMarkdownToFile(b *testing.B) {
    85  	file, err := os.CreateTemp(b.TempDir(), "")
    86  	if err != nil {
    87  		b.Fatal(err)
    88  	}
    89  	defer file.Close()
    90  
    91  	b.ResetTimer()
    92  	for i := 0; i < b.N; i++ {
    93  		if err := GenMarkdown(rootCmd, file); err != nil {
    94  			b.Fatal(err)
    95  		}
    96  	}
    97  }