Skip to content

Commit f0af112

Browse files
authoredFeb 7, 2023
Add nullability warning checks to RequestDelegateGeneratorTests (#46488)
* Add nullability warning checks to RequestDelegateGeneratorTests * Fixup method names
1 parent 249dfcb commit f0af112

File tree

4 files changed

+32
-33
lines changed

4 files changed

+32
-33
lines changed
 

‎src/Http/Http.Extensions/test/Microsoft.AspNetCore.Http.Extensions.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<Reference Include="Microsoft.AspNetCore.Http.Results" />
1818
<Reference Include="Microsoft.AspNetCore.Http.Extensions" />
1919
<Reference Include="Microsoft.CodeAnalysis.CSharp" />
20+
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
2021
<Reference Include="Microsoft.Extensions.DependencyInjection" />
2122
<Reference Include="Microsoft.Extensions.DependencyModel" />
2223
</ItemGroup>

‎src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorIncrementalityTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,36 @@ namespace Microsoft.AspNetCore.Http.Generators.Tests;
66
public class RequestDelegateGeneratorIncrementalityTests : RequestDelegateGeneratorTestBase
77
{
88
[Fact]
9-
public void MapAction_SameReturnType_DoesNotTriggerUpdate()
9+
public async Task MapAction_SameReturnType_DoesNotTriggerUpdate()
1010
{
1111
var source = @"app.MapGet(""/hello"", () => ""Hello world!"");";
1212
var updatedSource = @"app.MapGet(""/hello"", () => ""Bye world!"");";
1313

14-
var (result, compilation) = RunGenerator(source, updatedSource);
14+
var (result, compilation) = await RunGeneratorAsync(source, updatedSource);
1515
var outputSteps = GetRunStepOutputs(result);
1616

1717
Assert.All(outputSteps, (value) => Assert.Equal(IncrementalStepRunReason.Cached, value.Reason));
1818
}
1919

2020
[Fact]
21-
public void MapAction_DifferentRoutePattern_DoesNotTriggerUpdate()
21+
public async Task MapAction_DifferentRoutePattern_DoesNotTriggerUpdate()
2222
{
2323
var source = @"app.MapGet(""/hello"", () => ""Hello world!"");";
2424
var updatedSource = @"app.MapGet(""/hello-2"", () => ""Hello world!"");";
2525

26-
var (result, compilation) = RunGenerator(source, updatedSource);
26+
var (result, compilation) = await RunGeneratorAsync(source, updatedSource);
2727
var outputSteps = GetRunStepOutputs(result);
2828

2929
Assert.All(outputSteps, (value) => Assert.Equal(IncrementalStepRunReason.Cached, value.Reason));
3030
}
3131

3232
[Fact]
33-
public void MapAction_ChangeReturnType_TriggersUpdate()
33+
public async Task MapAction_ChangeReturnType_TriggersUpdate()
3434
{
3535
var source = @"app.MapGet(""/hello"", () => ""Hello world!"");";
3636
var updatedSource = @"app.MapGet(""/hello"", () => Task.FromResult(""Hello world!""));";
3737

38-
var (result, compilation) = RunGenerator(source, updatedSource);
38+
var (result, compilation) = await RunGeneratorAsync(source, updatedSource);
3939
var outputSteps = GetRunStepOutputs(result);
4040

4141
Assert.All(outputSteps, (value) => Assert.Equal(IncrementalStepRunReason.New, value.Reason));

‎src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTestBase.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ namespace Microsoft.AspNetCore.Http.Generators.Tests;
2020

2121
public class RequestDelegateGeneratorTestBase : LoggedTest
2222
{
23-
internal static (GeneratorRunResult, Compilation) RunGenerator(string sources, params string[] updatedSources)
23+
internal static async Task<(GeneratorRunResult, Compilation)> RunGeneratorAsync(string sources, params string[] updatedSources)
2424
{
25-
var compilation = CreateCompilation(sources);
25+
var compilation = await CreateCompilationAsync(sources);
2626
var generator = new RequestDelegateGenerator().AsSourceGenerator();
2727

2828
// Enable the source generator in tests
@@ -174,18 +174,20 @@ public class Todo
174174
}
175175
}
176176
""";
177-
private static Compilation CreateCompilation(string sources)
177+
private static Task<Compilation> CreateCompilationAsync(string sources)
178178
{
179179
var source = GetMapActionString(sources);
180+
var projectName = $"TestProject-{Guid.NewGuid()}";
181+
var project = new AdhocWorkspace().CurrentSolution
182+
.AddProject(projectName, projectName, LanguageNames.CSharp)
183+
.WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
184+
.WithNullableContextOptions(NullableContextOptions.Enable))
185+
.WithParseOptions(new CSharpParseOptions(LanguageVersion.CSharp11));
180186

181-
var syntaxTrees = new[]
182-
{
183-
CSharpSyntaxTree.ParseText(source, path: $"TestMapActions.cs")
184-
};
187+
project = project.AddDocument("TestMapActions.cs", SourceText.From(source, Encoding.UTF8)).Project;
185188

186189
// Add in required metadata references
187190
var resolver = new AppLocalResolver();
188-
var references = new List<PortableExecutableReference>();
189191
var dependencyContext = DependencyContext.Load(typeof(RequestDelegateGeneratorTestBase).Assembly);
190192

191193
Assert.NotNull(dependencyContext);
@@ -199,16 +201,12 @@ private static Compilation CreateCompilation(string sources)
199201
{
200202
continue;
201203
}
202-
references.Add(MetadataReference.CreateFromFile(resolveReferencePath));
204+
project = project.AddMetadataReference(MetadataReference.CreateFromFile(resolveReferencePath));
203205
}
204206
}
205207

206208
// Create a Roslyn compilation for the syntax tree.
207-
var compilation = CSharpCompilation.Create(assemblyName: Guid.NewGuid().ToString(),
208-
syntaxTrees: syntaxTrees,
209-
references: references,
210-
options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
211-
return compilation;
209+
return project.GetCompilationAsync();
212210
}
213211

214212
internal async Task VerifyAgainstBaselineUsingFile(Compilation compilation, [CallerMemberName] string callerName = "")

‎src/Http/Http.Extensions/test/RequestDelegateGenerator/RequestDelegateGeneratorTests.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class RequestDelegateGeneratorTests : RequestDelegateGeneratorTestBase
1616
[InlineData(@"app.MapPut(handler: () => ""Hello world!"", pattern: ""/hello"");", "MapPut", "Hello world!")]
1717
public async Task MapAction_NoParam_StringReturn(string source, string httpMethod, string expectedBody)
1818
{
19-
var (result, compilation) = RunGenerator(source);
19+
var (result, compilation) = await RunGeneratorAsync(source);
2020

2121
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
2222
var endpoint = GetEndpointFromCompilation(compilation);
@@ -51,7 +51,7 @@ public async Task MapGet_NoParam_StringReturn_WithFilter()
5151
});
5252
""";
5353
var expectedBody = "Filtered: Hello world!";
54-
var (result, compilation) = RunGenerator(source);
54+
var (result, compilation) = await RunGeneratorAsync(source);
5555

5656
await VerifyAgainstBaselineUsingFile(compilation);
5757

@@ -82,7 +82,7 @@ public async Task MapGet_NoParam_StringReturn_WithFilter()
8282
[InlineData(@"app.MapGet(""/"", () => new DateTime(2023, 1, 1));", @"""2023-01-01T00:00:00""")]
8383
public async Task MapAction_NoParam_AnyReturn(string source, string expectedBody)
8484
{
85-
var (result, compilation) = RunGenerator(source);
85+
var (result, compilation) = await RunGeneratorAsync(source);
8686

8787
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
8888
var endpoint = GetEndpointFromCompilation(compilation);
@@ -116,7 +116,7 @@ public async Task MapAction_NoParam_AnyReturn(string source, string expectedBody
116116
public async Task MapAction_NoParam_ComplexReturn(string source)
117117
{
118118
var expectedBody = """{"id":0,"name":"Test Item","isComplete":false}""";
119-
var (result, compilation) = RunGenerator(source);
119+
var (result, compilation) = await RunGeneratorAsync(source);
120120

121121
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
122122
var endpoint = GetEndpointFromCompilation(compilation);
@@ -143,9 +143,9 @@ public async Task MapAction_NoParam_ComplexReturn(string source)
143143
[InlineData(@"app.MapGet(""/"", () => Results.NotFound(""Oops!""));", null)]
144144
[InlineData(@"app.MapGet(""/"", () => Task.FromResult(new Todo() { Name = ""Test Item""}));", "application/json")]
145145
[InlineData(@"app.MapGet(""/"", () => ""Hello world!"");", "text/plain")]
146-
public void MapAction_ProducesCorrectContentType(string source, string expectedContentType)
146+
public async Task MapAction_ProducesCorrectContentType(string source, string expectedContentType)
147147
{
148-
var (result, compilation) = RunGenerator(source);
148+
var (result, compilation) = await RunGeneratorAsync(source);
149149

150150
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
151151

@@ -160,7 +160,7 @@ public void MapAction_ProducesCorrectContentType(string source, string expectedC
160160
[InlineData(@"app.MapGet(""/"", () => Task.FromResult(TypedResults.Ok(new Todo() { Name = ""Test Item""})));", """{"id":0,"name":"Test Item","isComplete":false}""")]
161161
public async Task MapAction_NoParam_TaskOfTReturn(string source, string expectedBody)
162162
{
163-
var (result, compilation) = RunGenerator(source);
163+
var (result, compilation) = await RunGeneratorAsync(source);
164164

165165
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
166166
var endpoint = GetEndpointFromCompilation(compilation);
@@ -188,7 +188,7 @@ public async Task MapAction_NoParam_TaskOfTReturn(string source, string expected
188188
[InlineData(@"app.MapGet(""/"", () => ValueTask.FromResult(TypedResults.Ok(new Todo() { Name = ""Test Item""})));", """{"id":0,"name":"Test Item","isComplete":false}""")]
189189
public async Task MapAction_NoParam_ValueTaskOfTReturn(string source, string expectedBody)
190190
{
191-
var (result, compilation) = RunGenerator(source);
191+
var (result, compilation) = await RunGeneratorAsync(source);
192192

193193
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
194194
var endpoint = GetEndpointFromCompilation(compilation);
@@ -219,7 +219,7 @@ public async Task MapAction_NoParam_ValueTaskOfTReturn(string source, string exp
219219
[InlineData(@"app.MapGet(""/"", () => Task<object>.FromResult(TypedResults.Ok(new Todo() { Name = ""Test Item""})));", """{"id":0,"name":"Test Item","isComplete":false}""")]
220220
public async Task MapAction_NoParam_TaskLikeOfObjectReturn(string source, string expectedBody)
221221
{
222-
var (result, compilation) = RunGenerator(source);
222+
var (result, compilation) = await RunGeneratorAsync(source);
223223

224224
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
225225
var endpoint = GetEndpointFromCompilation(compilation);
@@ -250,7 +250,7 @@ public async Task Multiple_MapAction_NoParam_StringReturn()
250250
app.MapGet("/en-task", () => Task.FromResult("Hello world!"));
251251
app.MapGet("/es-task", () => new ValueTask<string>("Hola mundo!"));
252252
""";
253-
var (_, compilation) = RunGenerator(source);
253+
var (_, compilation) = await RunGeneratorAsync(source);
254254

255255
await VerifyAgainstBaselineUsingFile(compilation);
256256
}
@@ -263,7 +263,7 @@ public async Task MapAction_VariableRoutePattern_EmitsDiagnostic_NoSource()
263263
var route = "/en";
264264
app.MapGet(route, () => "Hello world!");
265265
""";
266-
var (result, compilation) = RunGenerator(source);
266+
var (result, compilation) = await RunGeneratorAsync(source);
267267

268268
// Emits diagnostic but generates no source
269269
var diagnostic = Assert.Single(result.Diagnostics);
@@ -287,12 +287,12 @@ public async Task MapAction_VariableRoutePattern_EmitsDiagnostic_NoSource()
287287
}
288288

289289
[Fact]
290-
public void MapAction_RequestDelegateHandler_DoesNotEmit()
290+
public async Task MapAction_RequestDelegateHandler_DoesNotEmit()
291291
{
292292
var source = """
293293
app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello world"));
294294
""";
295-
var (result, _) = RunGenerator(source);
295+
var (result, _) = await RunGeneratorAsync(source);
296296
var endpointModel = GetStaticEndpoint(result, GeneratorSteps.EndpointModelStep);
297297

298298
// Endpoint model is null because we don't pass transform

0 commit comments

Comments
 (0)