Skip to content

Commit 802ef7e

Browse files
committed
fixup
1 parent c5f4ac0 commit 802ef7e

File tree

7 files changed

+45
-17
lines changed

7 files changed

+45
-17
lines changed

src/Hosting/Hosting/test/GenericWebHostBuilderTests.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,20 +165,24 @@ private async Task AssertResponseContains(RequestDelegate app, string expectedTe
165165

166166
private class FirstStartup
167167
{
168-
public void ConfigureServices(IServiceCollection services) { }
169-
168+
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<FirstStartup>(); }
169+
170170
public void Configure(IApplicationBuilder app)
171171
{
172+
Assert.NotNull(app.ApplicationServices.GetService<FirstStartup>());
173+
Assert.Null(app.ApplicationServices.GetService<SecondStartup>());
172174
app.Run(context => context.Response.WriteAsync("FirstStartup"));
173175
}
174176
}
175177

176178
private class SecondStartup
177179
{
178-
public void ConfigureServices(IServiceCollection services) { }
179-
180+
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<SecondStartup>(); }
181+
180182
public void Configure(IApplicationBuilder app)
181183
{
184+
Assert.Null(app.ApplicationServices.GetService<FirstStartup>());
185+
Assert.NotNull(app.ApplicationServices.GetService<SecondStartup>());
182186
app.Run(context => context.Response.WriteAsync("SecondStartup"));
183187
}
184188
}

src/Hosting/Hosting/test/WebHostBuilderTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,11 +1681,11 @@ public void Configure(IWebHostBuilder builder)
16811681
// This check is required because MVC still uses the
16821682
// IWebHostEnvironment instance before the container is baked
16831683
#pragma warning disable CS0618 // Type or member is obsolete
1684-
var heDescriptor = services.SingleOrDefault(s => s.ServiceType == typeof(IHostingEnvironment));
1684+
var heDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(IHostingEnvironment));
16851685
Assert.NotNull(heDescriptor);
16861686
Assert.NotNull(heDescriptor.ImplementationInstance);
16871687
#pragma warning restore CS0618 // Type or member is obsolete
1688-
var wheDescriptor = services.SingleOrDefault(s => s.ServiceType == typeof(IWebHostEnvironment));
1688+
var wheDescriptor = services.FirstOrDefault(s => s.ServiceType == typeof(IWebHostEnvironment));
16891689
Assert.NotNull(wheDescriptor);
16901690
Assert.NotNull(wheDescriptor.ImplementationInstance);
16911691
})

src/Mvc/Mvc.Testing/src/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory<TEntryPoint>.StartServer(
33
Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory<TEntryPoint>.UseKestrel() -> void
44
Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory<TEntryPoint>.UseKestrel(int port) -> void
55
Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory<TEntryPoint>.UseKestrel(System.Action<Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions!>! configureKestrelOptions) -> void
6+
virtual Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory<TEntryPoint>.CreateServer(System.IServiceProvider! serviceProvider) -> Microsoft.AspNetCore.TestHost.TestServer!

src/Mvc/Mvc.Testing/src/WebApplicationFactory.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ internal virtual WebApplicationFactory<TEntryPoint> WithWebHostBuilderCore(Actio
143143
var factory = new DelegatedWebApplicationFactory(
144144
ClientOptions,
145145
CreateServer,
146+
CreateServer,
146147
CreateHost,
147148
CreateWebHostBuilder,
148149
CreateHostBuilder,
@@ -337,7 +338,10 @@ private void ConfigureHostBuilder(IHostBuilder hostBuilder)
337338
}
338339
else
339340
{
340-
webHostBuilder.UseTestServer();
341+
webHostBuilder.ConfigureServices(services =>
342+
{
343+
services.AddSingleton<IServer>(CreateServer);
344+
});
341345
}
342346
});
343347
_host = CreateHost(hostBuilder);
@@ -565,10 +569,19 @@ private static void EnsureDepsFile()
565569
/// <returns>The <see cref="TestServer"/> with the bootstrapped application.</returns>
566570
protected virtual TestServer CreateServer(IWebHostBuilder builder) => new(builder);
567571

