Skip to content

Commit 2415eae

Browse files
committed
Add test
1 parent d2ca595 commit 2415eae

File tree

1 file changed

+43
-29
lines changed

1 file changed

+43
-29
lines changed

src/LanguageServer/ProtocolUnitTests/Diagnostics/DiagnosticRegistrationTests.cs

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
using System.Text.Json;
99
using System.Threading;
1010
using System.Threading.Tasks;
11+
using ICSharpCode.Decompiler.CSharp.Syntax;
1112
using Microsoft.CodeAnalysis.LanguageServer.Handler.Diagnostics;
1213
using Microsoft.CodeAnalysis.LanguageServer.Handler.Diagnostics.Public;
14+
using Microsoft.CodeAnalysis.UnitTests;
1315
using Roslyn.LanguageServer.Protocol;
1416
using Roslyn.Test.Utilities;
1517
using StreamJsonRpc;
@@ -25,15 +27,15 @@ public DiagnosticRegistrationTests(ITestOutputHelper? testOutputHelper) : base(t
2527
}
2628

2729
[Theory, CombinatorialData]
28-
public async Task TestPublicDiagnosticSourcesAreRegisteredWhenSupported(bool mutatingLspWorkspace)
30+
public async Task TestPublicDiagnosticSourcesAreRegisteredWhenSupported(bool mutatingLspWorkspace, bool dynamicRegistration)
2931
{
3032
var clientCapabilities = new ClientCapabilities
3133
{
3234
TextDocument = new TextDocumentClientCapabilities
3335
{
3436
Diagnostic = new DiagnosticSetting
3537
{
36-
DynamicRegistration = true,
38+
DynamicRegistration = dynamicRegistration,
3739
}
3840
}
3941
};
@@ -49,42 +51,54 @@ public async Task TestPublicDiagnosticSourcesAreRegisteredWhenSupported(bool mut
4951
await using var testLspServer = await CreateTestLspServerAsync(string.Empty, mutatingLspWorkspace, initializationOptions);
5052

5153
var registrations = clientCallbackTarget.GetRegistrations();
54+
var serverCapabilities = testLspServer.GetServerCapabilities();
5255

5356
// Get all registrations for diagnostics (note that workspace registrations are registered against document method name).
5457
var diagnosticRegistrations = registrations
5558
.Where(r => r.Method == Methods.TextDocumentDiagnosticName)
5659
.Select(r => JsonSerializer.Deserialize<DiagnosticRegistrationOptions>((JsonElement)r.RegisterOptions!, ProtocolConversions.LspJsonSerializerOptions)!);
5760

58-
Assert.NotEmpty(diagnosticRegistrations);
59-
60-
string[] documentSources = [
61-
PullDiagnosticCategories.DocumentCompilerSyntax,
62-
PullDiagnosticCategories.DocumentCompilerSemantic,
63-
PullDiagnosticCategories.DocumentAnalyzerSyntax,
64-
PullDiagnosticCategories.DocumentAnalyzerSemantic,
65-
PublicDocumentNonLocalDiagnosticSourceProvider.NonLocal
66-
];
67-
68-
string[] documentAndWorkspaceSources = [
69-
PullDiagnosticCategories.EditAndContinue,
70-
PullDiagnosticCategories.WorkspaceDocumentsAndProject
71-
];
72-
73-
// Verify document only sources are present (and do not set the workspace diagnostic option).
74-
foreach (var documentSource in documentSources)
61+
if (dynamicRegistration)
7562
{
76-
var options = Assert.Single(diagnosticRegistrations, (r) => r.Identifier == documentSource);
77-
Assert.False(options.WorkspaceDiagnostics);
78-
Assert.True(options.InterFileDependencies);
79-
}
63+
Assert.NotEmpty(diagnosticRegistrations);
64+
65+
string[] documentSources = [
66+
PullDiagnosticCategories.DocumentCompilerSyntax,
67+
PullDiagnosticCategories.DocumentCompilerSemantic,
68+
PullDiagnosticCategories.DocumentAnalyzerSyntax,
69+
PullDiagnosticCategories.DocumentAnalyzerSemantic,
70+
PublicDocumentNonLocalDiagnosticSourceProvider.NonLocal
71+
];
72+
73+
string[] documentAndWorkspaceSources = [
74+
PullDiagnosticCategories.EditAndContinue,
75+
PullDiagnosticCategories.WorkspaceDocumentsAndProject
76+
];
77+
78+
// Verify document only sources are present (and do not set the workspace diagnostic option).
79+
foreach (var documentSource in documentSources)
80+
{
81+
var options = Assert.Single(diagnosticRegistrations, (r) => r.Identifier == documentSource);
82+
Assert.False(options.WorkspaceDiagnostics);
83+
Assert.True(options.InterFileDependencies);
84+
}
8085

81-
// Verify workspace sources are present (and do set the workspace diagnostic option).
82-
foreach (var workspaceSource in documentAndWorkspaceSources)
86+
// Verify workspace sources are present (and do set the workspace diagnostic option).
87+
foreach (var workspaceSource in documentAndWorkspaceSources)
88+
{
89+
var options = Assert.Single(diagnosticRegistrations, (r) => r.Identifier == workspaceSource);
90+
Assert.True(options.WorkspaceDiagnostics);
91+
Assert.True(options.InterFileDependencies);
92+
Assert.True(options.WorkDoneProgress);
93+
}
94+
}
95+
else
8396
{
84-
var options = Assert.Single(diagnosticRegistrations, (r) => r.Identifier == workspaceSource);
85-
Assert.True(options.WorkspaceDiagnostics);
86-
Assert.True(options.InterFileDependencies);
87-
Assert.True(options.WorkDoneProgress);
97+
var diagnosticOptions = (DiagnosticOptions)serverCapabilities?.DiagnosticOptions;
98+
99+
Assert.Empty(diagnosticRegistrations);
100+
Assert.NotNull(diagnosticOptions);
101+
Assert.True(diagnosticOptions.InterFileDependencies);
88102
}
89103

90104
// Verify task diagnostics are not present.

0 commit comments

Comments
 (0)