| 1 | using System.Text.Json; |
| 2 | using CascadeIDE.Features.Editor.Application.Monaco; |
| 3 | using Xunit; |
| 4 | |
| 5 | namespace CascadeIDE.Tests.MonacoForward; |
| 6 | |
| 7 | [Trait("Category", "MonacoForward")] |
| 8 | public 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 | |