Skip to content

Commit

Permalink
Verify source generator diagnostics (#8338)
Browse files Browse the repository at this point in the history
  • Loading branch information
jjonescz authored Mar 1, 2023
1 parent 7a6a5a2 commit 25f991c
Showing 1 changed file with 34 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -512,8 +512,11 @@ public class Person
}", Encoding.UTF8)).Project;
compilation = await project.GetCompilationAsync();

result = RunGenerator(compilation!, ref driver)
.VerifyOutputsMatch(result);
result = RunGenerator(compilation!, ref driver,
// Person.cs(4,19): warning CS8618: Non-nullable property 'Name' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
d => Assert.Equal(("SourceFile(Person.cs[44..48))", "CS8618"), (d.Location.ToString(), d.Id)));

result.VerifyOutputsMatch(result);

Assert.Empty(result.Diagnostics);
Assert.Equal(2, result.GeneratedSources.Length);
Expand Down Expand Up @@ -544,7 +547,13 @@ public class Person
var compilation = await project.GetCompilationAsync();
var (driver, additionalTexts) = await GetDriverWithAdditionalTextAsync(project);

var result = RunGenerator(compilation!, ref driver)
var expectedDiagnostics = new Action<Diagnostic>[]
{
// Person.cs(4,19): warning CS8618: Non-nullable property 'Name' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
d => Assert.Equal(("SourceFile(Person.cs[44..48))", "CS8618"), (d.Location.ToString(), d.Id))
};

var result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyPageOutput(
@"#pragma checksum ""Pages/Index.razor"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""6b5db227a6aa2228c777b0771108b184b1fc5df3""
// <auto-generated/>
Expand Down Expand Up @@ -598,7 +607,7 @@ protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.

eventListener.Events.Clear();

result = RunGenerator(compilation!, ref driver)
result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyOutputsMatch(result);

Assert.Empty(result.Diagnostics);
Expand All @@ -612,7 +621,7 @@ public class Person
}", Encoding.UTF8)).Project;
compilation = await project.GetCompilationAsync();

result = RunGenerator(compilation!, ref driver)
result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyOutputsMatch(result);

Assert.Empty(result.Diagnostics);
Expand Down Expand Up @@ -1009,8 +1018,11 @@ public async Task IncrementalCompilation_RazorFiles_WhenProjectReferencesChange(
var compilation = await project.GetCompilationAsync();
var (driver, additionalTexts) = await GetDriverWithAdditionalTextAsync(project);

var result = RunGenerator(compilation!, ref driver)
.VerifyPageOutput(
var result = RunGenerator(compilation!, ref driver,
// Pages/Index.razor(2,7): error CS0246: The type or namespace name 'SurveyPromptRootNamspace' could not be found (are you missing a using directive or an assembly reference?)
d => Assert.Equal(("SourceFile(Microsoft.NET.Sdk.Razor.SourceGenerators\\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator\\Pages_Index_razor.g.cs[433..457))", "CS0246"), (d.Location.ToString(), d.Id)));

result.VerifyPageOutput(
@"#pragma checksum ""Pages/Index.razor"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""4745828f8a0ab77b58022ed5d1095a0242f2a7ee""
// <auto-generated/>
#pragma warning disable 1591
Expand Down Expand Up @@ -1573,7 +1585,13 @@ public class Person
var compilation = await project.GetCompilationAsync();
var (driver, additionalTexts) = await GetDriverWithAdditionalTextAsync(project);

var result = RunGenerator(compilation!, ref driver)
var expectedDiagnostics = new Action<Diagnostic>[]
{
// Person.cs(4,19): warning CS8618: Non-nullable property 'Name' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.
d => Assert.Equal(("SourceFile(Person.cs[44..48))", "CS8618"), (d.Location.ToString(), d.Id))
};

var result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyPageOutput(@"#pragma checksum ""Pages/Index.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""6b5db227a6aa2228c777b0771108b184b1fc5df3""
// <auto-generated/>
#pragma warning disable 1591
Expand Down Expand Up @@ -1680,7 +1698,7 @@ internal sealed class Views_Shared__Layout : global::Microsoft.AspNetCore.Mvc.Ra

eventListener.Events.Clear();

result = RunGenerator(compilation!, ref driver)
result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyOutputsMatch(result);

Assert.Empty(result.Diagnostics);
Expand All @@ -1694,7 +1712,7 @@ public class Person
}", Encoding.UTF8)).Project;
compilation = await project.GetCompilationAsync();

result = RunGenerator(compilation!, ref driver)
result = RunGenerator(compilation!, ref driver, expectedDiagnostics)
.VerifyOutputsMatch(result);

Assert.Empty(result.Diagnostics);
Expand Down Expand Up @@ -2606,12 +2624,15 @@ private static async ValueTask<GeneratorDriver> GetDriverAsync(Project project)
return (driver, additionalTexts, optionsProvider);
}

private static GeneratorRunResult RunGenerator(Compilation compilation, ref GeneratorDriver driver)
private static GeneratorRunResult RunGenerator(Compilation compilation, ref GeneratorDriver driver, params Action<Diagnostic>[] expectedDiagnostics)
{
driver = driver.RunGenerators(compilation);
driver = driver.RunGeneratorsAndUpdateCompilation(compilation, out compilation, out _);

var actualDiagnostics = compilation.GetDiagnostics().Where(d => d.Severity != DiagnosticSeverity.Hidden);
Assert.Collection(actualDiagnostics, expectedDiagnostics);

var result = driver.GetRunResult();
return result.Results[0];
return result.Results.Single();
}

private static Project CreateTestProject(
Expand Down

0 comments on commit 25f991c

Please sign in to comment.