572+
/// <summary>
573+
/// Creates the <see cref="TestServer"/> with the <see cref="IServiceProvider"/> from the bootstrapped application.
574+
/// This is only called for applications using <see cref="IHostBuilder"/>. Applications based on
575+
/// <see cref="IWebHostBuilder"/> will use <see cref="CreateHost"/> instead.
576+
/// </summary>
577+
/// <param name="serviceProvider">The <see cref="IServiceProvider"/> from the bootstrapped application.</param>
578+
/// <returns></returns>
579+
protected virtual TestServer CreateServer(IServiceProvider serviceProvider) => new(serviceProvider);
580+
568581
/// <summary>
569582
/// Creates the <see cref="IHost"/> with the bootstrapped application in <paramref name="builder"/>.
570583
/// This is only called for applications using <see cref="IHostBuilder"/>. Applications based on
571-
/// <see cref="IWebHostBuilder"/> will use <see cref="CreateServer"/> instead.
584+
/// <see cref="IWebHostBuilder"/> will use <see cref="CreateServer(IWebHostBuilder)"/> instead.
572585
/// </summary>
573586
/// <param name="builder">The <see cref="IHostBuilder"/> used to create the host.</param>
574587
/// <returns>The <see cref="IHost"/> with the bootstrapped application.</returns>
@@ -801,6 +814,7 @@ public virtual async ValueTask DisposeAsync()
801814
private sealed class DelegatedWebApplicationFactory : WebApplicationFactory<TEntryPoint>
802815
{
803816
private readonly Func<IWebHostBuilder, TestServer> _createServer;
817+
private readonly Func<IServiceProvider, TestServer> _createServerFromServiceProvider;
804818
private readonly Func<IHostBuilder, IHost> _createHost;
805819
private readonly Func<IWebHostBuilder?> _createWebHostBuilder;
806820
private readonly Func<IHostBuilder?> _createHostBuilder;
@@ -810,6 +824,7 @@ private sealed class DelegatedWebApplicationFactory : WebApplicationFactory<TEnt
810824
public DelegatedWebApplicationFactory(
811825
WebApplicationFactoryClientOptions options,
812826
Func<IWebHostBuilder, TestServer> createServer,
827+
Func<IServiceProvider, TestServer> createServerFromServiceProvider,
813828
Func<IHostBuilder, IHost> createHost,
814829
Func<IWebHostBuilder?> createWebHostBuilder,
815830
Func<IHostBuilder?> createHostBuilder,
@@ -819,6 +834,7 @@ public DelegatedWebApplicationFactory(
819834
{
820835
ClientOptions = new WebApplicationFactoryClientOptions(options);
821836
_createServer = createServer;
837+
_createServerFromServiceProvider = createServerFromServiceProvider;
822838
_createHost = createHost;
823839
_createWebHostBuilder = createWebHostBuilder;
824840
_createHostBuilder = createHostBuilder;
@@ -829,6 +845,8 @@ public DelegatedWebApplicationFactory(
829845

830846
protected override TestServer CreateServer(IWebHostBuilder builder) => _createServer(builder);
831847

848+
protected override TestServer CreateServer(IServiceProvider serviceProvider) => _createServerFromServiceProvider(serviceProvider);
849+
832850
protected override IHost CreateHost(IHostBuilder builder) => _createHost(builder);
833851

834852
protected override IWebHostBuilder? CreateWebHostBuilder() => _createWebHostBuilder();
@@ -846,6 +864,7 @@ internal override WebApplicationFactory<TEntryPoint> WithWebHostBuilderCore(Acti
846864
return new DelegatedWebApplicationFactory(
847865
ClientOptions,
848866
_createServer,
867+
_createServerFromServiceProvider,
849868
_createHost,
850869
_createWebHostBuilder,
851870
_createHostBuilder,

src/Mvc/test/Mvc.FunctionalTests/Infrastructure/MvcEncodedTestFixtureOfT.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33

44
using System.Text.Encodings.Web;
55
using Microsoft.AspNetCore.Hosting;
6-
using Microsoft.Extensions.DependencyInjection.Extensions;
6+
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.Logging;
88
using Microsoft.Extensions.WebEncoders.Testing;
9-
using Xunit.Abstractions;
109

1110
namespace Microsoft.AspNetCore.Mvc.FunctionalTests;
1211

@@ -20,9 +19,9 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
2019
base.ConfigureWebHost(builder);
2120
builder.ConfigureServices(services =>
2221
{
23-
services.TryAddTransient<HtmlEncoder, HtmlTestEncoder>();
24-
services.TryAddTransient<JavaScriptEncoder, JavaScriptTestEncoder>();
25-
services.TryAddTransient<UrlEncoder, UrlTestEncoder>();
22+
services.AddTransient<HtmlEncoder, HtmlTestEncoder>();
23+
services.AddTransient<JavaScriptEncoder, JavaScriptTestEncoder>();
24+
services.AddTransient<UrlEncoder, UrlTestEncoder>();
2625
});
2726
}
2827
}

src/Mvc/test/Mvc.FunctionalTests/RazorBuildTest.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ protected override void Initialize(TestContext context, MethodInfo methodInfo, o
2525
{
2626
base.Initialize(context, methodInfo, testMethodArguments, testOutputHelper);
2727
Factory = new MvcTestFixture<RazorBuildWebSite.Startup>(LoggerFactory)
28-
.WithWebHostBuilder(b => b.UseStartup<RazorBuildWebSite.Startup>())
2928
.WithWebHostBuilder(b => b.ConfigureTestServices(serviceCollection => serviceCollection.Configure<MvcRazorRuntimeCompilationOptions>(ConfigureRuntimeCompilationOptions)));
3029

3130
static void ConfigureRuntimeCompilationOptions(MvcRazorRuntimeCompilationOptions options)

src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureInheritanceTests.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public void TestingInfrastructure_WebHost_WithWebHostBuilderRespectsCustomizatio
2626
// Assert
2727
Assert.Equal(new[] { "ConfigureWebHost", "Customization", "FurtherCustomization" }, factory.ConfigureWebHostCalled.ToArray());
2828
Assert.True(factory.CreateServerCalled);
29-
Assert.True(factory.CreateWebHostBuilderCalled);
29+
Assert.False(factory.CreateWebHostBuilderCalled);
3030
// GetTestAssemblies is not called when reading content roots from MvcAppManifest
3131
Assert.False(factory.GetTestAssembliesCalled);
3232
Assert.True(factory.CreateHostBuilderCalled);
33-
Assert.False(factory.CreateHostCalled);
33+
Assert.True(factory.CreateHostCalled);
3434
}
3535

3636
[Fact]
@@ -48,7 +48,7 @@ public void TestingInfrastructure_GenericHost_WithWithHostBuilderRespectsCustomi
4848
Assert.False(factory.GetTestAssembliesCalled);
4949
Assert.True(factory.CreateHostBuilderCalled);
5050
Assert.True(factory.CreateHostCalled);
51-
Assert.False(factory.CreateServerCalled);
51+
Assert.True(factory.CreateServerCalled);
5252
Assert.False(factory.CreateWebHostBuilderCalled);
5353
}
5454

@@ -147,6 +147,12 @@ protected override TestServer CreateServer(IWebHostBuilder builder)
147147
return base.CreateServer(builder);
148148
}
149149

150+
protected override TestServer CreateServer(IServiceProvider serviceProvider)
151+
{
152+
CreateServerCalled = true;
153+
return base.CreateServer(serviceProvider);
154+
}
155+
150156
protected override IHost CreateHost(IHostBuilder builder)
151157
{
152158
CreateHostCalled = true;

0 commit comments

Comments
 (0)