Parent directory

repo_test.go

2223 bytes
 1package git
 2
 3import (
 4	"context"
 5	"os"
 6	"os/exec"
 7	"path/filepath"
 8	"strings"
 9	"testing"
10)
11
12// setupTestRepo creates a temp git repo containing dot_config/bat and returns
13// the opened repository and its HEAD reference.
14func setupTestRepo(t *testing.T) (*Repository, *Reference) {
15	t.Helper()
16	ctx := context.Background()
17
18	repoPath := filepath.Join(t.TempDir(), "test-repo")
19	nestedDir := filepath.Join(repoPath, "dot_config")
20	if err := os.MkdirAll(nestedDir, 0o755); err != nil {
21		t.Fatal(err)
22	}
23	if err := os.WriteFile(filepath.Join(nestedDir, "bat"), []byte("test content"), 0o644); err != nil {
24		t.Fatal(err)
25	}
26
27	for _, args := range [][]string{
28		{"init"},
29		{"add", "."},
30		{"-c", "user.email=test@example.com", "-c", "user.name=Test", "commit", "-m", "init"},
31	} {
32		cmd := exec.CommandContext(ctx, "git", args...)
33		cmd.Dir = repoPath
34		if out, err := cmd.CombinedOutput(); err != nil {
35			t.Fatalf("git %s failed: %v\n%s", args[0], err, out)
36		}
37	}
38
39	repo, err := Open(repoPath)
40	if err != nil {
41		t.Fatalf("failed to open repository: %v", err)
42	}
43	ref, err := repo.HEAD()
44	if err != nil {
45		t.Fatalf("failed to get HEAD: %v", err)
46	}
47	return repo, ref
48}
49
50func TestTreePathForwardSlashes(t *testing.T) {
51	repo, ref := setupTestRepo(t)
52
53	// TreePath should clean the double slash and resolve the directory.
54	tree, err := repo.TreePath(ref, "dot_config//")
55	if err != nil {
56		t.Fatalf("TreePath failed: %v", err)
57	}
58
59	entries, err := tree.Entries()
60	if err != nil {
61		t.Fatalf("failed to get entries: %v", err)
62	}
63
64	for _, e := range entries {
65		path := e.File().Path()
66		if strings.Contains(path, `\`) {
67			t.Errorf("entry path contains backslash: %q", path)
68		}
69	}
70}
71
72func TestTreeEntryPathForwardSlashes(t *testing.T) {
73	repo, ref := setupTestRepo(t)
74
75	tree, err := repo.TreePath(ref, "dot_config")
76	if err != nil {
77		t.Fatalf("TreePath failed: %v", err)
78	}
79
80	entries, err := tree.Entries()
81	if err != nil {
82		t.Fatalf("failed to get entries: %v", err)
83	}
84
85	for _, e := range entries {
86		path := e.File().Path()
87		if strings.Contains(path, `\`) {
88			t.Errorf("entry path contains backslash: %q", path)
89		}
90		if !strings.Contains(path, "/") {
91			t.Errorf("expected forward slash in path: %q", path)
92		}
93	}
94}