private async Task TestWithOptionsAsync(TestWorkspace workspace, params Action<object>[] expectedResults) { var testDocument = workspace.DocumentWithCursor; var position = testDocument.CursorPosition.GetValueOrDefault(); var documentId = workspace.GetDocumentId(testDocument); var document = workspace.CurrentSolution.GetDocument(documentId); var provider = new SemanticQuickInfoProvider( workspace.GetService<IProjectionBufferFactoryService>(), workspace.GetService<IEditorOptionsFactoryService>(), workspace.GetService<ITextEditorFactoryService>(), workspace.GetService<IGlyphService>(), workspace.GetService<ClassificationTypeMap>()); await TestWithOptionsAsync(document, provider, position, expectedResults); // speculative semantic model if (await CanUseSpeculativeSemanticModelAsync(document, position)) { var buffer = testDocument.TextBuffer; using (var edit = buffer.CreateEdit()) { var currentSnapshot = buffer.CurrentSnapshot; edit.Replace(0, currentSnapshot.Length, currentSnapshot.GetText()); edit.Apply(); } await TestWithOptionsAsync(document, provider, position, expectedResults); } }
private void TestWithOptions(CSharpParseOptions options, string markup, params Action<object>[] expectedResults) { using (var workspace = CSharpWorkspaceFactory.CreateWorkspaceFromFile(markup, options)) { var position = workspace.Documents.Single().CursorPosition.Value; var noListeners = SpecializedCollections.EmptyEnumerable<Lazy<IAsynchronousOperationListener, FeatureMetadata>>(); var provider = new SemanticQuickInfoProvider( workspace.GetService<ITextBufferFactoryService>(), workspace.GetService<IContentTypeRegistryService>(), workspace.GetService<IProjectionBufferFactoryService>(), workspace.GetService<IEditorOptionsFactoryService>(), workspace.GetService<ITextEditorFactoryService>(), workspace.GetService<IGlyphService>(), workspace.GetService<ClassificationTypeMap>()); TestWithOptions(workspace, provider, position, expectedResults); // speculative semantic model var document = workspace.CurrentSolution.Projects.First().Documents.First(); if (CanUseSpeculativeSemanticModel(document, position)) { var buffer = workspace.Documents.Single().TextBuffer; using (var edit = buffer.CreateEdit()) { edit.Replace(0, buffer.CurrentSnapshot.Length, buffer.CurrentSnapshot.GetText()); edit.Apply(); } TestWithOptions(workspace, provider, position, expectedResults); } } }
private async Task TestWithOptionsAsync(Document document, SemanticQuickInfoProvider provider, int position, Action<object>[] expectedResults) { var state = await provider.GetItemAsync(document, position, cancellationToken: CancellationToken.None); if (state != null) { WaitForDocumentationComment(state.Content); } if (expectedResults.Length == 0) { Assert.Null(state); } else { Assert.NotNull(state); foreach (var expected in expectedResults) { expected(state.Content); } } }
private void TestWithOptions(TestWorkspace workspace, SemanticQuickInfoProvider provider, int position, Action<object>[] expectedResults) { var document = workspace.CurrentSolution.Projects.First().Documents.First(); var state = provider.GetItemAsync(document, position, cancellationToken: CancellationToken.None).Result; if (state != null) { WaitForDocumentationComment(state.Content); } if (expectedResults.Length == 0) { Assert.Null(state); } else { Assert.NotNull(state); foreach (var expected in expectedResults) { expected(state.Content); } } }
private async Task VerifyWithMscorlib45Async(string markup, Action<object>[] expectedResults) { var xmlString = string.Format(@" <Workspace> <Project Language=""C#"" CommonReferencesNet45=""true""> <Document FilePath=""SourceDocument""> {0} </Document> </Project> </Workspace>", SecurityElement.Escape(markup)); using (var workspace = await TestWorkspace.CreateAsync(xmlString)) { var position = workspace.Documents.Single(d => d.Name == "SourceDocument").CursorPosition.Value; var documentId = workspace.Documents.Where(d => d.Name == "SourceDocument").Single().Id; var document = workspace.CurrentSolution.GetDocument(documentId); var provider = new SemanticQuickInfoProvider( workspace.GetService<IProjectionBufferFactoryService>(), workspace.GetService<IEditorOptionsFactoryService>(), workspace.GetService<ITextEditorFactoryService>(), workspace.GetService<IGlyphService>(), workspace.GetService<ClassificationTypeMap>()); var state = await provider.GetItemAsync(document, position, cancellationToken: CancellationToken.None); if (state != null) { WaitForDocumentationComment(state.Content); } if (expectedResults.Length == 0) { Assert.Null(state); } else { Assert.NotNull(state); foreach (var expected in expectedResults) { expected(state.Content); } } } }
private async Task VerifyWithReferenceWorkerAsync(string xmlString, params Action<object>[] expectedResults) { using (var workspace = await TestWorkspace.CreateAsync(xmlString)) { var position = workspace.Documents.First(d => d.Name == "SourceDocument").CursorPosition.Value; var documentId = workspace.Documents.First(d => d.Name == "SourceDocument").Id; var document = workspace.CurrentSolution.GetDocument(documentId); var provider = new SemanticQuickInfoProvider( workspace.GetService<IProjectionBufferFactoryService>(), workspace.GetService<IEditorOptionsFactoryService>(), workspace.GetService<ITextEditorFactoryService>(), workspace.GetService<IGlyphService>(), workspace.GetService<ClassificationTypeMap>()); var state = await provider.GetItemAsync(document, position, cancellationToken: CancellationToken.None); if (state != null) { WaitForDocumentationComment(state.Content); } if (expectedResults.Length == 0) { Assert.Null(state); } else { Assert.NotNull(state); foreach (var expected in expectedResults) { expected(state.Content); } } } }