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}