summaryrefslogtreecommitdiff
path: root/reference_test.go
diff options
context:
space:
mode:
authorCarlos Martín Nieto <[email protected]>2013-03-06 20:07:23 +0100
committerCarlos Martín Nieto <[email protected]>2013-03-07 21:01:21 +0100
commitddbe13dab41dba7854b4c4f0c67a9abd9ed8a706 (patch)
tree1ab0c03892fc940fd1026f2134dd8bae648f50c9 /reference_test.go
parent1a7956379497387111191f7f7017167569ef0387 (diff)
Add a test for references
Diffstat (limited to 'reference_test.go')
-rw-r--r--reference_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/reference_test.go b/reference_test.go
new file mode 100644
index 0000000..c2da93e
--- /dev/null
+++ b/reference_test.go
@@ -0,0 +1,74 @@
+package git
+
+import (
+ "os"
+ "runtime"
+ "testing"
+ "time"
+)
+
+func TestRefModification(t *testing.T) {
+ repo := createTestRepo(t)
+ defer os.RemoveAll(repo.Path())
+
+ loc, err := time.LoadLocation("Europe/Berlin")
+ checkFatal(t, err)
+ sig := &Signature{
+ Name: "Rand Om Hacker",
+ Email: "[email protected]",
+ 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)
+
+ _, err = repo.CreateReference("refs/tags/tree", treeId, true)
+ checkFatal(t, err)
+
+ tag, err := repo.LookupReference("refs/tags/tree")
+ checkFatal(t, err)
+ checkRefType(t, tag, OID)
+
+ ref, err := repo.LookupReference("HEAD")
+ checkFatal(t, err)
+ checkRefType(t, ref, SYMBOLIC)
+
+ ref, err = ref.Resolve()
+ checkFatal(t, err)
+ checkRefType(t, ref, OID)
+
+ if commitId.String() != ref.Target().String() {
+ t.Fatalf("Wrong ref target")
+ }
+
+ _, err = tag.Rename("refs/tags/renamed", false)
+ checkFatal(t, err)
+ tag, err = repo.LookupReference("refs/tags/renamed")
+ checkFatal(t, err)
+ checkRefType(t, ref, OID)
+
+}
+
+func checkRefType(t *testing.T, ref *Reference, kind int) {
+ if ref.Type() == kind {
+ return
+ }
+
+ // The failure happens at wherever we were called, not here
+ _, file, line, ok := runtime.Caller(1)
+ if !ok {
+ t.Fatal()
+ }
+
+ t.Fatalf("Wrong ref type at %v:%v; have %v, expected %v", file, line, ref.Type(), kind)
+}