summaryrefslogtreecommitdiff
path: root/object_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'object_test.go')
-rw-r--r--object_test.go85
1 files changed, 74 insertions, 11 deletions
diff --git a/object_test.go b/object_test.go
index aa295e5..cb262de 100644
--- a/object_test.go
+++ b/object_test.go
@@ -5,17 +5,18 @@ import (
)
func TestObjectPoymorphism(t *testing.T) {
+ t.Parallel()
repo := createTestRepo(t)
defer cleanupTestRepo(t, repo)
commitId, treeId := seedTestRepo(t, repo)
- var obj Object
+ var obj *Object
commit, err := repo.LookupCommit(commitId)
checkFatal(t, err)
- obj = commit
+ obj = &commit.Object
if obj.Type() != ObjectCommit {
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
}
@@ -27,13 +28,13 @@ func TestObjectPoymorphism(t *testing.T) {
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
- obj = tree
+ obj = &tree.Object
if obj.Type() != ObjectTree {
t.Fatalf("Wrong object type, expected tree, have %v", obj.Type())
}
- tree2, ok := obj.(*Tree)
- if !ok {
+ tree2, err := obj.AsTree()
+ if err != nil {
t.Fatalf("Converting back to *Tree is not ok")
}
@@ -46,16 +47,16 @@ func TestObjectPoymorphism(t *testing.T) {
t.Fatal("Wrong filemode for \"README\"")
}
- _, ok = obj.(*Commit)
- if ok {
+ _, err = obj.AsCommit()
+ if err == nil {
t.Fatalf("*Tree is somehow the same as *Commit")
}
obj, err = repo.Lookup(tree.Id())
checkFatal(t, err)
- _, ok = obj.(*Tree)
- if !ok {
+ _, err = obj.AsTree()
+ if err != nil {
t.Fatalf("Lookup creates the wrong type")
}
@@ -88,6 +89,7 @@ func checkOwner(t *testing.T, repo *Repository, obj Object) {
}
func TestObjectOwner(t *testing.T) {
+ t.Parallel()
repo := createTestRepo(t)
defer cleanupTestRepo(t, repo)
@@ -99,6 +101,67 @@ func TestObjectOwner(t *testing.T) {
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
- checkOwner(t, repo, commit)
- checkOwner(t, repo, tree)
+ checkOwner(t, repo, commit.Object)
+ checkOwner(t, repo, tree.Object)
+}
+
+func TestObjectPeel(t *testing.T) {
+ t.Parallel()
+ repo := createTestRepo(t)
+ defer cleanupTestRepo(t, repo)
+
+ commitID, treeID := seedTestRepo(t, repo)
+
+ var obj *Object
+
+ commit, err := repo.LookupCommit(commitID)
+ checkFatal(t, err)
+
+ obj, err = commit.Peel(ObjectAny)
+ checkFatal(t, err)
+
+ if obj.Type() != ObjectTree {
+ t.Fatalf("Wrong object type when peeling a commit, expected tree, have %v", obj.Type())
+ }
+
+ obj, err = commit.Peel(ObjectTag)
+
+ if !IsErrorCode(err, ErrInvalidSpec) {
+ t.Fatalf("Wrong error when peeling a commit to a tag, expected ErrInvalidSpec, have %v", err)
+ }
+
+ tree, err := repo.LookupTree(treeID)
+ checkFatal(t, err)
+
+ obj, err = tree.Peel(ObjectAny)
+
+ if !IsErrorCode(err, ErrInvalidSpec) {
+ t.Fatalf("Wrong error when peeling a tree, expected ErrInvalidSpec, have %v", err)
+ }
+
+ entry := tree.EntryByName("README")
+
+ blob, err := repo.LookupBlob(entry.Id)
+ checkFatal(t, err)
+
+ obj, err = blob.Peel(ObjectAny)
+
+ if !IsErrorCode(err, ErrInvalidSpec) {
+ t.Fatalf("Wrong error when peeling a blob, expected ErrInvalidSpec, have %v", err)
+ }
+
+ tagID := createTestTag(t, repo, commit)
+
+ tag, err := repo.LookupTag(tagID)
+ checkFatal(t, err)
+
+ obj, err = tag.Peel(ObjectAny)
+ checkFatal(t, err)
+
+ if obj.Type() != ObjectCommit {
+ t.Fatalf("Wrong object type when peeling a tag, expected commit, have %v", obj.Type())
+ }
+
+ // TODO: Should test a tag that annotates a different object than a commit
+ // but it's impossible at the moment to tag such an object.
}