Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class SettingsEnvResolverTests
8{
9 [Fact]
10 public void Resolve_prefers_non_empty_environment_over_literal()
11 {
12 var name = "CASCADE_TEST_SETTINGS_ENV_" + Guid.NewGuid().ToString("N");
13 try
14 {
15 Environment.SetEnvironmentVariable(name, @"C:\from-env\tool.exe");
16 var value = SettingsEnvResolver.Resolve(@"C:\literal.exe", name);
17 Assert.Equal(@"C:\from-env\tool.exe", value);
18 }
19 finally
20 {
21 Environment.SetEnvironmentVariable(name, null);
22 }
23 }
24
25 [Fact]
26 public void ResolveLaunchPath_PATH_sentinel_returns_empty_not_process_PATH_variable()
27 {
28 var pathList = Environment.GetEnvironmentVariable("PATH");
29 try
30 {
31 Environment.SetEnvironmentVariable("PATH", @"C:\should-not-be-used-as-exe.exe");
32 Assert.Equal("", SettingsEnvResolver.ResolveLaunchPath(@"C:\literal.exe", "PATH"));
33 Assert.Equal("", SettingsEnvResolver.ResolveLaunchPath("", "path"));
34
35 var settings = new CascadeIdeSettings
36 {
37 Languages = new LanguagesSettings
38 {
39 CSharp = new CSharpLanguageServerSettings
40 {
41 Mode = "OmniSharp",
42 OmniSharp = new LanguageServerLaunchProfile
43 {
44 Executable = @"C:\ignored-when-path-sentinel.exe",
45 ExecutableEnv = "PATH",
46 },
47 },
48 },
49 };
50
51 var (_, exe, _) = settings.Languages.CSharp.ResolveForRuntime();
52 Assert.Equal("", exe);
53 }
54 finally
55 {
56 Environment.SetEnvironmentVariable("PATH", pathList);
57 }
58 }
59
60 [Fact]
61 public void Resolve_falls_back_to_literal_when_env_missing_or_empty()
62 {
63 var name = "CASCADE_TEST_MISSING_" + Guid.NewGuid().ToString("N");
64 Assert.Equal("literal", SettingsEnvResolver.Resolve("literal", name));
65 Assert.Equal("literal", SettingsEnvResolver.Resolve("literal", ""));
66 }
67
68 [Fact]
69 public void Language_profile_executable_env_applied_in_ResolveForRuntime()
70 {
71 var name = "CASCADE_TEST_LSP_EXE_" + Guid.NewGuid().ToString("N");
72 try
73 {
74 Environment.SetEnvironmentVariable(name, @"D:\tools\OmniSharp.exe");
75 var settings = new CascadeIdeSettings
76 {
77 Languages = new LanguagesSettings
78 {
79 CSharp = new CSharpLanguageServerSettings
80 {
81 Mode = "OmniSharp",
82 OmniSharp = new LanguageServerLaunchProfile
83 {
84 Executable = "",
85 ExecutableEnv = name,
86 },
87 },
88 },
89 };
90
91 var (_, exe, _) = settings.Languages.CSharp.ResolveForRuntime();
92 Assert.Equal(@"D:\tools\OmniSharp.exe", exe);
93 }
94 finally
95 {
96 Environment.SetEnvironmentVariable(name, null);
97 }
98 }
99
100 [Fact]
101 public void Intercom_transport_resolves_base_url_from_env()
102 {
103 var name = "CASCADE_TEST_INTERCOM_URL_" + Guid.NewGuid().ToString("N");
104 try
105 {
106 Environment.SetEnvironmentVariable(name, "http://127.0.0.1:9090");
107 var t = new IntercomTransportSettings
108 {
109 BaseUrl = "http://127.0.0.1:5080",
110 BaseUrlEnv = name,
111 };
112 Assert.Equal("http://127.0.0.1:9090", t.ResolveBaseUrl());
113 }
114 finally
115 {
116 Environment.SetEnvironmentVariable(name, null);
117 }
118 }
119}
120
View only · write via MCP/CIDE