@@ -109,6 +109,131 @@ func TestShimsDir(t *testing.T) {
109109 }
110110}
111111
112+ func TestShimsDir_WithDTVEMROOT (t * testing.T ) {
113+ // Save original environment
114+ originalRoot := os .Getenv ("DTVEM_ROOT" )
115+ defer func () {
116+ if originalRoot != "" {
117+ _ = os .Setenv ("DTVEM_ROOT" , originalRoot )
118+ } else {
119+ _ = os .Unsetenv ("DTVEM_ROOT" )
120+ }
121+ }()
122+
123+ // Set custom DTVEM_ROOT
124+ customRoot := filepath .Join (os .TempDir (), "custom-dtvem-root" )
125+ _ = os .Setenv ("DTVEM_ROOT" , customRoot )
126+
127+ result := ShimsDir ()
128+ expected := filepath .Join (customRoot , "shims" )
129+ if result != expected {
130+ t .Errorf ("ShimsDir() with DTVEM_ROOT=%q = %q, want %q" , customRoot , result , expected )
131+ }
132+ }
133+
134+ func TestShimsDir_NonLinux_WithXDG (t * testing.T ) {
135+ // On non-Linux platforms, verify that XDG_DATA_HOME is respected when set
136+ if runtime .GOOS == constants .OSLinux {
137+ t .Skip ("This test only runs on non-Linux platforms" )
138+ }
139+
140+ // Save original environment
141+ originalRoot := os .Getenv ("DTVEM_ROOT" )
142+ originalXDG := os .Getenv ("XDG_DATA_HOME" )
143+ defer func () {
144+ if originalRoot != "" {
145+ _ = os .Setenv ("DTVEM_ROOT" , originalRoot )
146+ } else {
147+ _ = os .Unsetenv ("DTVEM_ROOT" )
148+ }
149+ if originalXDG != "" {
150+ _ = os .Setenv ("XDG_DATA_HOME" , originalXDG )
151+ } else {
152+ _ = os .Unsetenv ("XDG_DATA_HOME" )
153+ }
154+ }()
155+
156+ // Clear DTVEM_ROOT and set XDG_DATA_HOME
157+ _ = os .Unsetenv ("DTVEM_ROOT" )
158+ customXDG := filepath .Join (os .TempDir (), "custom-xdg-data" )
159+ _ = os .Setenv ("XDG_DATA_HOME" , customXDG )
160+
161+ result := ShimsDir ()
162+ expected := filepath .Join (customXDG , "dtvem" , "shims" )
163+
164+ if result != expected {
165+ t .Errorf ("ShimsDir() on %s should use XDG_DATA_HOME when set, got %q, want %q" ,
166+ runtime .GOOS , result , expected )
167+ }
168+ }
169+
170+ func TestShimsDir_NonLinux_WithoutXDG (t * testing.T ) {
171+ // On non-Linux platforms, verify that ~/.dtvem/shims is used when XDG_DATA_HOME is not set
172+ if runtime .GOOS == constants .OSLinux {
173+ t .Skip ("This test only runs on non-Linux platforms" )
174+ }
175+
176+ // Save original environment
177+ originalRoot := os .Getenv ("DTVEM_ROOT" )
178+ originalXDG := os .Getenv ("XDG_DATA_HOME" )
179+ defer func () {
180+ if originalRoot != "" {
181+ _ = os .Setenv ("DTVEM_ROOT" , originalRoot )
182+ } else {
183+ _ = os .Unsetenv ("DTVEM_ROOT" )
184+ }
185+ if originalXDG != "" {
186+ _ = os .Setenv ("XDG_DATA_HOME" , originalXDG )
187+ } else {
188+ _ = os .Unsetenv ("XDG_DATA_HOME" )
189+ }
190+ }()
191+
192+ // Clear both DTVEM_ROOT and XDG_DATA_HOME
193+ _ = os .Unsetenv ("DTVEM_ROOT" )
194+ _ = os .Unsetenv ("XDG_DATA_HOME" )
195+
196+ result := ShimsDir ()
197+ home , _ := os .UserHomeDir ()
198+ expected := filepath .Join (home , ".dtvem" , "shims" )
199+
200+ if result != expected {
201+ t .Errorf ("ShimsDir() on %s without XDG_DATA_HOME should use ~/.dtvem/shims, got %q, want %q" ,
202+ runtime .GOOS , result , expected )
203+ }
204+ }
205+
206+ func TestShimsDir_DTVEMRootOverridesXDG (t * testing.T ) {
207+ // Verify that DTVEM_ROOT takes precedence over XDG_DATA_HOME
208+ originalRoot := os .Getenv ("DTVEM_ROOT" )
209+ originalXDG := os .Getenv ("XDG_DATA_HOME" )
210+ defer func () {
211+ if originalRoot != "" {
212+ _ = os .Setenv ("DTVEM_ROOT" , originalRoot )
213+ } else {
214+ _ = os .Unsetenv ("DTVEM_ROOT" )
215+ }
216+ if originalXDG != "" {
217+ _ = os .Setenv ("XDG_DATA_HOME" , originalXDG )
218+ } else {
219+ _ = os .Unsetenv ("XDG_DATA_HOME" )
220+ }
221+ }()
222+
223+ // Set both DTVEM_ROOT and XDG_DATA_HOME
224+ customRoot := filepath .Join (os .TempDir (), "custom-dtvem-root" )
225+ _ = os .Setenv ("DTVEM_ROOT" , customRoot )
226+ _ = os .Setenv ("XDG_DATA_HOME" , filepath .Join (os .TempDir (), "should-be-ignored" ))
227+
228+ result := ShimsDir ()
229+ expected := filepath .Join (customRoot , "shims" )
230+
231+ if result != expected {
232+ t .Errorf ("ShimsDir() with DTVEM_ROOT set should return DTVEM_ROOT/shims, got %q, want %q" ,
233+ result , expected )
234+ }
235+ }
236+
112237func TestLookPathExcludingShims (t * testing.T ) {
113238 originalPath := os .Getenv ("PATH" )
114239 defer func () { _ = os .Setenv ("PATH" , originalPath ) }()
0 commit comments