1package prompt
2
3import (
4 "os"
5 "strings"
6 "testing"
7
8 "github.com/charmbracelet/crush/internal/home"
9)
10
11func TestExpandPath(t *testing.T) {
12 tests := []struct {
13 name string
14 input string
15 expected func() string
16 }{
17 {
18 name: "regular path unchanged",
19 input: "/absolute/path",
20 expected: func() string {
21 return "/absolute/path"
22 },
23 },
24 {
25 name: "tilde expansion",
26 input: "~/documents",
27 expected: func() string {
28 return home.Dir() + "/documents"
29 },
30 },
31 {
32 name: "tilde only",
33 input: "~",
34 expected: func() string {
35 return home.Dir()
36 },
37 },
38 {
39 name: "environment variable expansion",
40 input: "$HOME",
41 expected: func() string {
42 return os.Getenv("HOME")
43 },
44 },
45 {
46 name: "relative path unchanged",
47 input: "relative/path",
48 expected: func() string {
49 return "relative/path"
50 },
51 },
52 }
53
54 for _, tt := range tests {
55 t.Run(tt.name, func(t *testing.T) {
56 result := expandPath(tt.input)
57 expected := tt.expected()
58
59 // Skip test if environment variable is not set
60 if strings.HasPrefix(tt.input, "$") && expected == "" {
61 t.Skip("Environment variable not set")
62 }
63
64 if result != expected {
65 t.Errorf("expandPath(%q) = %q, want %q", tt.input, result, expected)
66 }
67 })
68 }
69}