public static void CodeAction(CodeAction codeAction, Document document, string expectedCode) { var operations = codeAction.GetOperationsAsync(CancellationToken.None).GetAwaiter().GetResult().ToList(); if (operations.Count == 0) { throw RoslynTestKitException.NoOperationForCodeAction(codeAction); } var workspace = document.Project.Solution.Workspace; foreach (var operation in operations) { operation.Apply(workspace, CancellationToken.None); } var newDocument = workspace.CurrentSolution.GetDocument(document.Id); var sourceText = newDocument.GetTextAsync(CancellationToken.None).GetAwaiter().GetResult(); var actualCode = sourceText.ToString(); if (actualCode != expectedCode) { DiffHelper.TryToReportDiffWithExternalTool(expectedCode, actualCode); var diff = DiffHelper.GenerateInlineDiff(expectedCode, actualCode); throw new TransformedCodeDifferentThanExpectedException(actualCode, expectedCode, diff); } }
public static void CodeAction(CodeAction codeAction, Document document, string expectedCode) { var operations = codeAction.GetOperationsAsync(CancellationToken.None).GetAwaiter().GetResult().ToList(); if (operations.Count == 0) { throw RoslynTestKitException.NoOperationForCodeAction(codeAction); } if (operations.Count > 1) { throw RoslynTestKitException.MoreThanOneOperationForCodeAction(codeAction, operations); } var operation = operations.Single(); var workspace = document.Project.Solution.Workspace; operation.Apply(workspace, CancellationToken.None); var newDocument = workspace.CurrentSolution.GetDocument(document.Id); var sourceText = newDocument.GetTextAsync(CancellationToken.None).GetAwaiter().GetResult(); var text = sourceText.ToString(); if (text != expectedCode) { TryToReportDiff(expectedCode, text); throw new TransformedCodeDifferentThanExpectedException(text, expectedCode); } }
private void NoCodeFix(Document document, Diagnostic diagnostic, IDiagnosticLocator locator) { var codeFixes = GetCodeFixes(document, diagnostic); if (codeFixes.Length != 0) { throw RoslynTestKitException.UnexpectedCodeFixFound(codeFixes, locator); } }
private void TestNoCodeRefactoring(Document document, IDiagnosticLocator locator) { var codeRefactorings = GetCodeRefactorings(document, locator).ToImmutableArray(); if (codeRefactorings.Length != 0) { throw RoslynTestKitException.UnexpectedCodeRefactorings(codeRefactorings); } }
private void TestCodeRefactoring(Document document, string expected, IDiagnosticLocator locator, int refactoringIndex = 0) { var codeRefactorings = GetCodeRefactorings(document, locator); if (codeRefactorings.Length < refactoringIndex + 1) { throw RoslynTestKitException.CodeRefactoringNotFound(refactoringIndex, codeRefactorings, locator); } Verify.CodeAction(codeRefactorings[refactoringIndex], document, expected); }
private void TestCodeFix(Document document, string expected, Diagnostic diagnostic, IDiagnosticLocator locator, int codeFixIndex = 0) { var codeFixes = GetCodeFixes(document, diagnostic); if (codeFixes.Length < codeFixIndex + 1) { throw RoslynTestKitException.CodeFixNotFound(codeFixIndex, codeFixes, locator); } Verify.CodeAction(codeFixes[codeFixIndex], document, expected); }
private void HasDiagnostic(Document document, string diagnosticId, IDiagnosticLocator locator) { var reporteddiagnostics = GetDiagnostics(document).Where(d => locator.Match(d.Location)).ToArray(); var matchedDiagnostics = reporteddiagnostics.Count(d => d.Id == diagnosticId); if (matchedDiagnostics == 0) { throw RoslynTestKitException.DiagnosticNotFound(diagnosticId, locator, reporteddiagnostics); } }
protected void NoException(string code) { var document = CreateDocumentFromCode(code); var diagnostics = GetDiagnostics(document); var diagnostic = diagnostics.FirstOrDefault(d => d.Id == "AD0001"); if (diagnostic != null) { throw RoslynTestKitException.ExceptionInAnalyzer(diagnostic); } }
private void TestCodeFix(Document document, string expected, string diagnosticId, IDiagnosticLocator locator, int codeFixIndex) { var reportedDiagnostics = GetReportedDiagnostics(document, locator).ToArray(); var diagnostic = reportedDiagnostics.FirstOrDefault(x => x.Id == diagnosticId); if (diagnostic == null) { throw RoslynTestKitException.DiagnosticNotFound(diagnosticId, locator, reportedDiagnostics); } TestCodeFix(document, expected, diagnostic.Descriptor, locator, codeFixIndex); }
private void TestCodeFix(Document document, string expected, Diagnostic diagnostic, IDiagnosticLocator locator, ICodeActionSelector codeActionSelector) { var codeFixes = GetCodeFixes(document, diagnostic); var codeAction = codeActionSelector.Find(codeFixes); if (codeAction is null) { throw RoslynTestKitException.CodeFixNotFound(codeActionSelector, codeFixes, locator); } Verify.CodeAction(codeAction, document, expected); }
protected void NoException(string code) { var document = MarkupHelper.GetDocumentFromCode(code, LanguageName, References); var diagnostics = GetDiagnostics(document); var diagnostic = diagnostics.FirstOrDefault(d => d.Id == "AD0001"); if (diagnostic != null) { throw RoslynTestKitException.ExceptionInAnalyzer(diagnostic); } }
private Diagnostic GetDiagnostic(Document document, string diagnosticId, IDiagnosticLocator locator) { var reportedDiagnostics = GetReportedDiagnostics(document, locator).ToArray(); var diagnostic = reportedDiagnostics.FirstOrDefault(x => x.Id == diagnosticId); if (diagnostic == null) { throw RoslynTestKitException.DiagnosticNotFound(diagnosticId, locator, reportedDiagnostics); } return(diagnostic); }
private static Action <ImmutableArray <CompletionItem> > CreateAssertionBasedOnExpectedSet(string[] expectedCompletions, IDiagnosticLocator locator) { return((items) => { var allFoundCompletionText = items.Select(x => x.DisplayText); var missingSuggestions = expectedCompletions.Except(allFoundCompletionText).ToList(); if (missingSuggestions.Count > 0) { throw RoslynTestKitException.CannotFindSuggestion(missingSuggestions, items, locator); } }); }
protected void NoDiagnostic(Document document, string diagnosticId, IDiagnosticLocator locator = null) { var diagnostics = GetDiagnostics(document); if (locator != null) { diagnostics = diagnostics.Where(x => locator.Match(x.Location)).ToImmutableArray(); } var unexpectedDiagnostics = diagnostics.Where(d => d.Id == diagnosticId).ToList(); if (unexpectedDiagnostics.Count > 0) { throw RoslynTestKitException.UnexpectedDiagnostic(unexpectedDiagnostics); } }
private void TestCodeRefactoring(Document document, string expected, IDiagnosticLocator locator, int refactoringIndex = 0) { var codeRefactorings = GetCodeRefactorings(document, locator); if (codeRefactorings.Length < refactoringIndex + 1) { throw RoslynTestKitException.CodeRefactoringNotFound(refactoringIndex, codeRefactorings, locator); } if (FailWhenInputContainsErrors) { var errors = document.GetErrors(); if (errors.Count > 0) { throw RoslynTestKitException.UnexpectedErrorDiagnostic(errors); } } Verify.CodeAction(codeRefactorings[refactoringIndex], document, expected); }
private void TestCodeRefactoring(Document document, string expected, IDiagnosticLocator locator, ICodeActionSelector codeActionSelector) { if (FailWhenInputContainsErrors) { var errors = document.GetErrors(); if (errors.Count > 0) { throw RoslynTestKitException.UnexpectedErrorDiagnostic(errors); } } var codeRefactorings = GetCodeRefactorings(document, locator); var selectedRefactoring = codeActionSelector.Find(codeRefactorings); if (selectedRefactoring is null) { throw RoslynTestKitException.CodeRefactoringNotFound(codeActionSelector, codeRefactorings, locator); } Verify.CodeAction(selectedRefactoring, document, expected); }
private ImmutableArray <Diagnostic> GetDiagnostics(Document document) { var analyzers = ImmutableArray.Create(CreateAnalyzer()); var compilation = document.Project.GetCompilationAsync(CancellationToken.None).Result; var compilationWithAnalyzers = compilation.WithAnalyzers(analyzers, cancellationToken: CancellationToken.None); var discarded = compilation.GetDiagnostics(CancellationToken.None); var errorsInDocument = discarded.Where(x => x.Severity == DiagnosticSeverity.Error).ToArray(); if (errorsInDocument.Length > 0 && ThrowsWhenInputDocumentContainsError) { throw RoslynTestKitException.UnexpectedErrorDiagnostic(errorsInDocument); } var tree = document.GetSyntaxTreeAsync(CancellationToken.None).GetAwaiter().GetResult(); var builder = ImmutableArray.CreateBuilder <Diagnostic>(); foreach (var diagnostic in compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync().GetAwaiter().GetResult()) { builder.Add(diagnostic); } return(builder.ToImmutable()); }