master
 1package git
 2
 3import (
 4	"testing"
 5)
 6
 7func TestParseRefNames_Empty(t *testing.T) {
 8	got := parseRefNames("")
 9	if len(got) != 0 {
10		t.Fatalf("expected empty slice, got %v", got)
11	}
12}
13
14func TestParseRefNames_Mixed(t *testing.T) {
15	input := "HEAD -> main, tag: v1.0.0, origin/HEAD -> origin/main, origin/main, master"
16	got := parseRefNames(input)
17	if len(got) != 5 {
18		t.Fatalf("expected 5 entries, got %d (%v)", len(got), got)
19	}
20
21	// 1: HEAD pointer
22	if got[0].Kind != RefKindHEAD || got[0].Name != "HEAD" || got[0].Target != "main" {
23		t.Errorf("unexpected HEAD entry: %+v", got[0])
24	}
25	// 2: tag
26	if got[1].Kind != RefKindTag || got[1].Name != "v1.0.0" || got[1].Target != "" {
27		t.Errorf("unexpected Tag entry: %+v", got[1])
28	}
29	// 3: remote HEAD pointer
30	if got[2].Kind != RefKindRemoteHEAD || got[2].Name != "origin/HEAD" || got[2].Target != "origin/main" {
31		t.Errorf("unexpected RemoteHEAD entry: %+v", got[2])
32	}
33	// 4: remote branch
34	if got[3].Kind != RefKindRemote || got[3].Name != "origin/main" || got[3].Target != "" {
35		t.Errorf("unexpected Remote entry: %+v", got[3])
36	}
37	// 5: local branch
38	if got[4].Kind != RefKindBranch || got[4].Name != "master" || got[4].Target != "" {
39		t.Errorf("unexpected Branch entry: %+v", got[4])
40	}
41}
42
43func TestParseRefNames_Singles(t *testing.T) {
44	cases := []struct {
45		in     string
46		kind   RefKind
47		name   string
48		target string
49	}{
50		{"tag: v2", RefKindTag, "v2", ""},
51		{"main", RefKindBranch, "main", ""},
52		{"origin/dev", RefKindRemote, "origin/dev", ""},
53		{"origin/HEAD -> origin/main", RefKindRemoteHEAD, "origin/HEAD", "origin/main"},
54	}
55	for _, c := range cases {
56		got := parseRefNames(c.in)
57		if len(got) != 1 {
58			t.Fatalf("%q: expected 1 entry, got %d (%v)", c.in, len(got), got)
59		}
60		if got[0].Kind != c.kind || got[0].Name != c.name || got[0].Target != c.target {
61			t.Errorf("%q: unexpected entry: %+v", c.in, got[0])
62		}
63	}
64}