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}