diff options
| author | Vicent Martà <[email protected]> | 2013-06-13 10:14:09 -0700 |
|---|---|---|
| committer | Vicent Martà <[email protected]> | 2013-06-13 10:14:09 -0700 |
| commit | 7823b142665d079a04e05ec0500e28145eeeb165 (patch) | |
| tree | 7f35dbeda4a012f6303873e6b06e4b7a90b76037 /reference_test.go | |
| parent | 81c9f8df5bd9b7a075216e745108b31abc1734ae (diff) | |
| parent | 931f187301d0c262a4ecdded891e4fed9387b4e4 (diff) | |
Merge pull request #26 from carlosmn/ref-iter
Implement a reference iterator
Diffstat (limited to 'reference_test.go')
| -rw-r--r-- | reference_test.go | 92 |
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 |
