Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #13
0
        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);
            }
        }
Exemple #15
0
        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());
        }