aboutsummaryrefslogtreecommitdiff
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)
		}
	}
}