Skip to content

Commit

Permalink
Add @carlosmn's tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vmg committed Apr 16, 2013
1 parent d190d8a commit 7292caf
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 41 deletions.
47 changes: 47 additions & 0 deletions git_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package git

import (
"testing"
"io/ioutil"
"time"
)

func createTestRepo(t *testing.T) *Repository {
// figure out where we can create the test repo
path, err := ioutil.TempDir("", "git2go")
checkFatal(t, err)
repo, err := InitRepository(path, false)
checkFatal(t, err)

tmpfile := "README"
err = ioutil.WriteFile(path + "/" + tmpfile, []byte("foo\n"), 0644)
checkFatal(t, err)

return repo
}

func seedTestRepo(t *testing.T, repo *Repository) (*Oid, *Oid) {
loc, err := time.LoadLocation("Europe/Berlin")
checkFatal(t, err)
sig := &Signature{
Name: "Rand Om Hacker",
Email: "random@hacker.com",
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
}

idx, err := repo.Index()
checkFatal(t, err)
err = idx.AddByPath("README")
checkFatal(t, err)
treeId, err := idx.WriteTree()
checkFatal(t, err)

message := "This is a commit\n"
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
checkFatal(t, err)

return commitId, treeId
}

15 changes: 0 additions & 15 deletions index_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,8 @@ import (
"os"
"runtime"
"testing"
"io/ioutil"
)

func createTestRepo(t *testing.T) *Repository {
// figure out where we can create the test repo
path, err := ioutil.TempDir("", "git2go")
checkFatal(t, err)
repo, err := InitRepository(path, false)
checkFatal(t, err)

tmpfile := "README"
err = ioutil.WriteFile(path + "/" + tmpfile, []byte("foo\n"), 0644)
checkFatal(t, err)

return repo
}

func TestCreateRepoAndStage(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())
Expand Down
68 changes: 68 additions & 0 deletions object_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
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() != OBJ_COMMIT {
t.Fatalf("Wrong object type, expected commit, have %v", obj.Type())
}

tree, err := repo.LookupTree(treeId)
checkFatal(t, err)

obj = tree
if obj.Type() != OBJ_TREE {
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")
}

if tree2.EntryByName("README") == nil {
t.Fatalf("Tree did not have expected \"README\" entry")
}

_, 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() != OBJ_TREE {
t.Fatalf("Type() doesn't agree with dynamic type")
}

obj, err = repo.RevparseSingle("HEAD")
checkFatal(t, err)
if obj.Type() != OBJ_COMMIT || 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() != OBJ_TREE || obj.Id().String() != tree.Id().String() {
t.Fatalf("Failed to parse the right revision")
}
}
24 changes: 2 additions & 22 deletions reference_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,15 @@ import (
"os"
"runtime"
"testing"
"time"
)

func TestRefModification(t *testing.T) {
repo := createTestRepo(t)
defer os.RemoveAll(repo.Workdir())

loc, err := time.LoadLocation("Europe/Berlin")
checkFatal(t, err)
sig := &Signature{
Name: "Rand Om Hacker",
Email: "random@hacker.com",
When: time.Date(2013, 03, 06, 14, 30, 0, 0, loc),
}

idx, err := repo.Index()
checkFatal(t, err)
err = idx.AddByPath("README")
checkFatal(t, err)
treeId, err := idx.WriteTree()
checkFatal(t, err)

message := "This is a commit\n"
tree, err := repo.LookupTree(treeId)
checkFatal(t, err)
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)
checkFatal(t, err)
commitId, treeId := seedTestRepo(t, repo)

_, err = repo.CreateReference("refs/tags/tree", treeId, true)
_, err := repo.CreateReference("refs/tags/tree", treeId, true)
checkFatal(t, err)

tag, err := repo.LookupReference("refs/tags/tree")
Expand Down
24 changes: 20 additions & 4 deletions repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (v *Repository) Index() (*Index, error) {
return newIndexFromC(ptr), nil
}

func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
func (v *Repository) lookupType(oid *Oid, t ObjectType) (Object, error) {
var ptr *C.git_object
ret := C.git_object_lookup(&ptr, v.ptr, oid.toC(), C.git_otype(t))
if ret < 0 {
Expand All @@ -82,8 +82,12 @@ func (v *Repository) Lookup(oid *Oid, t ObjectType) (Object, error) {
return allocObject(ptr), nil
}

func (v *Repository) Lookup(oid *Oid) (Object, error) {
return v.lookupType(oid, OBJ_ANY)
}

func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
obj, err := v.Lookup(oid, OBJ_TREE)
obj, err := v.lookupType(oid, OBJ_TREE)
if err != nil {
return nil, err
}
Expand All @@ -92,7 +96,7 @@ func (v *Repository) LookupTree(oid *Oid) (*Tree, error) {
}

func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
obj, err := v.Lookup(oid, OBJ_COMMIT)
obj, err := v.lookupType(oid, OBJ_COMMIT)
if err != nil {
return nil, err
}
Expand All @@ -101,7 +105,7 @@ func (v *Repository) LookupCommit(oid *Oid) (*Commit, error) {
}

func (v *Repository) LookupBlob(oid *Oid) (*Blob, error) {
obj, err := v.Lookup(oid, OBJ_BLOB)
obj, err := v.lookupType(oid, OBJ_BLOB)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -247,3 +251,15 @@ func (v *Repository) TreeBuilder() (*TreeBuilder, error) {
return bld, nil
}

func (v *Repository) RevparseSingle(spec string) (Object, error) {
cspec := C.CString(spec)
defer C.free(unsafe.Pointer(cspec))

var ptr *C.git_object
ecode := C.git_revparse_single(&ptr, v.ptr, cspec)
if ecode < 0 {
return nil, LastError()
}

return allocObject(ptr), nil
}

0 comments on commit 7292caf

Please sign in to comment.