Forge
csharp4405de34
1using CascadeIDE.Models;
2using CascadeIDE.Services;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class CodeNavigationMapConditionBranchPresetsLoaderTests
8{
9 [Fact]
10 public void BundledToml_Contains_Standard_Preset_Ids()
11 {
12 var text = CodeNavigationMapConditionBranchPresetsLoader.GetEmbeddedBundledToml();
13 Assert.Contains("plus_minus", text, StringComparison.Ordinal);
14 Assert.Contains("true_false", text, StringComparison.Ordinal);
15 Assert.Contains("one_zero", text, StringComparison.Ordinal);
16 }
17
18 [Fact]
19 public void GetEffectivePresets_Repository_overrides_bundled_User_overrides_repository()
20 {
21 var tmp = Path.Combine(Path.GetTempPath(), "cascade_branch_repo_" + Guid.NewGuid());
22 Directory.CreateDirectory(Path.Combine(tmp, ".cascade"));
23 File.WriteAllText(
24 Path.Combine(tmp, ".cascade", "workspace.toml"),
25 """
26 [[code_navigation_map.condition_branch.presets]]
27 id = "plus_minus"
28 positive = "Y"
29 negative = "N"
30 """);
31
32 var repoOnly = CodeNavigationMapConditionBranchPresetsLoader.GetEffectivePresets(
33 new CodeNavigationMapSettings { ConditionBranchLabelPreset = "plus_minus" },
34 tmp);
35 var repoEntry = Assert.Single(repoOnly, e => e.Id == "plus_minus");
36 Assert.Equal("Y", repoEntry.Positive);
37 Assert.Equal("N", repoEntry.Negative);
38
39 var userMap = new CodeNavigationMapSettings
40 {
41 ConditionBranchLabelPreset = "plus_minus",
42 ConditionBranch = new CodeNavigationMapConditionBranchToml
43 {
44 Presets =
45 [
46 new CodeNavigationMapConditionBranchPresetEntry
47 {
48 Id = "plus_minus",
49 Positive = "✓",
50 Negative = "✗"
51 }
52 ]
53 }
54 };
55 var userWins = CodeNavigationMapConditionBranchPresetsLoader.GetEffectivePresets(userMap, tmp);
56 var userEntry = Assert.Single(userWins, e => e.Id == "plus_minus");
57 Assert.Equal("✓", userEntry.Positive);
58 Assert.Equal("✗", userEntry.Negative);
59
60 var pair = CodeNavigationMapConditionBranchLabels.Resolve(userMap, tmp);
61 Assert.Equal("✓", pair.Positive);
62 Assert.Equal("✗", pair.Negative);
63 }
64
65 [Fact]
66 public void MergeBundledWithUser_User_Replaces_Same_Id()
67 {
68 var bundled = new List<CodeNavigationMapConditionBranchPresetEntry>
69 {
70 new() { Id = "plus_minus", Positive = "+", Negative = "-" }
71 };
72 var user = new List<CodeNavigationMapConditionBranchPresetEntry>
73 {
74 new() { Id = "plus_minus", Positive = "✓", Negative = "✗" }
75 };
76 var merged = CodeNavigationMapConditionBranchPresetsLoader.MergeBundledWithUser(bundled, user);
77 Assert.Single(merged);
78 Assert.Equal("✓", merged[0].Positive);
79 Assert.Equal("✗", merged[0].Negative);
80 }
81
82 [Fact]
83 public void Resolve_FromBundled_true_false()
84 {
85 var map = new CodeNavigationMapSettings
86 {
87 ConditionBranchLabelPreset = CodeNavigationMapConditionBranchLabels.PresetTrueFalse
88 };
89 var pair = CodeNavigationMapConditionBranchLabels.Resolve(map);
90 Assert.Equal("true", pair.Positive);
91 Assert.Equal("false", pair.Negative);
92 }
93
94 [Fact]
95 public void Deserialize_ConditionBranchPresets_ArrayOfTables()
96 {
97 const string text =
98 """
99 [code_navigation_map]
100 condition_branch_label_preset = "ja"
101
102 [[code_navigation_map.condition_branch.presets]]
103 id = "ja"
104 positive = "はい"
105 negative = "いいえ"
106 """;
107
108 var s = CascadeTomlSerializer.Deserialize<CascadeIdeSettings>(text)
109 ?? throw new InvalidOperationException("null settings");
110 Assert.Single(s.CodeNavigationMap.ConditionBranch.Presets);
111 Assert.Equal("ja", s.CodeNavigationMap.ConditionBranch.Presets[0].Id);
112 Assert.Equal("はい", s.CodeNavigationMap.ConditionBranch.Presets[0].Positive);
113
114 var merged = CodeNavigationMapConditionBranchPresetsLoader.GetEffectivePresets(s.CodeNavigationMap);
115 Assert.Contains(merged, e => e.Id == "ja");
116 var pair = CodeNavigationMapConditionBranchLabels.Resolve(s.CodeNavigationMap);
117 Assert.Equal("はい", pair.Positive);
118 Assert.Equal("いいえ", pair.Negative);
119 }
120}
121
View only · write via MCP/CIDE