2013-04-16 16:18:35 -05:00
|
|
|
package git
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestObjectPoymorphism(t *testing.T) {
|
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
|
|
|
|
2013-04-16 16:18:35 -05:00
|
|
|
commitId, treeId := seedTestRepo(t, repo)
|
|
|
|
|
|
|
|
var obj Object
|
|
|
|
|
|
|
|
commit, err := repo.LookupCommit(commitId)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
obj = commit
|
2013-09-12 03:40:57 -05:00
|
|
|
if obj.Type() != ObjectCommit {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
|
|
|
|
}
|
|
|
|
|
2013-09-12 03:40:57 -05:00
|
|
|
commitTree, err := commit.Tree()
|
|
|
|
checkFatal(t, err)
|
|
|
|
commitTree.EntryCount()
|
|
|
|
|
2013-04-16 16:18:35 -05:00
|
|
|
tree, err := repo.LookupTree(treeId)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
obj = tree
|
2013-09-12 03:40:57 -05:00
|
|
|
if obj.Type() != ObjectTree {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Wrong object type, expected tree, have %v", obj.Type())
|
|
|
|
}
|
|
|
|
|
|
|
|
tree2, ok := obj.(*Tree)
|
|
|
|
if !ok {
|
|
|
|
t.Fatalf("Converting back to *Tree is not ok")
|
|
|
|
}
|
|
|
|
|
2013-09-09 07:21:16 -05:00
|
|
|
entry := tree2.EntryByName("README")
|
|
|
|
if entry == nil {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Tree did not have expected \"README\" entry")
|
|
|
|
}
|
|
|
|
|
2013-09-09 07:21:16 -05:00
|
|
|
if entry.Filemode != FilemodeBlob {
|
|
|
|
t.Fatal("Wrong filemode for \"README\"")
|
|
|
|
}
|
|
|
|
|
2013-04-16 16:18:35 -05:00
|
|
|
_, ok = obj.(*Commit)
|
|
|
|
if ok {
|
|
|
|
t.Fatalf("*Tree is somehow the same as *Commit")
|
|
|
|
}
|
|
|
|
|
|
|
|
obj, err = repo.Lookup(tree.Id())
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
_, ok = obj.(*Tree)
|
|
|
|
if !ok {
|
|
|
|
t.Fatalf("Lookup creates the wrong type")
|
|
|
|
}
|
|
|
|
|
2013-09-12 03:40:57 -05:00
|
|
|
if obj.Type() != ObjectTree {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Type() doesn't agree with dynamic type")
|
|
|
|
}
|
|
|
|
|
|
|
|
obj, err = repo.RevparseSingle("HEAD")
|
|
|
|
checkFatal(t, err)
|
2013-09-12 03:40:57 -05:00
|
|
|
if obj.Type() != ObjectCommit || obj.Id().String() != commit.Id().String() {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Failed to parse the right revision")
|
|
|
|
}
|
|
|
|
|
|
|
|
obj, err = repo.RevparseSingle("HEAD^{tree}")
|
|
|
|
checkFatal(t, err)
|
2013-09-12 03:40:57 -05:00
|
|
|
if obj.Type() != ObjectTree || obj.Id().String() != tree.Id().String() {
|
2013-04-16 16:18:35 -05:00
|
|
|
t.Fatalf("Failed to parse the right revision")
|
|
|
|
}
|
|
|
|
}
|
2014-05-25 02:06:18 -05:00
|
|
|
|
|
|
|
func checkOwner(t *testing.T, repo *Repository, obj Object) {
|
|
|
|
owner := obj.Owner()
|
|
|
|
if owner == nil {
|
|
|
|
t.Fatal("bad owner")
|
|
|
|
}
|
|
|
|
|
|
|
|
if owner.ptr != repo.ptr {
|
|
|
|
t.Fatalf("bad owner, got %v expected %v\n", owner.ptr, repo.ptr)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestObjectOwner(t *testing.T) {
|
|
|
|
repo := createTestRepo(t)
|
2015-04-24 05:59:29 -05:00
|
|
|
defer cleanupTestRepo(t, repo)
|
|
|
|
|
2014-05-25 02:06:18 -05:00
|
|
|
commitId, treeId := seedTestRepo(t, repo)
|
|
|
|
|
|
|
|
commit, err := repo.LookupCommit(commitId)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
tree, err := repo.LookupTree(treeId)
|
|
|
|
checkFatal(t, err)
|
|
|
|
|
|
|
|
checkOwner(t, repo, commit)
|
|
|
|
checkOwner(t, repo, tree)
|
|
|
|
}
|