Forge
csharpdeeb25a2
1using System.Text.Json;
2using CascadeIDE.Features.Editor.Application.Monaco;
3using Xunit;
4
5namespace CascadeIDE.Tests.MonacoForward;
6
7[Trait("Category", "MonacoForward")]
8public sealed class CideEditorBusContractTests
9{
10 [Fact]
11 public void BusManifestJson_matches_CSharp_setIds()
12 {
13 var root = LoadManifestRoot();
14 var setIds = root.GetProperty("setIds");
15
16 Assert.Equal(CideEditorBusManifest.SetIds.Diagnostics, setIds.GetProperty("diagnostics").GetString());
17 Assert.Equal(CideEditorBusManifest.SetIds.Highlights, setIds.GetProperty("highlights").GetString());
18 Assert.Equal(CideEditorBusManifest.SetIds.Breakpoints, setIds.GetProperty("breakpoints").GetString());
19 Assert.Equal(CideEditorBusManifest.SetIds.DebugLine, setIds.GetProperty("debugLine").GetString());
20 Assert.Equal(CideEditorBusManifest.SetIds.AgentReveal, setIds.GetProperty("agentReveal").GetString());
21 Assert.Equal(CideEditorBusManifest.SetIds.CfGutter, setIds.GetProperty("cfGutter").GetString());
22 }
23
24 [Fact]
25 public void BusManifestJson_matches_CSharp_capabilities()
26 {
27 var caps = LoadManifestRoot().GetProperty("capabilities");
28
29 Assert.Equal(CideEditorBusManifest.Capabilities.Completion, caps.GetProperty("completion").GetString());
30 Assert.Equal(CideEditorBusManifest.Capabilities.Hover, caps.GetProperty("hover").GetString());
31 Assert.Equal(CideEditorBusManifest.Capabilities.SignatureHelp, caps.GetProperty("signatureHelp").GetString());
32 Assert.Equal(CideEditorBusManifest.Capabilities.Definition, caps.GetProperty("definition").GetString());
33 Assert.Equal(CideEditorBusManifest.Capabilities.References, caps.GetProperty("references").GetString());
34 Assert.Equal(CideEditorBusManifest.Capabilities.Format, caps.GetProperty("format").GetString());
35 Assert.Equal(CideEditorBusManifest.Capabilities.CodeAction, caps.GetProperty("codeAction").GetString());
36 Assert.Equal(CideEditorBusManifest.Capabilities.CodeActionApply, caps.GetProperty("codeActionApply").GetString());
37 Assert.Equal(CideEditorBusManifest.Capabilities.Rename, caps.GetProperty("rename").GetString());
38 Assert.Equal(CideEditorBusManifest.Capabilities.Navigate, caps.GetProperty("navigate").GetString());
39 Assert.Equal(CideEditorBusManifest.Capabilities.InlayHints, caps.GetProperty("inlayHints").GetString());
40 Assert.Equal(CideEditorBusManifest.Capabilities.CodeLens, caps.GetProperty("codeLens").GetString());
41 Assert.Equal(CideEditorBusManifest.Capabilities.CodeLensClick, caps.GetProperty("codeLensClick").GetString());
42 Assert.Equal(CideEditorBusManifest.Capabilities.SemanticTokens, caps.GetProperty("semanticTokens").GetString());
43 Assert.Equal(CideEditorBusManifest.Capabilities.CompletionResult, caps.GetProperty("completionResult").GetString());
44 Assert.Equal(CideEditorBusManifest.Capabilities.HoverResult, caps.GetProperty("hoverResult").GetString());
45 Assert.Equal(CideEditorBusManifest.Capabilities.SignatureResult, caps.GetProperty("signatureResult").GetString());
46 Assert.Equal(CideEditorBusManifest.Capabilities.DefinitionResult, caps.GetProperty("definitionResult").GetString());
47 Assert.Equal(CideEditorBusManifest.Capabilities.ReferencesResult, caps.GetProperty("referencesResult").GetString());
48 Assert.Equal(CideEditorBusManifest.Capabilities.FormatResult, caps.GetProperty("formatResult").GetString());
49 Assert.Equal(CideEditorBusManifest.Capabilities.CodeActionResult, caps.GetProperty("codeActionResult").GetString());
50 Assert.Equal(CideEditorBusManifest.Capabilities.WorkspaceEditResult, caps.GetProperty("workspaceEditResult").GetString());
51 Assert.Equal(CideEditorBusManifest.Capabilities.InlayHintsResult, caps.GetProperty("inlayHintsResult").GetString());
52 Assert.Equal(CideEditorBusManifest.Capabilities.CodeLensResult, caps.GetProperty("codeLensResult").GetString());
53 Assert.Equal(CideEditorBusManifest.Capabilities.SemanticTokensResult, caps.GetProperty("semanticTokensResult").GetString());
54 }
55
56 [Fact]
57 public void BusManifestJson_legacy_maps_to_normalizeInbound()
58 {
59 var legacy = LoadManifestRoot().GetProperty("legacy");
60 Assert.Equal(
61 CideEditorBusManifest.Capabilities.Completion,
62 CideEditorBusManifest.NormalizeInboundType(legacy.GetProperty("requestCompletion").GetString()));
63 Assert.Equal(
64 CideEditorBusManifest.Capabilities.Hover,
65 CideEditorBusManifest.NormalizeInboundType(legacy.GetProperty("requestHover").GetString()));
66 Assert.Equal(
67 CideEditorBusManifest.Capabilities.SignatureHelp,
68 CideEditorBusManifest.NormalizeInboundType(legacy.GetProperty("requestSignature").GetString()));
69 }
70
71 [Fact]
72 public void Editor_push_types_align_with_bridge_protocol()
73 {
74 Assert.Equal(CideEditorBridgeTypes.SetModel, CideEditorBusManifest.Editor.SetModel);
75 Assert.Equal(CideEditorBridgeTypes.ApplyEdits, CideEditorBusManifest.Editor.ApplyEdits);
76 Assert.Equal(CideEditorBridgeTypes.SetDecorations, CideEditorBusManifest.Editor.SetDecorations);
77 Assert.Equal(CideEditorBridgeTypes.SetAgentReveal, CideEditorBusManifest.Editor.SetAgentReveal);
78 Assert.Equal(CideEditorBridgeTypes.ClearAgentReveal, CideEditorBusManifest.Editor.ClearAgentReveal);
79 }
80
81 private static JsonElement LoadManifestRoot()
82 {
83 var path = Path.Combine(MonacoEditorAssetLocator.GetCideEditorRoot(), "bus-manifest.json");
84 Assert.True(File.Exists(path), $"Missing bus manifest: {path}");
85 using var doc = JsonDocument.Parse(File.ReadAllText(path));
86 return doc.RootElement.Clone();
87 }
88}
89
View only · write via MCP/CIDE