public async Task TestOpenFileOnlyAnalyzerDiagnostics() { var workspace = new AdhocWorkspace(); var project = workspace.AddProject( ProjectInfo.Create( ProjectId.CreateNewId(), VersionStamp.Create(), "CSharpProject", "CSharpProject", LanguageNames.CSharp)); var document = workspace.AddDocument(project.Id, "Empty.cs", SourceText.From("")); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new OpenFileOnlyAnalyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events service.DiagnosticsUpdated += (s, a) => { if (workspace.IsDocumentOpen(a.DocumentId)) { // check the diagnostics are reported Assert.Equal(document.Id, a.DocumentId); Assert.Equal(1, a.Diagnostics.Length); Assert.Equal(OpenFileOnlyAnalyzer.s_syntaxRule.Id, a.Diagnostics[0].Id); } if (a.DocumentId == document.Id && !workspace.IsDocumentOpen(a.DocumentId)) { // check the diagnostics reported are cleared Assert.Equal(0, a.Diagnostics.Length); } }; // open document workspace.OpenDocument(document.Id); await analyzer.DocumentOpenAsync(document, CancellationToken.None).ConfigureAwait(false); // cause analysis await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // close document workspace.CloseDocument(document.Id); await analyzer.DocumentCloseAsync(document, CancellationToken.None).ConfigureAwait(false); await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }