Forge
csharpdeeb25a2
1using CascadeIDE.Features.CursorAcp.DataAcquisition;
2using Xunit;
3
4namespace CascadeIDE.Tests;
5
6public sealed class CursorAcpAgentPathTests
7{
8 private static readonly object EnvLock = new();
9
10 [Fact]
11 public void TryResolve_uses_PATH_when_configured_is_empty()
12 {
13 lock (EnvLock)
14 {
15 var oldPath = Environment.GetEnvironmentVariable("PATH");
16 var oldPathExt = Environment.GetEnvironmentVariable("PATHEXT");
17 var tmp = Directory.CreateTempSubdirectory("cascade_cursor_acp_path_");
18 try
19 {
20 var cmd = Path.Combine(tmp.FullName, "cursor-agent.cmd");
21 File.WriteAllText(cmd, "@echo off\r\n");
22
23 Environment.SetEnvironmentVariable("PATH", tmp.FullName);
24 Environment.SetEnvironmentVariable("PATHEXT", ".CMD;.EXE;.BAT");
25
26 var ok = CursorAcpAgentPath.TryResolve("", out var cmdPath, out var workDir);
27
28 Assert.True(ok);
29 Assert.Equal(CanonicalFilePath.Normalize(cmd), cmdPath, StringComparer.OrdinalIgnoreCase);
30 Assert.Equal(CanonicalFilePath.Normalize(tmp.FullName), CanonicalFilePath.Normalize(workDir));
31 }
32 finally
33 {
34 Environment.SetEnvironmentVariable("PATH", oldPath);
35 Environment.SetEnvironmentVariable("PATHEXT", oldPathExt);
36 tmp.Delete(recursive: true);
37 }
38 }
39 }
40
41 [Fact]
42 public void TryResolve_returns_false_when_empty_and_not_in_PATH()
43 {
44 lock (EnvLock)
45 {
46 var oldPath = Environment.GetEnvironmentVariable("PATH");
47 try
48 {
49 Environment.SetEnvironmentVariable("PATH", "");
50 var ok = CursorAcpAgentPath.TryResolve("", out var cmdPath, out var workDir);
51 Assert.False(ok);
52 Assert.Equal("", cmdPath);
53 Assert.Equal("", workDir);
54 }
55 finally
56 {
57 Environment.SetEnvironmentVariable("PATH", oldPath);
58 }
59 }
60 }
61}
62
View only · write via MCP/CIDE