summaryrefslogtreecommitdiff
path: root/reference_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'reference_test.go')
-rw-r--r--reference_test.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/reference_test.go b/reference_test.go
index 8043833..a03f638 100644
--- a/reference_test.go
+++ b/reference_test.go
@@ -3,6 +3,7 @@ package git
import (
"os"
"runtime"
+ "sort"
"testing"
"time"
)
@@ -71,6 +72,97 @@ func TestRefModification(t *testing.T) {
}
+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)
+ checkFatal(t, err)
+
+ _, err = repo.CreateReference("refs/heads/two", commitId, true)
+ checkFatal(t, err)
+
+ _, err = repo.CreateReference("refs/heads/three", commitId, true)
+ 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.Next()
+ for err == nil {
+ list = append(list, name)
+ name, err = iter.Next()
+ }
+ if err != ErrIterOver {
+ t.Fatal("Iteration not over")
+ }
+
+
+ sort.Strings(list)
+ compareStringList(t, expected, list)
+
+ // test the channel iteration
+ list = []string{}
+ iter, err = repo.NewReferenceIterator()
+ for name := range iter.Iter() {
+ 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.Iter() {
+ 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) {
if ref.Type() == kind {
return