ref: bf504c5af1559dc2f4149a7e9359374345683724
parent: 564c8ecc84ed1bfc28ea3a0251020051906b8548
author: Runxi Yu <me@runxiyu.org>
date: Fri Feb 20 23:55:47 EST 2026
objectstore/loose: Move test helpers to their own file
--- /dev/null
+++ b/objectstore/loose/helpers_test.go
@@ -1,0 +1,63 @@
+package loose_test
+
+import (
+ "io"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "codeberg.org/lindenii/furgit/internal/testgit"
+ "codeberg.org/lindenii/furgit/objectheader"
+ "codeberg.org/lindenii/furgit/objectid"
+ "codeberg.org/lindenii/furgit/objectstore/loose"
+ "codeberg.org/lindenii/furgit/objecttype"
+)
+
+func openLooseStore(t *testing.T, repoPath string, algo objectid.Algorithm) *loose.Store {+ t.Helper()
+ objectsPath := filepath.Join(repoPath, "objects")
+ root, err := os.OpenRoot(objectsPath)
+ if err != nil {+ t.Fatalf("OpenRoot(%q): %v", objectsPath, err)+ }
+ t.Cleanup(func() { _ = root.Close() })+
+ store, err := loose.New(root, algo)
+ if err != nil {+ t.Fatalf("loose.New: %v", err)+ }
+ return store
+}
+
+func mustReadAllAndClose(t *testing.T, reader io.ReadCloser) []byte {+ t.Helper()
+ data, err := io.ReadAll(reader)
+ if err != nil {+ _ = reader.Close()
+ t.Fatalf("ReadAll: %v", err)+ }
+ if err := reader.Close(); err != nil {+ t.Fatalf("Close: %v", err)+ }
+ return data
+}
+
+func expectedRawObject(t *testing.T, testRepo *testgit.TestRepo, id objectid.ObjectID) (objecttype.Type, []byte, []byte) {+ t.Helper()
+
+ typeName := testRepo.Run(t, "cat-file", "-t", id.String())
+ ty, ok := objecttype.ParseName(typeName)
+ if !ok {+ t.Fatalf("ParseName(%q) failed", typeName)+ }
+ body := testRepo.CatFile(t, typeName, id)
+ header, ok := objectheader.Encode(ty, int64(len(body)))
+ if !ok {+ t.Fatalf("objectheader.Encode failed")+ }
+
+ raw := make([]byte, len(header)+len(body))
+ copy(raw, header)
+ copy(raw[len(header):], body)
+ return ty, body, raw
+}
--- a/objectstore/loose/read_test.go
+++ b/objectstore/loose/read_test.go
@@ -3,68 +3,15 @@
import (
"bytes"
"errors"
- "io"
"os"
- "path/filepath"
"strings"
"testing"
"codeberg.org/lindenii/furgit/internal/testgit"
- "codeberg.org/lindenii/furgit/objectheader"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objectstore"
"codeberg.org/lindenii/furgit/objectstore/loose"
- "codeberg.org/lindenii/furgit/objecttype"
)
-
-func openLooseStore(t *testing.T, repoPath string, algo objectid.Algorithm) *loose.Store {- t.Helper()
- objectsPath := filepath.Join(repoPath, "objects")
- root, err := os.OpenRoot(objectsPath)
- if err != nil {- t.Fatalf("OpenRoot(%q): %v", objectsPath, err)- }
- t.Cleanup(func() { _ = root.Close() })-
- store, err := loose.New(root, algo)
- if err != nil {- t.Fatalf("loose.New: %v", err)- }
- return store
-}
-
-func mustReadAllAndClose(t *testing.T, reader io.ReadCloser) []byte {- t.Helper()
- data, err := io.ReadAll(reader)
- if err != nil {- _ = reader.Close()
- t.Fatalf("ReadAll: %v", err)- }
- if err := reader.Close(); err != nil {- t.Fatalf("Close: %v", err)- }
- return data
-}
-
-func expectedRawObject(t *testing.T, testRepo *testgit.TestRepo, id objectid.ObjectID) (objecttype.Type, []byte, []byte) {- t.Helper()
-
- typeName := testRepo.Run(t, "cat-file", "-t", id.String())
- ty, ok := objecttype.ParseName(typeName)
- if !ok {- t.Fatalf("ParseName(%q) failed", typeName)- }
- body := testRepo.CatFile(t, typeName, id)
- header, ok := objectheader.Encode(ty, int64(len(body)))
- if !ok {- t.Fatalf("objectheader.Encode failed")- }
-
- raw := make([]byte, len(header)+len(body))
- copy(raw, header)
- copy(raw[len(header):], body)
- return ty, body, raw
-}
func TestLooseStoreReadAgainstGit(t *testing.T) { testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {--
⑨