diff options
Diffstat (limited to 'reference_test.go')
| -rw-r--r-- | reference_test.go | 138 |
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) { 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/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 } |
