summaryrefslogtreecommitdiff
path: root/reference_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'reference_test.go')
-rw-r--r--reference_test.go138
1 files changed, 117 insertions, 21 deletions
diff --git a/reference_test.go b/reference_test.go
index 8043833..156960a 100644
--- a/reference_test.go
+++ b/reference_test.go
@@ -3,6 +3,7 @@ package git
import (
"os"
"runtime"
+ "sort"
"testing"
"time"
)
@@ -11,6 +12,8 @@ func TestRefModification(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
+ commitId, treeId := seedTestRepo(t, repo)
+
loc, err := time.LoadLocation("Europe/Berlin")
checkFatal(t, err)
sig := &Signature{
@@ -18,30 +21,16 @@ func TestRefModification(t *testing.T) {
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
}
-
- idx, err := repo.Index()
- checkFatal(t, err)
- err = idx.AddByPath("README")
- checkFatal(t, err)
- treeId, err := idx.WriteTree()
- checkFatal(t, err)
-
- message := "This is a commit\n"
- tree, err := repo.LookupTree(treeId)
- checkFatal(t, err)
- commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
- checkFatal(t, err)
-
- _, err = repo.CreateReference("refs/tags/tree", treeId, true)
+ _, err = repo.CreateReference("refs/tags/tree", treeId, true, sig, "testTreeTag")
checkFatal(t, err)
tag, err := repo.LookupReference("refs/tags/tree")
checkFatal(t, err)
- checkRefType(t, tag, OID)
+ checkRefType(t, tag, ReferenceOid)
ref, err := repo.LookupReference("HEAD")
checkFatal(t, err)
- checkRefType(t, ref, SYMBOLIC)
+ checkRefType(t, ref, ReferenceSymbolic)
if target := ref.Target(); target != nil {
t.Fatalf("Expected nil *Oid, got %v", target)
@@ -49,7 +38,7 @@ func TestRefModification(t *testing.T) {
ref, err = ref.Resolve()
checkFatal(t, err)
- checkRefType(t, ref, OID)
+ checkRefType(t, ref, ReferenceOid)
if target := ref.Target(); target == nil {
t.Fatalf("Expected valid target got nil")
@@ -63,15 +52,122 @@ func TestRefModification(t *testing.T) {
t.Fatalf("Wrong ref target")
}
- _, err = tag.Rename("refs/tags/renamed", false)
+ _, err = tag.Rename("refs/tags/renamed", false, nil, "")
checkFatal(t, err)
tag, err = repo.LookupReference("refs/tags/renamed")
checkFatal(t, err)
- checkRefType(t, ref, OID)
+ checkRefType(t, ref, ReferenceOid)
+
+}
+
+func TestIterator(t *testing.T) {
+ repo := createTestRepo(t)
+ defer os.RemoveAll(repo.Workdir())
+
+ loc, err := time.LoadLocation("Europe/Berlin")
+ checkFatal(t, err)
+ sig := &Signature{
+ Name: "Rand Om Hacker",
+ Email: "[email protected]",
+ When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
+ }
+
+ idx, err := repo.Index()
+ checkFatal(t, err)
+ err = idx.AddByPath("README")
+ checkFatal(t, err)
+ treeId, err := idx.WriteTree()
+ checkFatal(t, err)
+ message := "This is a commit\n"
+ tree, err := repo.LookupTree(treeId)
+ checkFatal(t, err)
+ commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
+ checkFatal(t, err)
+
+ _, err = repo.CreateReference("refs/heads/one", commitId, true, sig, "headOne")
+ checkFatal(t, err)
+
+ _, err = repo.CreateReference("refs/heads/two", commitId, true, sig, "headTwo")
+ checkFatal(t, err)
+
+ _, err = repo.CreateReference("refs/heads/three", commitId, true, sig, "headThree")
+ checkFatal(t, err)
+
+ iter, err := repo.NewReferenceIterator()
+ checkFatal(t, err)
+
+ var list []string
+ expected := []string{
+ "refs/heads/master",
+ "refs/heads/one",
+ "refs/heads/three",
+ "refs/heads/two",
+ }
+
+ // test some manual iteration
+ name, err := iter.NextName()
+ for err == nil {
+ list = append(list, name)
+ name, err = iter.NextName()
+ }
+ if err != ErrIterOver {
+ t.Fatal("Iteration not over")
+ }
+
+ sort.Strings(list)
+ compareStringList(t, expected, list)
+
+ // test the iterator for full refs, rather than just names
+ iter, err = repo.NewReferenceIterator()
+ checkFatal(t, err)
+ count := 0
+ _, err = iter.Next()
+ for err == nil {
+ count++
+ _, err = iter.Next()
+ }
+ if err != ErrIterOver {
+ t.Fatal("Iteration not over")
+ }
+
+ if count != 4 {
+ t.Fatalf("Wrong number of references returned %v", count)
+ }
+
+ // test the channel iteration
+ list = []string{}
+ iter, err = repo.NewReferenceIterator()
+ for name := range iter.NameIter() {
+ list = append(list, name)
+ }
+
+ sort.Strings(list)
+ compareStringList(t, expected, list)
+
+ iter, err = repo.NewReferenceIteratorGlob("refs/heads/t*")
+ expected = []string{
+ "refs/heads/three",
+ "refs/heads/two",
+ }
+
+ list = []string{}
+ for name := range iter.NameIter() {
+ list = append(list, name)
+ }
+
+ compareStringList(t, expected, list)
+}
+
+func compareStringList(t *testing.T, expected, actual []string) {
+ for i, v := range expected {
+ if actual[i] != v {
+ t.Fatalf("Bad list")
+ }
+ }
}
-func checkRefType(t *testing.T, ref *Reference, kind int) {
+func checkRefType(t *testing.T, ref *Reference, kind ReferenceType) {
if ref.Type() == kind {
return
}