Forge
csharpdeeb25a2
1using CascadeIDE.Features.Editor.Application.Monaco;
2using CascadeIDE.Features.Settings.DataAcquisition;
3using CascadeIDE.Models;
4using CascadeIDE.Services;
5using Xunit;
6
7namespace CascadeIDE.Tests;
8
9public sealed class EditorLanguageSupportTests
10{
11 [Theory]
12 [InlineData(@"C:\repo\App.csproj", "xml")]
13 [InlineData(@"C:\repo\App.fsproj", "xml")]
14 [InlineData(@"C:\repo\App.props", "xml")]
15 [InlineData(@"C:\repo\App.targets", "xml")]
16 [InlineData(@"C:\repo\app.config", "xml")]
17 [InlineData(@"C:\repo\View.axaml", "xml")]
18 [InlineData(@"C:\repo\Program.cs", "csharp")]
19 [InlineData(@"C:\repo\readme.md", "markdown")]
20 public void GetMonacoLanguageId_MapsProjectAndMarkupFiles(string path, string expected) =>
21 Assert.Equal(expected, EditorLanguageSupport.GetMonacoLanguageId(path));
22
23 [Fact]
24 public void CideEditorLanguageIds_uses_same_mapping_as_support_table() =>
25 Assert.Equal(
26 EditorLanguageSupport.GetMonacoLanguageId(@"D:\x\CascadeIDE.csproj"),
27 CideEditorLanguageIds.FromFilePath(@"D:\x\CascadeIDE.csproj"));
28
29 [Fact]
30 public void BundledToml_Contains_csproj_and_csharp()
31 {
32 var toml = EditorLanguagesTomlLoader.GetEmbeddedBundledEditorLanguagesToml();
33 Assert.Contains(".csproj", toml, StringComparison.Ordinal);
34 Assert.Contains("id = \"csharp\"", toml, StringComparison.Ordinal);
35 }
36
37 [Fact]
38 public void IsTextFilePath_Includes_plain_text_extensions()
39 {
40 Assert.True(EditorLanguageSupport.IsTextFilePath(@"C:\repo\notes.txt"));
41 Assert.True(EditorLanguageSupport.IsTextFilePath(@"C:\repo\build.log"));
42 Assert.True(EditorLanguageSupport.IsTextFilePath(@"C:\repo\Component.jsx"));
43 }
44
45 [Fact]
46 public void MergeManifests_User_Replaces_Language_By_Id()
47 {
48 var bundled = new EditorLanguagesManifest
49 {
50 Languages =
51 [
52 new EditorLanguageEntry
53 {
54 Id = "xml",
55 Display = "XML",
56 Extensions = [".csproj"],
57 Monaco = "xml",
58 },
59 ],
60 };
61 var user = new EditorLanguagesManifest
62 {
63 Languages =
64 [
65 new EditorLanguageEntry
66 {
67 Id = "xml",
68 Display = "MSBuild XML",
69 Extensions = [".csproj", ".props"],
70 Monaco = "xml",
71 },
72 ],
73 };
74
75 var merged = EditorLanguagesTomlLoader.MergeManifests(bundled, user);
76 var xml = Assert.Single(merged.Languages);
77 Assert.Equal("MSBuild XML", xml.Display);
78 Assert.Equal([".csproj", ".props"], xml.Extensions);
79 }
80
81 [Fact]
82 public void UserOverlay_Can_Add_Custom_Extension()
83 {
84 try
85 {
86 EditorLanguagesTomlLoader.ReplaceManifestForTests = new EditorLanguagesManifest
87 {
88 Languages =
89 [
90 new EditorLanguageEntry
91 {
92 Id = "dockerfile",
93 Display = "Dockerfile",
94 Extensions = [".dockerfile"],
95 Monaco = "plaintext",
96 },
97 ],
98 };
99 EditorLanguageSupport.ClearCacheForTests();
100
101 Assert.Equal("plaintext", EditorLanguageSupport.GetMonacoLanguageId(@"C:\repo\Dockerfile.dockerfile"));
102 Assert.True(EditorLanguageSupport.IsTextFilePath(@"C:\repo\Dockerfile.dockerfile"));
103 }
104 finally
105 {
106 EditorLanguageSupport.ResetForTests();
107 }
108 }
109}
110
View only · write via MCP/CIDE