public async Task FoundFactsBasedTest(string projectName, string fileName, int line, int column, bool found, string expectedFeatureName) { using (var testProject = await this._testAssets.GetTestProjectAsync(projectName)) using (var host = CreateOmniSharpHost(testProject.Directory, dotNetCliVersion: DotNetCliVersion.Legacy)) { var filePath = Path.Combine(testProject.Directory, fileName); var solution = host.Workspace.CurrentSolution; var documentId = solution.GetDocumentIdsWithFilePath(filePath).First(); var document = solution.GetDocument(documentId); var semanticModel = await document.GetSemanticModelAsync(); var text = semanticModel.SyntaxTree.GetText(); var position = text.Lines.GetPosition(new LinePosition(line, column)); var root = semanticModel.SyntaxTree.GetRoot(); var methodDeclaration = root.DescendantNodes() .OfType <MethodDeclarationSyntax>() .Single(node => node.Span.Contains(position)); var methodSymbol = semanticModel.GetDeclaredSymbol(methodDeclaration); var discover = new TestFeaturesDiscover(); var features = discover.Discover(methodDeclaration, semanticModel); if (found) { var feature = features.Single(); Assert.Equal(expectedFeatureName, feature.Name); var symbolName = methodSymbol.ToDisplayString(); symbolName = symbolName.Substring(0, symbolName.IndexOf('(')); Assert.Equal(symbolName, feature.Data); } else { Assert.Empty(features); } } }
public async Task FoundFactsBasedTest(string projectName, string filename, int line, int column, bool found) { var sampleProject = TestsContext.Default.GetTestSample(projectName); var workspace = WorkspaceHelper.Create(sampleProject).FirstOrDefault(); var docId = workspace.CurrentSolution.GetDocumentIdsWithFilePath(Path.Combine(sampleProject, filename)).First(); var doc = workspace.CurrentSolution.GetDocument(docId); var root = await doc.GetSyntaxRootAsync(); var text = await doc.GetTextAsync(); var semanticModel = await doc.GetSemanticModelAsync(); var position = text.Lines.GetPosition(new LinePosition(line, column)); var syntaxNode = root.DescendantNodes() .OfType <MethodDeclarationSyntax>() .Single(node => node.Span.Contains(position)); var symbol = semanticModel.GetDeclaredSymbol(syntaxNode); var discover = new TestFeaturesDiscover(); var features = discover.Discover(syntaxNode, await doc.GetSemanticModelAsync()); if (found) { var feature = features.Single(); Assert.Equal("XunitTestMethod", feature.Name); var symbolName = symbol.ToDisplayString(); symbolName = symbolName.Substring(0, symbolName.IndexOf('(')); Assert.Equal(symbolName, feature.Data); } else { Assert.Empty(features); } }