1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
package completion
import (
"strings"
"testing"
"gitlab.com/gitlab-org/cli/pkg/iostreams"
"github.com/spf13/cobra"
"github.com/google/shlex"
)
func TestNewCmdCompletion(t *testing.T) {
tests := []struct {
name string
args string
wantOut string
wantErr string
}{
{
name: "no arguments",
args: "completion",
wantOut: "complete -o default -F __start_glab glab",
},
{
name: "zsh completion",
args: "completion -s zsh",
wantOut: "#compdef glab",
},
{
name: "fish completion",
args: "completion -s fish",
wantOut: "complete -c glab ",
},
{
name: "PowerShell completion",
args: "completion -s powershell",
wantOut: "Register-ArgumentCompleter",
},
{
name: "unsupported shell",
args: "completion -s csh",
wantErr: `unsupported shell type "csh"`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
io, _, stdout, stderr := iostreams.Test()
completeCmd := NewCmdCompletion(io)
rootCmd := &cobra.Command{Use: "glab"}
rootCmd.AddCommand(completeCmd)
argv, err := shlex.Split(tt.args)
if err != nil {
t.Fatalf("argument splitting error: %v", err)
}
rootCmd.SetArgs(argv)
rootCmd.SetOut(stdout)
rootCmd.SetErr(stderr)
_, err = rootCmd.ExecuteC()
if tt.wantErr != "" {
if err == nil || err.Error() != tt.wantErr {
t.Fatalf("expected error %q, got %q", tt.wantErr, err)
}
return
}
if err != nil {
t.Fatalf("error executing command: %v", err)
}
if !strings.Contains(stdout.String(), tt.wantOut) {
t.Errorf("completion output did not match:\n%s", stdout.String())
}
if len(stderr.String()) > 0 {
t.Errorf("expected nothing on stderr, got %q", stderr.String())
}
})
}
}
|