| 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") |
| } |
| } |
| |
| 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) |
| defer os.RemoveAll(repo.Workdir()) |
| 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) |
| } |