185 lines
4.9 KiB
Go
185 lines
4.9 KiB
Go
package expand
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/MakeNowJust/heredoc"
|
|
"github.com/cli/cli/v2/internal/config"
|
|
)
|
|
|
|
func TestExpandAlias(t *testing.T) {
|
|
findShFunc := func() (string, error) {
|
|
return "/usr/bin/sh", nil
|
|
}
|
|
|
|
cfg := config.NewFromString(heredoc.Doc(`
|
|
aliases:
|
|
co: pr checkout
|
|
il: issue list --author="$1" --label="$2"
|
|
ia: issue list --author="$1" --assignee="$1"
|
|
`))
|
|
|
|
type args struct {
|
|
config config.Config
|
|
argv []string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantExpanded []string
|
|
wantIsShell bool
|
|
wantErr error
|
|
}{
|
|
{
|
|
name: "no arguments",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{},
|
|
},
|
|
wantExpanded: []string(nil),
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "too few arguments",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh"},
|
|
},
|
|
wantExpanded: []string(nil),
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "no expansion",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "pr", "status"},
|
|
},
|
|
wantExpanded: []string{"pr", "status"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "simple expansion",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "co"},
|
|
},
|
|
wantExpanded: []string{"pr", "checkout"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "adding arguments after expansion",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "co", "123"},
|
|
},
|
|
wantExpanded: []string{"pr", "checkout", "123"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "not enough arguments for expansion",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "il"},
|
|
},
|
|
wantExpanded: []string{},
|
|
wantIsShell: false,
|
|
wantErr: errors.New(`not enough arguments for alias: issue list --author="$1" --label="$2"`),
|
|
},
|
|
{
|
|
name: "not enough arguments for expansion 2",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "il", "vilmibm"},
|
|
},
|
|
wantExpanded: []string{},
|
|
wantIsShell: false,
|
|
wantErr: errors.New(`not enough arguments for alias: issue list --author="vilmibm" --label="$2"`),
|
|
},
|
|
{
|
|
name: "satisfy expansion arguments",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "il", "vilmibm", "help wanted"},
|
|
},
|
|
wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=help wanted"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "mixed positional and non-positional arguments",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "il", "vilmibm", "epic", "-R", "monalisa/testing"},
|
|
},
|
|
wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=epic", "-R", "monalisa/testing"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
{
|
|
name: "dollar in expansion",
|
|
args: args{
|
|
config: cfg,
|
|
argv: []string{"gh", "ia", "$coolmoney$"},
|
|
},
|
|
wantExpanded: []string{"issue", "list", "--author=$coolmoney$", "--assignee=$coolmoney$"},
|
|
wantIsShell: false,
|
|
wantErr: nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotExpanded, gotIsShell, err := ExpandAlias(tt.args.config, tt.args.argv, findShFunc)
|
|
if tt.wantErr != nil {
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
if tt.wantErr.Error() != err.Error() {
|
|
t.Fatalf("expected error %q, got %q", tt.wantErr, err)
|
|
}
|
|
return
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("got error: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(gotExpanded, tt.wantExpanded) {
|
|
t.Errorf("ExpandAlias() gotExpanded = %v, want %v", gotExpanded, tt.wantExpanded)
|
|
}
|
|
if gotIsShell != tt.wantIsShell {
|
|
t.Errorf("ExpandAlias() gotIsShell = %v, want %v", gotIsShell, tt.wantIsShell)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// cfg := `---
|
|
// aliases:
|
|
// co: pr checkout
|
|
// il: issue list --author="$1" --label="$2"
|
|
// ia: issue list --author="$1" --assignee="$1"
|
|
// `
|
|
// initBlankContext(cfg, "OWNER/REPO", "trunk")
|
|
// for _, c := range []struct {
|
|
// Args string
|
|
// ExpectedArgs []string
|
|
// Err string
|
|
// }{
|
|
// {"gh co", []string{"pr", "checkout"}, ""},
|
|
// {"gh il", nil, `not enough arguments for alias: issue list --author="$1" --label="$2"`},
|
|
// {"gh il vilmibm", nil, `not enough arguments for alias: issue list --author="vilmibm" --label="$2"`},
|
|
// {"gh co 123", []string{"pr", "checkout", "123"}, ""},
|
|
// {"gh il vilmibm epic", []string{"issue", "list", `--author=vilmibm`, `--label=epic`}, ""},
|
|
// {"gh ia vilmibm", []string{"issue", "list", `--author=vilmibm`, `--assignee=vilmibm`}, ""},
|
|
// {"gh ia $coolmoney$", []string{"issue", "list", `--author=$coolmoney$`, `--assignee=$coolmoney$`}, ""},
|
|
// {"gh pr status", []string{"pr", "status"}, ""},
|
|
// {"gh il vilmibm epic -R vilmibm/testing", []string{"issue", "list", "--author=vilmibm", "--label=epic", "-R", "vilmibm/testing"}, ""},
|
|
// {"gh dne", []string{"dne"}, ""},
|
|
// {"gh", []string{}, ""},
|
|
// {"", []string{}, ""},
|
|
// } {
|