| // 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 TestGenRSTDoc(t *testing.T) { |
| // We generate on a subcommand so we have both subcommands and parents |
| buf := new(bytes.Buffer) |
| if err := GenReST(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) |
| } |
| |
| func TestGenRSTNoHiddenParents(t *testing.T) { |
| // We generate on a 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 := GenReST(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 TestGenRSTNoTag(t *testing.T) { |
| rootCmd.DisableAutoGenTag = true |
| defer func() { rootCmd.DisableAutoGenTag = false }() |
| |
| buf := new(bytes.Buffer) |
| if err := GenReST(rootCmd, buf); err != nil { |
| t.Fatal(err) |
| } |
| output := buf.String() |
| |
| unexpected := "Auto generated" |
| checkStringOmits(t, output, unexpected) |
| } |
| |
| func TestGenRSTTree(t *testing.T) { |
| c := &cobra.Command{Use: "do [OPTIONS] arg1 arg2"} |
| |
| tmpdir, err := os.MkdirTemp("", "test-gen-rst-tree") |
| if err != nil { |
| t.Fatalf("Failed to create tmpdir: %s", err.Error()) |
| } |
| defer os.RemoveAll(tmpdir) |
| |
| if err := GenReSTTree(c, tmpdir); err != nil { |
| t.Fatalf("GenReSTTree failed: %s", err.Error()) |
| } |
| |
| if _, err := os.Stat(filepath.Join(tmpdir, "do.rst")); err != nil { |
| t.Fatalf("Expected file 'do.rst' to exist") |
| } |
| } |
| |
| func BenchmarkGenReSTToFile(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 := GenReST(rootCmd, file); err != nil { |
| b.Fatal(err) |
| } |
| } |
| } |