123 lines
3.5 KiB
Go
123 lines
3.5 KiB
Go
package root
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestExpandAlias(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
expansion string
|
|
args []string
|
|
wantExpanded []string
|
|
wantErr string
|
|
}{
|
|
{
|
|
name: "no expansion",
|
|
expansion: "pr status",
|
|
args: []string{},
|
|
wantExpanded: []string{"pr", "status"},
|
|
},
|
|
{
|
|
name: "adding arguments after expansion",
|
|
expansion: "pr checkout",
|
|
args: []string{"123"},
|
|
wantExpanded: []string{"pr", "checkout", "123"},
|
|
},
|
|
{
|
|
name: "not enough arguments for expansion",
|
|
expansion: `issue list --author="$1" --label="$2"`,
|
|
args: []string{},
|
|
wantErr: `not enough arguments for alias: issue list --author="$1" --label="$2"`,
|
|
},
|
|
{
|
|
name: "not enough arguments for expansion 2",
|
|
expansion: `issue list --author="$1" --label="$2"`,
|
|
args: []string{"vilmibm"},
|
|
wantErr: `not enough arguments for alias: issue list --author="vilmibm" --label="$2"`,
|
|
},
|
|
{
|
|
name: "satisfy expansion arguments",
|
|
expansion: `issue list --author="$1" --label="$2"`,
|
|
args: []string{"vilmibm", "help wanted"},
|
|
wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=help wanted"},
|
|
},
|
|
{
|
|
name: "mixed positional and non-positional arguments",
|
|
expansion: `issue list --author="$1" --label="$2"`,
|
|
args: []string{"vilmibm", "epic", "-R", "monalisa/testing"},
|
|
wantExpanded: []string{"issue", "list", "--author=vilmibm", "--label=epic", "-R", "monalisa/testing"},
|
|
},
|
|
{
|
|
name: "dollar in expansion",
|
|
expansion: `issue list --author="$1" --assignee="$1"`,
|
|
args: []string{"$coolmoney$"},
|
|
wantExpanded: []string{"issue", "list", "--author=$coolmoney$", "--assignee=$coolmoney$"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotExpanded, err := expandAlias(tt.expansion, tt.args)
|
|
if tt.wantErr != "" {
|
|
assert.Nil(t, gotExpanded)
|
|
assert.EqualError(t, err, tt.wantErr)
|
|
return
|
|
}
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tt.wantExpanded, gotExpanded)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestExpandShellAlias(t *testing.T) {
|
|
findShFunc := func() (string, error) {
|
|
return "/usr/bin/sh", nil
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
expansion string
|
|
args []string
|
|
findSh func() (string, error)
|
|
wantExpanded []string
|
|
wantErr string
|
|
}{
|
|
{
|
|
name: "simple expansion",
|
|
expansion: "!git branch --show-current",
|
|
args: []string{},
|
|
findSh: findShFunc,
|
|
wantExpanded: []string{"/usr/bin/sh", "-c", "git branch --show-current"},
|
|
},
|
|
{
|
|
name: "adding arguments after expansion",
|
|
expansion: "!git branch checkout",
|
|
args: []string{"123"},
|
|
findSh: findShFunc,
|
|
wantExpanded: []string{"/usr/bin/sh", "-c", "git branch checkout", "--", "123"},
|
|
},
|
|
{
|
|
name: "unable to find sh",
|
|
expansion: "!git branch --show-current",
|
|
args: []string{},
|
|
findSh: func() (string, error) {
|
|
return "", errors.New("unable to locate sh")
|
|
},
|
|
wantErr: "unable to locate sh",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
gotExpanded, err := expandShellAlias(tt.expansion, tt.args, tt.findSh)
|
|
if tt.wantErr != "" {
|
|
assert.Nil(t, gotExpanded)
|
|
assert.EqualError(t, err, tt.wantErr)
|
|
return
|
|
}
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tt.wantExpanded, gotExpanded)
|
|
})
|
|
}
|
|
}
|