package name_test
import (
"testing"
"lindenii.org/go/furgit/ref/name"
)
func TestIsPerWorktree(t *testing.T) {
t.Parallel()
tests := []struct {
name string
want bool
}{
{name: "refs/worktree/foo", want: true},
{name: "refs/bisect/foo", want: true},
{name: "refs/rewritten/foo", want: true},
{name: "refs/heads/foo", want: false},
{name: "worktrees/wt1/HEAD", want: false},
}
for _, tt := range tests {
if got := name.IsPerWorktree(tt.name); got != tt.want {
t.Fatalf("IsPerWorktree(%q) = %v, want %v", tt.name, got, tt.want)
}
}
}
func TestParseWorktree(t *testing.T) {
t.Parallel()
tests := []struct {
name string
want name.ParsedWorktreeRef
}{
{
name: "refs/heads/main",
want: name.ParsedWorktreeRef{
Type: name.WorktreeShared,
WorktreeName: "",
BareRefName: "refs/heads/main",
},
},
{
name: "HEAD",
want: name.ParsedWorktreeRef{
Type: name.WorktreeCurrent,
WorktreeName: "",
BareRefName: "HEAD",
},
},
{
name: "refs/worktree/foo",
want: name.ParsedWorktreeRef{
Type: name.WorktreeCurrent,
WorktreeName: "",
BareRefName: "refs/worktree/foo",
},
},
{
name: "main-worktree/HEAD",
want: name.ParsedWorktreeRef{
Type: name.WorktreeMain,
WorktreeName: "",
BareRefName: "HEAD",
},
},
{
name: "main-worktree/FOO",
want: name.ParsedWorktreeRef{
Type: name.WorktreeMain,
WorktreeName: "",
BareRefName: "FOO",
},
},
{
name: "main-worktree/refs/worktree/foo",
want: name.ParsedWorktreeRef{
Type: name.WorktreeMain,
WorktreeName: "",
BareRefName: "refs/worktree/foo",
},
},
{
name: "main-worktree/",
want: name.ParsedWorktreeRef{
Type: name.WorktreeMain,
WorktreeName: "",
BareRefName: "",
},
},
{
name: "main-worktree/refs/heads/main",
want: name.ParsedWorktreeRef{
Type: name.WorktreeShared,
WorktreeName: "",
BareRefName: "main-worktree/refs/heads/main",
},
},
{
name: "worktrees/wt1/HEAD",
want: name.ParsedWorktreeRef{
Type: name.WorktreeOther,
WorktreeName: "wt1",
BareRefName: "HEAD",
},
},
{
name: "worktrees/wt1/BAR",
want: name.ParsedWorktreeRef{
Type: name.WorktreeOther,
WorktreeName: "wt1",
BareRefName: "BAR",
},
},
{
name: "worktrees/wt1/refs/bisect/foo",
want: name.ParsedWorktreeRef{
Type: name.WorktreeOther,
WorktreeName: "wt1",
BareRefName: "refs/bisect/foo",
},
},
{
name: "worktrees/wt1/refs/heads/main",
want: name.ParsedWorktreeRef{
Type: name.WorktreeShared,
WorktreeName: "",
BareRefName: "worktrees/wt1/refs/heads/main",
},
},
{
name: "worktrees/wt1",
want: name.ParsedWorktreeRef{
Type: name.WorktreeOther,
WorktreeName: "wt1",
BareRefName: "",
},
},
}
for _, tt := range tests {
if got := name.ParseWorktree(tt.name); got != tt.want {
t.Fatalf("ParseWorktree(%q) = %#v, want %#v", tt.name, got, tt.want)
}
}
}