Forge
csharpdeeb25a2
1using CascadeIDE.Cockpit.DataBus;
2using CascadeIDE.ViewModels;
3using CascadeIDE.Features.IdeMcp.Application;
4using CascadeIDE.Models;
5using CascadeIDE.Services;
6
7namespace CascadeIDE.Features.IdeMcp.Application;
8
9internal sealed partial class MainWindowIdeMcpHost
10{
11 public async Task<string> RunTestsAsync()
12 {
13 return await RunTestsInternalAsync(filterExpression: null, mode: "all").ConfigureAwait(false);
14 }
15 public async Task<string> RunAffectedTestsAsync(IReadOnlyList<string>? changedPaths)
16 {
17 var request = IdeMcpBuildTestOrchestrator.BuildAffectedTestsRequest(changedPaths);
18 return await RunTestsInternalAsync(request.filterExpression, request.mode, request.tokens).ConfigureAwait(false);
19 }
20
21 private async Task<string> RunTestsInternalAsync(string? filterExpression, string mode, IReadOnlyList<string>? tokens = null)
22 {
23 var path = await UiScheduler.Default.InvokeAsync(() => _host.Workspace.SolutionPath ?? "");
24 if (!IdeMcpSolutionPathAvailability.IsRunnableSolutionFile(path))
25 return IdeMcpBuildTestOrchestrator.SerializeMissingSolutionError(mode);
26
27 try
28 {
29 var outcome = await _host.McpBuildTest.RunTestsAsync(path, filterExpression, mode, tokens).ConfigureAwait(false);
30 var parsed = outcome.Parsed;
31 var outStr = outcome.ConsoleOutput;
32
33 UiScheduler.Default.Post(() =>
34 {
35 var mutation = IdeMcpBuildTestOrchestrator.IdeMcpTestRunInstrumentationMutation.FromSuccessfulParse(
36 parsed.Passed,
37 parsed.Total,
38 parsed.Failed,
39 _host.InstrumentationPanel.TestResultsOutput,
40 outStr,
41 _host.InstrumentationTabs);
42 PublishIdeMcpTestRunMutation(mutation, openTestsPageIfRequested: true);
43 });
44 return outcome.JsonPayload;
45 }
46 catch (Exception ex)
47 {
48 UiScheduler.Default.Post(() =>
49 {
50 var mutation = IdeMcpBuildTestOrchestrator.IdeMcpTestRunInstrumentationMutation.FromThrownException(
51 _host.InstrumentationPanel.TestResultsOutput,
52 ex.Message);
53 PublishIdeMcpTestRunMutation(mutation, openTestsPageIfRequested: false);
54 });
55 return Services.McpDotnetBuildTestService.SerializeTestRunFailure(ex.Message, mode, filterExpression);
56 }
57 }
58
59 /// <summary>Обновляет инструментацию, шину и навигацию MFD после MCP-тестов.</summary>
60 private void PublishIdeMcpTestRunMutation(
61 IdeMcpBuildTestOrchestrator.IdeMcpTestRunInstrumentationMutation mutation,
62 bool openTestsPageIfRequested)
63 {
64 _host.LastTestSummary = mutation.Summary;
65 _host.ImpactedTestsBadge = mutation.ImpactedTestsBadge;
66 _host.McpPublishToIdeDataBusAndRebuild(new TestsStateChanged(mutation.Summary, mutation.ImpactedTestsBadge));
67 _host.InstrumentationPanel.TestResultsOutput = mutation.UpdatedTestResultsOutput;
68 if (openTestsPageIfRequested && mutation.ShouldOpenTestsPage)
69 _host.CurrentMfdShellPage = MfdShellPage.Tests;
70 }
71
72}
73
View only · write via MCP/CIDE