Forge
csharpdeeb25a2
1using System.Collections.Immutable;
2using Basic.Reference.Assemblies;
3using Microsoft.CodeAnalysis;
4using Microsoft.CodeAnalysis.CSharp;
5using Microsoft.CodeAnalysis.Diagnostics;
6using Xunit;
7
8namespace CascadeIDE.ArchitectureAnalyzers.Tests;
9
10public sealed class CockpitIdeDisplayBoundaryAnalyzerTests
11{
12 private static async Task<ImmutableArray<Diagnostic>> RunAnalyzerAsync(params (string Path, string Text)[] files)
13 {
14 var trees = new List<SyntaxTree>(files.Length);
15 foreach (var (path, text) in files)
16 trees.Add(CSharpSyntaxTree.ParseText(text, path: path));
17
18 var compilation = CSharpCompilation.Create(
19 "TestAssembly",
20 trees,
21 Net80.References.All,
22 new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
23
24 var analyzer = new CockpitIdeDisplayBoundaryAnalyzer();
25 var withAnalyzers = compilation.WithAnalyzers(ImmutableArray.Create<DiagnosticAnalyzer>(analyzer));
26 return await withAnalyzers.GetAnalyzerDiagnosticsAsync();
27 }
28
29 [Fact]
30 public async Task CASCOPE016_Cockpit_UsingIdeDisplay_Reports()
31 {
32 var diags = await RunAnalyzerAsync((
33 @"D:\repo\Cockpit\Channels\Bad.cs",
34 """
35 using CascadeIDE.IdeDisplay;
36
37 namespace CascadeIDE.Cockpit.Channels.Example;
38
39 public static class C { }
40 """));
41
42 var d = Assert.Single(diags);
43 Assert.Equal(CockpitIdeDisplayBoundaryAnalyzer.DiagnosticId, d.Id);
44 }
45
46 [Fact]
47 public async Task Cockpit_WithoutIdeDisplay_Clean()
48 {
49 var diags = await RunAnalyzerAsync((
50 @"D:\repo\Cockpit\Channels\Ok.cs",
51 """
52 namespace CascadeIDE.Cockpit.Channels.Example;
53
54 public static class C { }
55 """));
56
57 Assert.Empty(diags);
58 }
59}
60
View only · write via MCP/CIDE