Forge
csharpdeeb25a2
1using CascadeIDE.Models;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class SettingsDefaultsLoaderTests
8{
9 [Fact]
10 public void GetEmbeddedDefaultsToml_ContainsFontsIntercom()
11 {
12 var text = SettingsDefaultsLoader.GetEmbeddedDefaultsToml();
13 Assert.Contains("[fonts.intercom]", text, StringComparison.Ordinal);
14 Assert.Contains("prose_pt = 14", text, StringComparison.Ordinal);
15 Assert.Contains("prose_pt_forward = 14", text, StringComparison.Ordinal);
16 Assert.Contains("[intercom]", text, StringComparison.Ordinal);
17 Assert.Contains("feed_metrics = \"comfortable\"", text, StringComparison.Ordinal);
18 }
19
20 [Fact]
21 public void DeserializeEffective_WithoutUserToml_UsesEmbeddedProsePt()
22 {
23 var s = SettingsDefaultsLoader.CreateDefault();
24 Assert.Equal(14, s.Fonts.Intercom.ProsePt);
25 Assert.Equal(14, s.Fonts.Intercom.ProsePtForward);
26 Assert.Equal(16, s.Fonts.Intercom.ComposerPt);
27 Assert.Equal(14, s.Fonts.Editor.SizePt);
28 Assert.Equal(14f, s.Fonts.Intercom.ResolveProsePt(forwardHost: false));
29 Assert.Equal(14f, s.Fonts.Intercom.ResolveProsePt(forwardHost: true));
30 Assert.Equal(16f, s.Fonts.Intercom.ResolveComposerPt(forwardHost: false));
31 }
32
33 [Fact]
34 public void CreateDefault_MatchesFactoryAiAndWorkspace()
35 {
36 var s = SettingsDefaultsLoader.CreateDefault();
37 Assert.Equal("local", s.Ai.Mode);
38 Assert.Equal("Flight", s.Workspace.Mode);
39 Assert.Equal("intercom", s.Workspace.PrimaryWorkSurface);
40 Assert.True(s.HybridIndex.Enabled);
41 Assert.Equal("rg", s.CommandPalette.GoToSearch.Backend);
42 Assert.True(s.Intercom.UseComfortableFeedMetrics());
43 Assert.Equal(IntercomFeedMetricsModes.Comfortable, s.Intercom.FeedMetrics);
44 }
45
46 [Fact]
47 public void DeserializeEffective_UserOverridesOnlyProsePt_KeepsForwardFromDefaults()
48 {
49 const string user =
50 """
51 [fonts.intercom]
52 prose_pt = 18
53 """;
54
55 var s = SettingsDefaultsLoader.DeserializeEffective(user);
56 Assert.Equal(18, s.Fonts.Intercom.ProsePt);
57 Assert.Equal(14, s.Fonts.Intercom.ProsePtForward);
58 Assert.Equal("Segoe UI", s.Fonts.Intercom.ProseFamily);
59 }
60
61 [Fact]
62 public void DeserializeEffective_UserAiSection_DoesNotClearEmbeddedFonts()
63 {
64 const string user =
65 """
66 [ai]
67 mode = "mcp_only"
68 """;
69
70 var s = SettingsDefaultsLoader.DeserializeEffective(user);
71 Assert.Equal("mcp_only", s.Ai.Mode);
72 Assert.Equal(14, s.Fonts.Intercom.ProsePt);
73 }
74}
75
View only · write via MCP/CIDE