summaryrefslogtreecommitdiff
path: root/tree_test.go
diff options
context:
space:
mode:
authorlhchavez <[email protected]>2021-09-30 09:24:49 -0700
committerGitHub <[email protected]>2021-09-30 09:24:49 -0700
commit9b155184fe1f0f0258730bccd2759ac7ec39be2a (patch)
treeb750693d723a888f7f283fc42ddb9c17ca41a348 /tree_test.go
parentc6da3b97a8a2c7bbbed4496f50c990a1aab4f7bf (diff)
Allow skipping an entry expansion in `tree.Walk()` (#838)
It is now possible to skip expanding an entry in `tree.Walk()` by returning `TreeWalkSkip`, in addition to stopping altogether by returning a non-nil error. Fixes: #837
Diffstat (limited to 'tree_test.go')
-rw-r--r--tree_test.go74
1 files changed, 73 insertions, 1 deletions
diff --git a/tree_test.go b/tree_test.go
index f5b6822..0c0c004 100644
--- a/tree_test.go
+++ b/tree_test.go
@@ -1,6 +1,9 @@
package git
-import "testing"
+import (
+ "errors"
+ "testing"
+)
func TestTreeEntryById(t *testing.T) {
t.Parallel()
@@ -63,3 +66,72 @@ func TestTreeBuilderInsert(t *testing.T) {
t.Fatalf("got oid %v, want %v", entry.Id, blobId)
}
}
+
+func TestTreeWalk(t *testing.T) {
+ t.Parallel()
+ repo, err := OpenRepository("testdata/TestGitRepository.git")
+ checkFatal(t, err)
+ treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
+ checkFatal(t, err)
+
+ tree, err := repo.LookupTree(treeID)
+ checkFatal(t, err)
+
+ var callCount int
+ err = tree.Walk(func(name string, entry *TreeEntry) error {
+ callCount++
+
+ return nil
+ })
+ checkFatal(t, err)
+ if callCount != 11 {
+ t.Fatalf("got called %v times, want %v", callCount, 11)
+ }
+}
+
+func TestTreeWalkSkip(t *testing.T) {
+ t.Parallel()
+ repo, err := OpenRepository("testdata/TestGitRepository.git")
+ checkFatal(t, err)
+ treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
+ checkFatal(t, err)
+
+ tree, err := repo.LookupTree(treeID)
+ checkFatal(t, err)
+
+ var callCount int
+ err = tree.Walk(func(name string, entry *TreeEntry) error {
+ callCount++
+
+ return TreeWalkSkip
+ })
+ checkFatal(t, err)
+ if callCount != 4 {
+ t.Fatalf("got called %v times, want %v", callCount, 4)
+ }
+}
+
+func TestTreeWalkStop(t *testing.T) {
+ t.Parallel()
+ repo, err := OpenRepository("testdata/TestGitRepository.git")
+ checkFatal(t, err)
+ treeID, err := NewOid("6020a3b8d5d636e549ccbd0c53e2764684bb3125")
+ checkFatal(t, err)
+
+ tree, err := repo.LookupTree(treeID)
+ checkFatal(t, err)
+
+ var callCount int
+ stopError := errors.New("stop")
+ err = tree.Walk(func(name string, entry *TreeEntry) error {
+ callCount++
+
+ return stopError
+ })
+ if err != stopError {
+ t.Fatalf("got error %v, want %v", err, stopError)
+ }
+ if callCount != 1 {
+ t.Fatalf("got called %v times, want %v", callCount, 1)
+ }
+}