aboutsummaryrefslogtreecommitdiff
path: root/testutil_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-16 00:00:00 +0000
committerGravatar Runxi Yu2025-11-16 00:00:00 +0000
commitbad0f9715556a470d0de2a22c7040181e3a033ba (patch)
tree21463072ce5bc85682a887ce0cae26d833941af3 /testutil_test.go
parentEntryRecursive should return ErrNotFound instead of nil, nil (diff)
signature
Use actual git for tests and enhance Head
Diffstat (limited to 'testutil_test.go')
-rw-r--r--testutil_test.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/testutil_test.go b/testutil_test.go
new file mode 100644
index 00000000..bca6db14
--- /dev/null
+++ b/testutil_test.go
@@ -0,0 +1,67 @@
+package furgit
+
+import (
+ "bytes"
+ "os"
+ "os/exec"
+ "strings"
+ "testing"
+)
+
+func setupWorkDir(t *testing.T) (string, func()) {
+ t.Helper()
+ workDir, err := os.MkdirTemp("", "furgit-work-*")
+ if err != nil {
+ t.Fatalf("failed to create work dir: %v", err)
+ }
+ return workDir, func() { _ = os.RemoveAll(workDir) }
+}
+
+func gitCmd(t *testing.T, dir string, args ...string) string {
+ t.Helper()
+ cmd := exec.Command("git", args...)
+ cmd.Dir = dir
+ cmd.Env = append(os.Environ(),
+ "GIT_CONFIG_GLOBAL=/dev/null",
+ "GIT_CONFIG_SYSTEM=/dev/null",
+ "GIT_AUTHOR_NAME=Test Author",
+ "GIT_AUTHOR_EMAIL=test@example.org",
+ "GIT_COMMITTER_NAME=Test Committer",
+ "GIT_COMMITTER_EMAIL=committer@example.org",
+ "GIT_AUTHOR_DATE=1234567890 +0000",
+ "GIT_COMMITTER_DATE=1234567890 +0000",
+ )
+ output, err := cmd.CombinedOutput()
+ if err != nil {
+ t.Fatalf("git %v failed: %v\n%s", args, err, output)
+ }
+ return strings.TrimSpace(string(output))
+}
+
+func gitHashObject(t *testing.T, dir, objType string, data []byte) string {
+ t.Helper()
+ cmd := exec.Command("git", "hash-object", "-t", objType, "-w", "--stdin")
+ cmd.Dir = dir
+ cmd.Stdin = bytes.NewReader(data)
+ cmd.Env = append(os.Environ(), "GIT_CONFIG_GLOBAL=/dev/null", "GIT_CONFIG_SYSTEM=/dev/null")
+ output, err := cmd.CombinedOutput()
+ if err != nil {
+ t.Fatalf("git hash-object failed: %v\n%s", err, output)
+ }
+ return strings.TrimSpace(string(output))
+}
+
+func gitCatFile(t *testing.T, dir, objType, hash string) []byte {
+ t.Helper()
+ cmd := exec.Command("git", "cat-file", objType, hash)
+ cmd.Dir = dir
+ cmd.Env = append(os.Environ(), "GIT_CONFIG_GLOBAL=/dev/null", "GIT_CONFIG_SYSTEM=/dev/null")
+ output, err := cmd.CombinedOutput()
+ if err != nil {
+ t.Fatalf("git cat-file %s %s failed: %v\n%s", objType, hash, err, output)
+ }
+ if objType == "-t" || objType == "-s" {
+ return bytes.TrimSpace(output)
+ }
+ return output
+}