78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
package git
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestObjectPoymorphism(t *testing.T) {
|
|
repo := createTestRepo(t)
|
|
defer os.RemoveAll(repo.Workdir())
|
|
commitId, treeId := seedTestRepo(t, repo)
|
|
|
|
var obj Object
|
|
|
|
commit, err := repo.LookupCommit(commitId)
|
|
checkFatal(t, err)
|
|
|
|
obj = commit
|
|
if obj.Type() != ObjectCommit {
|
|
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
|
|
}
|
|
|
|
commitTree, err := commit.Tree()
|
|
checkFatal(t, err)
|
|
commitTree.EntryCount()
|
|
|
|
tree, err := repo.LookupTree(treeId)
|
|
checkFatal(t, err)
|
|
|
|
obj = tree
|
|
if obj.Type() != ObjectTree {
|
|
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")
|
|
}
|
|
|
|
entry := tree2.EntryByName("README")
|
|
if entry == nil {
|
|
t.Fatalf("Tree did not have expected \"README\" entry")
|
|
}
|
|
|
|
if entry.Filemode != FilemodeBlob {
|
|
t.Fatal("Wrong filemode for \"README\"")
|
|
}
|
|
|
|
_, 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")
|
|
}
|
|
|
|
if obj.Type() != ObjectTree {
|
|
t.Fatalf("Type() doesn't agree with dynamic type")
|
|
}
|
|
|
|
obj, err = repo.RevparseSingle("HEAD")
|
|
checkFatal(t, err)
|
|
if obj.Type() != ObjectCommit || obj.Id().String() != commit.Id().String() {
|
|
t.Fatalf("Failed to parse the right revision")
|
|
}
|
|
|
|
obj, err = repo.RevparseSingle("HEAD^{tree}")
|
|
checkFatal(t, err)
|
|
if obj.Type() != ObjectTree || obj.Id().String() != tree.Id().String() {
|
|
t.Fatalf("Failed to parse the right revision")
|
|
}
|
|
}
|