public async Task TestHasSuccessfullyLoadedBeingFalse() { var workspace = new AdhocWorkspace(); var analyzerReference = new AnalyzerImageReference(ImmutableArray.Create <DiagnosticAnalyzer>(new Analyzer())); workspace.TryApplyChanges(workspace.CurrentSolution.WithAnalyzerReferences(new[] { analyzerReference })); var document = GetDocumentFromIncompleteProject(workspace); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events // check empty since this could be called to clear up existing diagnostics service.DiagnosticsUpdated += (s, a) => Assert.Empty(a.Diagnostics); // now call each analyze method. none of them should run. await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // wait for all events to raised await listener.ExpeditedWaitAsync().ConfigureAwait(false); }
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); }
public async Task TestHasSuccessfullyLoadedBeingFalseWhenFileOpened() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // open document workspace.OpenDocument(document.Id); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); bool syntax = false; bool semantic = false; // listen to events service.DiagnosticsUpdated += (s, a) => { switch (a.Diagnostics.Length) { case 0: return; case 1: syntax |= a.Diagnostics[0].Id == Analyzer.s_syntaxRule.Id; semantic |= a.Diagnostics[0].Id == Analyzer.s_semanticRule.Id; return; default: AssertEx.Fail("shouldn't reach here"); return; } }; // now call each analyze method. none of them should run. await analyzer.AnalyzeSyntaxAsync(document, CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeDocumentAsync(document, bodyOpt : null, cancellationToken : CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeProjectAsync(document.Project, semanticsChanged : true, cancellationToken : CancellationToken.None).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); // two should have been called. Assert.True(syntax); Assert.True(semantic); }
public async Task TestHasSuccessfullyLoadedBeingFalseWhenFileOpened() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // open document workspace.OpenDocument(document.Id); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); bool syntax = false; bool semantic = false; // listen to events service.DiagnosticsUpdated += (s, a) => { switch (a.Diagnostics.Length) { case 0: return; case 1: syntax |= a.Diagnostics[0].Id == Analyzer.s_syntaxRule.Id; semantic |= a.Diagnostics[0].Id == Analyzer.s_semanticRule.Id; return; default: AssertEx.Fail("shouldn't reach here"); return; } }; // now call each analyze method. none of them should run. await analyzer.AnalyzeSyntaxAsync(document, InvocationReasons.Empty, CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeDocumentAsync(document, bodyOpt: null, reasons: InvocationReasons.Empty, cancellationToken: CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeProjectAsync(document.Project, semanticsChanged: true, reasons: InvocationReasons.Empty, cancellationToken: CancellationToken.None).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); // two should have been called. Assert.True(syntax); Assert.True(semantic); }
public async Task TestHasSuccessfullyLoadedBeingFalse() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events // check empty since this could be called to clear up existing diagnostics service.DiagnosticsUpdated += (s, a) => Assert.Empty(a.Diagnostics); // now call each analyze method. none of them should run. await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }
public async Task TestHasSuccessfullyLoadedBeingFalse() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events // check empty since this could be called to clear up existing diagnostics service.DiagnosticsUpdated += (s, a) => Assert.Empty(a.Diagnostics); // now call each analyze method. none of them should run. await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }
public async Task TestHasSuccessfullyLoadedBeingFalse() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events // check empty since this could be called to clear up existing diagnostics service.DiagnosticsUpdated += (s, a) => Assert.Empty(a.Diagnostics); // now call each analyze method. none of them should run. await analyzer.AnalyzeSyntaxAsync(document, InvocationReasons.Empty, CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeDocumentAsync(document, bodyOpt: null, reasons: InvocationReasons.Empty, cancellationToken: CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeProjectAsync(document.Project, semanticsChanged: true, reasons: InvocationReasons.Empty, cancellationToken: CancellationToken.None).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }
public async Task TestHasSuccessfullyLoadedBeingFalse() { var workspace = new AdhocWorkspace(); var document = GetDocumentFromIncompleteProject(workspace); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new Analyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events // check empty since this could be called to clear up existing diagnostics service.DiagnosticsUpdated += (s, a) => Assert.Empty(a.Diagnostics); // now call each analyze method. none of them should run. await analyzer.AnalyzeSyntaxAsync(document, InvocationReasons.Empty, CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeDocumentAsync(document, bodyOpt : null, reasons : InvocationReasons.Empty, cancellationToken : CancellationToken.None).ConfigureAwait(false); await analyzer.AnalyzeProjectAsync(document.Project, semanticsChanged : true, reasons : InvocationReasons.Empty, cancellationToken : CancellationToken.None).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }
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); }