package doc import ( "bytes" "io/ioutil" "os" "path/filepath" "testing" "github.com/spf13/cobra" ) func TestGenYamlDoc(t *testing.T) { // We generate on s subcommand so we have both subcommands and parents buf := new(bytes.Buffer) if err := GenYaml(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) } func TestGenYamlNoTag(t *testing.T) { rootCmd.DisableAutoGenTag = true defer func() { rootCmd.DisableAutoGenTag = false }() buf := new(bytes.Buffer) if err := GenYaml(rootCmd, buf); err != nil { t.Fatal(err) } output := buf.String() checkStringOmits(t, output, "Auto generated") } func TestGenYamlTree(t *testing.T) { c := &cobra.Command{Use: "do [OPTIONS] arg1 arg2"} tmpdir, err := ioutil.TempDir("", "test-gen-yaml-tree") if err != nil { t.Fatalf("Failed to create tmpdir: %s", err.Error()) } defer os.RemoveAll(tmpdir) if err := GenYamlTree(c, tmpdir); err != nil { t.Fatalf("GenYamlTree failed: %s", err.Error()) } if _, err := os.Stat(filepath.Join(tmpdir, "do.yaml")); err != nil { t.Fatalf("Expected file 'do.yaml' to exist") } } func TestGenYamlTreeSlashCommands(t *testing.T) { c := &cobra.Command{Use: "run/first [OPTIONS] arg1 arg2"} tmpdir, err := ioutil.TempDir("", "test-gen-yaml-tree-slash-commands") if err != nil { t.Fatalf("Failed to create tmpdir: %s", err.Error()) } defer os.RemoveAll(tmpdir) if err := GenYamlTree(c, tmpdir); err != nil { t.Fatalf("GenYamlTree failed: %s", err.Error()) } if _, err := os.Stat(filepath.Join(tmpdir, "run_first.yaml")); err != nil { t.Fatalf("Expected file 'run_first.yaml' to exist") } } func TestGenYamlDocRunnable(t *testing.T) { // Testing a runnable command: should contain the "usage" field buf := new(bytes.Buffer) if err := GenYaml(rootCmd, buf); err != nil { t.Fatal(err) } output := buf.String() checkStringContains(t, output, "usage: "+rootCmd.Use) } func BenchmarkGenYamlToFile(b *testing.B) { file, err := ioutil.TempFile("", "") 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 := GenYaml(rootCmd, file); err != nil { b.Fatal(err) } } }