protected void ShouldVerifyTest(TestUnityProject <TAnalyzer> testProject) { if (string.IsNullOrWhiteSpace(_version)) { return; } testProject.DisableVerifierOn(_version, _comparision); }
protected async Task VerifyAnalyzerAsync(string source, params DiagnosticResult[] expected) { var testProject = new TestUnityProject <TAnalyzer>(expected.Select(w => w.Id).Distinct().ToArray()); ShouldVerifyTest(testProject); ParseSource(testProject, source, expected); await testProject.RunAnalyzerAsync(CancellationToken.None); }
protected async Task VerifyCodeFixAsync(string source, DiagnosticResult[] expected, string fixedSource) { var testProject = new TestUnityProject <TAnalyzer>(expected.Select(w => w.Id).Distinct().ToArray()); ParseSource(testProject, source, expected); await testProject.RunAnalyzerAsync(CancellationToken.None); await testProject.RunCodeFixAsync <TCodeFix>(fixedSource, CancellationToken.None); }
protected void ParseSource(TestUnityProject <TAnalyzer> testProject, string source, DiagnosticResult[] expected) { var sb = new StringBuilder(); var diagnostics = expected.ToList(); var line = 1; var column = 1; var expectedLine = 0; var expectedColumn = 0; var isReading = false; var i = 0; using var sr = new StringReader(source); while (sr.Peek() > -1) { var c = sr.Read(); switch (c) { case '\n': sb.Append((char)c); line++; column = 1; break; case '[' when sr.Peek() == '|': sr.Read(); expectedLine = line; expectedColumn = column; isReading = true; break; case '|' when isReading && sr.Peek() == ']': sr.Read(); diagnostics[i] = diagnostics[i].WithSpan(expectedLine, expectedColumn, line, column); i++; isReading = false; break; default: sb.Append((char)c); column++; break; } } testProject.ExpectedDiagnostics.AddRange(diagnostics); testProject.SourceCode = sb.ToString(); }