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
|
package completion
import (
"strings"
"testing"
"github.com/cli/cli/v2/pkg/iostreams"
"github.com/google/shlex"
"github.com/spf13/cobra"
)
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_gh gh",
},
{
name: "zsh completion",
args: "completion -s zsh",
wantOut: "#compdef gh",
},
{
name: "fish completion",
args: "completion -s fish",
wantOut: "complete -c gh ",
},
{
name: "PowerShell completion",
args: "completion -s powershell",
wantOut: "Register-ArgumentCompleter",
},
{
name: "unsupported shell",
args: "completion -s csh",
wantErr: "invalid argument \"csh\" for \"-s, --shell\" flag: valid values are {bash|zsh|fish|powershell}",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ios, _, stdout, stderr := iostreams.Test()
completeCmd := NewCmdCompletion(ios)
rootCmd := &cobra.Command{Use: "gh"}
rootCmd.AddCommand(completeCmd)
argv, err := shlex.Split(tt.args)
if err != nil {
t.Fatalf("argument splitting error: %v", err)
}
rootCmd.SetArgs(argv)
rootCmd.SetOut(stderr)
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())
}
})
}
}
|