Forge
csharpdeeb25a2
1using System.Text.Json;
2using Avalonia.Headless.XUnit;
3using CascadeIDE.Cockpit.Cds;
4using CascadeIDE.Services;
5using CascadeIDE.ViewModels;
6using Xunit;
7
8namespace CascadeIDE.Tests;
9
10/// <summary>
11/// Паритет MCP <c>ide_get_ide_state</c> с CDS: поле <c>cockpit_surface</c> совпадает с <see cref="MainWindowViewModel.BuildCockpitSurfaceSnapshot"/>.
12/// Требует headless Avalonia (<see cref="AvaloniaFact"/>), т.к. <see cref="IIdeMcpActions.GetIdeStateAsync"/> маршалит на UI-поток.
13/// </summary>
14public sealed class IdeMcpIdeStateCdsIntegrationTests
15{
16 [AvaloniaFact]
17 public async Task Get_ide_state_cockpit_surface_matches_BuildCockpitSurfaceSnapshot()
18 {
19 var vm = new MainWindowViewModel();
20 IIdeMcpActions mcp = vm.IdeMcp;
21
22 var json = await mcp.GetIdeStateAsync();
23
24 using var doc = JsonDocument.Parse(json);
25 Assert.True(doc.RootElement.TryGetProperty("cockpit_surface", out var cockpitEl));
26
27 var expectedJson = JsonSerializer.Serialize(vm.BuildCockpitSurfaceSnapshot());
28 Assert.Equal(expectedJson, cockpitEl.GetRawText());
29
30 var fromWorkspace = JsonSerializer.Deserialize<CockpitSurfaceState>(cockpitEl.GetRawText());
31 var direct = vm.BuildCockpitSurfaceSnapshot();
32 Assert.NotNull(fromWorkspace);
33 Assert.Equal(direct.SchemaVersion, fromWorkspace!.SchemaVersion);
34 Assert.Equal(direct.Topology.SurfaceKind, fromWorkspace.Topology.SurfaceKind);
35 Assert.Equal(direct.Instruments.Count, fromWorkspace.Instruments.Count);
36 }
37}
38
View only · write via MCP/CIDE