mirror of
https://github.com/grdl/git-get.git
synced 2026-02-04 19:09:45 +00:00
260 lines
5.8 KiB
Go
260 lines
5.8 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestDetermineCommand(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
programName string
|
|
args []string
|
|
wantCmd string
|
|
wantArgs []string
|
|
}{
|
|
{
|
|
name: "git-get with no args",
|
|
programName: "git-get",
|
|
args: []string{"git-get"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "git-get with repo arg",
|
|
programName: "git-get",
|
|
args: []string{"git-get", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "git-get with get subcommand",
|
|
programName: "git-get",
|
|
args: []string{"git-get", "get", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "git-get with list subcommand",
|
|
programName: "git-get",
|
|
args: []string{"git-get", "list"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "git-list with no args",
|
|
programName: "git-list",
|
|
args: []string{"git-list"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "git-list with args",
|
|
programName: "git-list",
|
|
args: []string{"git-list", "--fetch"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{"--fetch"},
|
|
},
|
|
{
|
|
name: "git-get.exe on Windows",
|
|
programName: "git-get.exe",
|
|
args: []string{"git-get.exe", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "unknown program name with args",
|
|
programName: "some-other-name",
|
|
args: []string{"some-other-name", "get", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "unknown program name with no args",
|
|
programName: "some-other-name",
|
|
args: []string{"some-other-name"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Save original os.Args
|
|
oldArgs := os.Args
|
|
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// Set test args
|
|
os.Args = tt.args
|
|
|
|
gotCmd, gotArgs := determineCommand()
|
|
|
|
if gotCmd != tt.wantCmd {
|
|
t.Errorf("determineCommand() command = %v, want %v", gotCmd, tt.wantCmd)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotArgs, tt.wantArgs) {
|
|
t.Errorf("determineCommand() args = %v, want %v", gotArgs, tt.wantArgs)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHandleGitGetInvocation(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
wantCmd string
|
|
wantArgs []string
|
|
}{
|
|
{
|
|
name: "no args",
|
|
args: []string{"git-get"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "with repo arg",
|
|
args: []string{"git-get", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "with get subcommand",
|
|
args: []string{"git-get", "get", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo"},
|
|
},
|
|
{
|
|
name: "with list subcommand",
|
|
args: []string{"git-get", "list", "--fetch"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{"--fetch"},
|
|
},
|
|
{
|
|
name: "with invalid subcommand",
|
|
args: []string{"git-get", "invalid", "user/repo"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"invalid", "user/repo"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Save original os.Args
|
|
oldArgs := os.Args
|
|
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// Set test args
|
|
os.Args = tt.args
|
|
|
|
gotCmd, gotArgs := handleGitGetInvocation()
|
|
|
|
if gotCmd != tt.wantCmd {
|
|
t.Errorf("handleGitGetInvocation() command = %v, want %v", gotCmd, tt.wantCmd)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotArgs, tt.wantArgs) {
|
|
t.Errorf("handleGitGetInvocation() args = %v, want %v", gotArgs, tt.wantArgs)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHandleGitListInvocation(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
wantCmd string
|
|
wantArgs []string
|
|
}{
|
|
{
|
|
name: "no args",
|
|
args: []string{"git-list"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "with flags",
|
|
args: []string{"git-list", "--fetch", "--out", "flat"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{"--fetch", "--out", "flat"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Save original os.Args
|
|
oldArgs := os.Args
|
|
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// Set test args
|
|
os.Args = tt.args
|
|
|
|
gotCmd, gotArgs := handleGitListInvocation()
|
|
|
|
if gotCmd != tt.wantCmd {
|
|
t.Errorf("handleGitListInvocation() command = %v, want %v", gotCmd, tt.wantCmd)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotArgs, tt.wantArgs) {
|
|
t.Errorf("handleGitListInvocation() args = %v, want %v", gotArgs, tt.wantArgs)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHandleDefaultInvocation(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
wantCmd string
|
|
wantArgs []string
|
|
}{
|
|
{
|
|
name: "no args",
|
|
args: []string{"some-program"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "with command arg",
|
|
args: []string{"some-program", "list"},
|
|
wantCmd: "list",
|
|
wantArgs: []string{},
|
|
},
|
|
{
|
|
name: "with command and args",
|
|
args: []string{"some-program", "get", "user/repo", "--branch", "main"},
|
|
wantCmd: "get",
|
|
wantArgs: []string{"user/repo", "--branch", "main"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Save original os.Args
|
|
oldArgs := os.Args
|
|
|
|
defer func() { os.Args = oldArgs }()
|
|
|
|
// Set test args
|
|
os.Args = tt.args
|
|
|
|
gotCmd, gotArgs := handleDefaultInvocation()
|
|
|
|
if gotCmd != tt.wantCmd {
|
|
t.Errorf("handleDefaultInvocation() command = %v, want %v", gotCmd, tt.wantCmd)
|
|
}
|
|
|
|
if !reflect.DeepEqual(gotArgs, tt.wantArgs) {
|
|
t.Errorf("handleDefaultInvocation() args = %v, want %v", gotArgs, tt.wantArgs)
|
|
}
|
|
})
|
|
}
|
|
}
|