Add more to `MvcCoreServiceCollectionExtensionsTest`
- 2nd half of #5554 - follow-on to #5540 PR
This commit is contained in:
parent
f32d0f2505
commit
48546dbb28
|
|
@ -131,7 +131,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
//
|
//
|
||||||
// Action Discovery
|
// Action Discovery
|
||||||
//
|
//
|
||||||
// These are consumed only when creating action descriptors, then they can be de-allocated
|
// These are consumed only when creating action descriptors, then they can be deallocated
|
||||||
|
|
||||||
services.TryAddEnumerable(
|
services.TryAddEnumerable(
|
||||||
ServiceDescriptor.Transient<IApplicationModelProvider, DefaultApplicationModelProvider>());
|
ServiceDescriptor.Transient<IApplicationModelProvider, DefaultApplicationModelProvider>());
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,13 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Mvc.Abstractions;
|
using Microsoft.AspNetCore.Mvc.Abstractions;
|
||||||
using Microsoft.AspNetCore.Mvc.ActionConstraints;
|
using Microsoft.AspNetCore.Mvc.ActionConstraints;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||||
using Microsoft.AspNetCore.Mvc.Filters;
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using Microsoft.AspNetCore.Mvc.Internal;
|
using Microsoft.AspNetCore.Mvc.Internal;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
|
|
@ -32,7 +36,7 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
// Register a mock implementation of each service, AddMvcServices should add another implemenetation.
|
// Register a mock implementation of each service, AddMvcServices should add another implementation.
|
||||||
foreach (var serviceType in MutliRegistrationServiceTypes)
|
foreach (var serviceType in MutliRegistrationServiceTypes)
|
||||||
{
|
{
|
||||||
var mockType = typeof(Mock<>).MakeGenericType(serviceType.Key);
|
var mockType = typeof(Mock<>).MakeGenericType(serviceType.Key);
|
||||||
|
|
@ -104,6 +108,112 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMvcCore_UsesOriginalPartManager()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var manager = new ApplicationPartManager();
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddSingleton(manager);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
// SingleRegistrationServiceTypes_AreNotRegistered_MultipleTimes already checks that no other
|
||||||
|
// ApplicationPartManager (but manager) is registered.
|
||||||
|
Assert.Same(manager, builder.PartManager);
|
||||||
|
Assert.Contains(manager.FeatureProviders, provider => provider is ControllerFeatureProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Regression test for aspnet/Mvc#5554.
|
||||||
|
[Fact]
|
||||||
|
public void AddMvcCore_UsesLastPartManager()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var mockManager = new Mock<ApplicationPartManager>(MockBehavior.Strict);
|
||||||
|
services.AddSingleton(mockManager.Object);
|
||||||
|
|
||||||
|
var manager = new ApplicationPartManager();
|
||||||
|
services.AddSingleton(manager);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(manager, builder.PartManager);
|
||||||
|
Assert.Contains(manager.FeatureProviders, provider => provider is ControllerFeatureProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMvcCore_UsesOriginalHostingEnvironment()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var environment = new Mock<IHostingEnvironment>(MockBehavior.Strict);
|
||||||
|
environment.SetupGet(e => e.ApplicationName).Returns((string)null).Verifiable();
|
||||||
|
services.AddSingleton<IHostingEnvironment>(environment.Object);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.NotNull(builder.PartManager);
|
||||||
|
Assert.Empty(builder.PartManager.ApplicationParts);
|
||||||
|
Assert.Contains(builder.PartManager.FeatureProviders, provider => provider is ControllerFeatureProvider);
|
||||||
|
|
||||||
|
environment.VerifyAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second regression test for aspnet/Mvc#5554.
|
||||||
|
[Fact]
|
||||||
|
public void AddMvcCore_UsesLastHostingEnvironment()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var environment = new Mock<IHostingEnvironment>(MockBehavior.Strict);
|
||||||
|
services.AddSingleton<IHostingEnvironment>(environment.Object);
|
||||||
|
|
||||||
|
environment = new Mock<IHostingEnvironment>(MockBehavior.Strict);
|
||||||
|
environment.SetupGet(e => e.ApplicationName).Returns((string)null).Verifiable();
|
||||||
|
services.AddSingleton<IHostingEnvironment>(environment.Object);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.NotNull(builder.PartManager);
|
||||||
|
Assert.Empty(builder.PartManager.ApplicationParts);
|
||||||
|
Assert.Contains(builder.PartManager.FeatureProviders, provider => provider is ControllerFeatureProvider);
|
||||||
|
|
||||||
|
environment.VerifyAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMvcCore_GetsPartsForApplication()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var environment = new Mock<IHostingEnvironment>(MockBehavior.Strict);
|
||||||
|
var assemblyName = typeof(MvcCoreServiceCollectionExtensionsTest).GetTypeInfo().Assembly.GetName();
|
||||||
|
var applicationName = assemblyName.FullName;
|
||||||
|
environment.SetupGet(e => e.ApplicationName).Returns(applicationName).Verifiable();
|
||||||
|
services.AddSingleton<IHostingEnvironment>(environment.Object);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.NotNull(builder.PartManager);
|
||||||
|
Assert.Contains(
|
||||||
|
builder.PartManager.ApplicationParts,
|
||||||
|
part => string.Equals(assemblyName.Name, part.Name, StringComparison.Ordinal));
|
||||||
|
Assert.Contains(builder.PartManager.FeatureProviders, provider => provider is ControllerFeatureProvider);
|
||||||
|
|
||||||
|
environment.VerifyAll();
|
||||||
|
}
|
||||||
|
|
||||||
private IEnumerable<Type> SingleRegistrationServiceTypes
|
private IEnumerable<Type> SingleRegistrationServiceTypes
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue