React to breaking changes in RouteBuilder

This commit is contained in:
Ryan Nowak 2015-12-14 14:40:38 -08:00
parent a2393f21be
commit 1126d47b3e
4 changed files with 81 additions and 97 deletions

View File

@ -79,10 +79,9 @@ namespace Microsoft.AspNet.Builder
// We use the MvcMarkerService to make sure if all the services were added. // We use the MvcMarkerService to make sure if all the services were added.
MvcServicesHelper.ThrowIfMvcNotRegistered(app.ApplicationServices); MvcServicesHelper.ThrowIfMvcNotRegistered(app.ApplicationServices);
var routes = new RouteBuilder var routes = new RouteBuilder(app)
{ {
DefaultHandler = new MvcRouteHandler(), DefaultHandler = new MvcRouteHandler(),
ServiceProvider = app.ApplicationServices
}; };
configureRoutes(routes); configureRoutes(routes);

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Routing.Constraints; using Microsoft.AspNet.Routing.Constraints;
@ -17,11 +18,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_Simple() public void MapAreaRoute_Simple()
{ {
// Arrange // Arrange
var builder = new RouteBuilder() var builder = CreateRouteBuilder();
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
// Act // Act
builder.MapAreaRoute(name: null, areaName: "admin", template: "site/Admin/"); builder.MapAreaRoute(name: null, areaName: "admin", template: "site/Admin/");
@ -52,11 +49,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_Defaults() public void MapAreaRoute_Defaults()
{ {
// Arrange // Arrange
var builder = new RouteBuilder() var builder = CreateRouteBuilder();
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
// Act // Act
builder.MapAreaRoute( builder.MapAreaRoute(
@ -96,11 +89,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_DefaultsAndConstraints() public void MapAreaRoute_DefaultsAndConstraints()
{ {
// Arrange // Arrange
var builder = new RouteBuilder() var builder = CreateRouteBuilder();
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
// Act // Act
builder.MapAreaRoute( builder.MapAreaRoute(
@ -146,11 +135,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_DefaultsConstraintsAndDataTokens() public void MapAreaRoute_DefaultsConstraintsAndDataTokens()
{ {
// Arrange // Arrange
var builder = new RouteBuilder() var builder = CreateRouteBuilder();
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
// Act // Act
builder.MapAreaRoute( builder.MapAreaRoute(
@ -203,11 +188,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_ReplacesValuesForArea() public void MapAreaRoute_ReplacesValuesForArea()
{ {
// Arrange // Arrange
var builder = new RouteBuilder() var builder = CreateRouteBuilder();
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
// Act // Act
builder.MapAreaRoute( builder.MapAreaRoute(
@ -252,5 +233,21 @@ namespace Microsoft.AspNet.Builder
services.AddRouting(); services.AddRouting();
return services.BuildServiceProvider(); return services.BuildServiceProvider();
} }
private IRouteBuilder CreateRouteBuilder()
{
var builder = new Mock<IRouteBuilder>();
builder
.SetupGet(b => b.ServiceProvider)
.Returns(CreateServices());
builder
.SetupGet(b => b.Routes)
.Returns(new List<IRouter>());
builder
.SetupGet(b => b.DefaultHandler)
.Returns(Mock.Of<IRouter>());
return builder.Object;
}
} }
} }

View File

@ -10,6 +10,7 @@ using Microsoft.AspNet.Http.Internal;
using Microsoft.AspNet.Mvc.Abstractions; using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Infrastructure; using Microsoft.AspNet.Mvc.Infrastructure;
using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.OptionsModel; using Microsoft.Extensions.OptionsModel;
@ -31,7 +32,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string expectedPath) string expectedPath)
{ {
// Arrange // Arrange
var httpContext = CreateHttpContext(GetServices(), appRoot); var httpContext = CreateHttpContext(CreateServices(), appRoot);
var actionContext = CreateActionContext(httpContext); var actionContext = CreateActionContext(httpContext);
var urlHelper = CreateUrlHelper(actionContext); var urlHelper = CreateUrlHelper(actionContext);
@ -56,7 +57,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string expectedPath) string expectedPath)
{ {
// Arrange // Arrange
var httpContext = CreateHttpContext(GetServices(), appRoot); var httpContext = CreateHttpContext(CreateServices(), appRoot);
var actionContext = CreateActionContext(httpContext); var actionContext = CreateActionContext(httpContext);
var urlHelper = CreateUrlHelper(actionContext); var urlHelper = CreateUrlHelper(actionContext);
@ -266,7 +267,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithDictionary() public void RouteUrlWithDictionary()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -286,7 +287,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithEmptyHostName() public void RouteUrlWithEmptyHostName()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -309,7 +310,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithEmptyProtocol() public void RouteUrlWithEmptyProtocol()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -332,7 +333,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithNullProtocol() public void RouteUrlWithNullProtocol()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -355,7 +356,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithNullProtocolAndNullHostName() public void RouteUrlWithNullProtocolAndNullHostName()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -378,7 +379,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithObjectProperties() public void RouteUrlWithObjectProperties()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -392,7 +393,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithProtocol() public void RouteUrlWithProtocol()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -413,7 +414,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrl_WithUnicodeHost_DoesNotPunyEncodeTheHost() public void RouteUrl_WithUnicodeHost_DoesNotPunyEncodeTheHost()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -435,7 +436,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndDefaults() public void RouteUrlWithRouteNameAndDefaults()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url"); var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("/app", routeCollection); var urlHelper = CreateUrlHelper("/app", routeCollection);
@ -450,7 +451,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndDictionary() public void RouteUrlWithRouteNameAndDictionary()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -471,7 +472,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndObjectProperties() public void RouteUrlWithRouteNameAndObjectProperties()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -491,7 +492,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithUrlRouteContext_ReturnsExpectedResult() public void RouteUrlWithUrlRouteContext_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
var routeContext = new UrlRouteContext() var routeContext = new UrlRouteContext()
@ -519,7 +520,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithAllParameters_ReturnsExpectedResult() public void RouteUrlWithAllParameters_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -543,7 +544,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlAction_RouteValuesAsDictionary_CaseSensitive() public void UrlAction_RouteValuesAsDictionary_CaseSensitive()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// We're using a dictionary with a case-sensitive comparer and loading it with data // We're using a dictionary with a case-sensitive comparer and loading it with data
@ -571,7 +572,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlAction_WithUnicodeHost_DoesNotPunyEncodeTheHost() public void UrlAction_WithUnicodeHost_DoesNotPunyEncodeTheHost()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -590,7 +591,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlRouteUrl_RouteValuesAsDictionary_CaseSensitive() public void UrlRouteUrl_RouteValuesAsDictionary_CaseSensitive()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// We're using a dictionary with a case-sensitive comparer and loading it with data // We're using a dictionary with a case-sensitive comparer and loading it with data
@ -619,7 +620,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlActionWithUrlActionContext_ReturnsExpectedResult() public void UrlActionWithUrlActionContext_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
var actionContext = new UrlActionContext() var actionContext = new UrlActionContext()
@ -643,7 +644,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlActionWithAllParameters_ReturnsExpectedResult() public void UrlActionWithAllParameters_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -664,7 +665,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithAllParameters_ReturnsExpectedResult() public void LinkWithAllParameters_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -684,7 +685,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithNullRouteName_ReturnsExpectedResult() public void LinkWithNullRouteName_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app"); var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act // Act
@ -704,7 +705,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithDefaultsAndNullRouteValues_ReturnsExpectedResult() public void LinkWithDefaultsAndNullRouteValues_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url"); var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("/app", routeCollection); var urlHelper = CreateUrlHelper("/app", routeCollection);
@ -719,7 +720,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithCustomHostAndProtocol_ReturnsExpectedResult() public void LinkWithCustomHostAndProtocol_ReturnsExpectedResult()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url"); var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("myhost", "https", routeCollection); var urlHelper = CreateUrlHelper("myhost", "https", routeCollection);
@ -741,12 +742,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_DoesNotAffectActionAndController() public void Action_RouteValueInvalidation_DoesNotAffectActionAndController()
{ {
// Arrange // Arrange
var services = GetServices(); var services = CreateServices();
var routeBuilder = new RouteBuilder() var routeBuilder = CreateRouteBuilder(services);
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
routeBuilder.MapRoute( routeBuilder.MapRoute(
"default", "default",
@ -786,12 +783,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_AffectsOtherRouteValues() public void Action_RouteValueInvalidation_AffectsOtherRouteValues()
{ {
// Arrage // Arrage
var services = GetServices(); var services = CreateServices();
var routeBuilder = new RouteBuilder() var routeBuilder = CreateRouteBuilder(services);
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
routeBuilder.MapRoute( routeBuilder.MapRoute(
"default", "default",
@ -834,12 +827,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_DoesNotAffectActionAndController_ActionPassedInRouteValues() public void Action_RouteValueInvalidation_DoesNotAffectActionAndController_ActionPassedInRouteValues()
{ {
// Arrage // Arrage
var services = GetServices(); var services = CreateServices();
var routeBuilder = new RouteBuilder() var routeBuilder = CreateRouteBuilder(services);
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
routeBuilder.MapRoute( routeBuilder.MapRoute(
"default", "default",
@ -902,7 +891,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper() private static UrlHelper CreateUrlHelper()
{ {
var services = GetServices(); var services = CreateServices();
var context = CreateHttpContext(services, string.Empty); var context = CreateHttpContext(services, string.Empty);
var actionContext = CreateActionContext(context); var actionContext = CreateActionContext(context);
@ -916,7 +905,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string host) private static UrlHelper CreateUrlHelper(string host)
{ {
var services = GetServices(); var services = CreateServices();
var context = CreateHttpContext(services, string.Empty); var context = CreateHttpContext(services, string.Empty);
context.Request.Host = new HostString(host); context.Request.Host = new HostString(host);
@ -927,7 +916,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string host, string protocol, IRouter router) private static UrlHelper CreateUrlHelper(string host, string protocol, IRouter router)
{ {
var services = GetServices(); var services = CreateServices();
var context = CreateHttpContext(services, string.Empty); var context = CreateHttpContext(services, string.Empty);
context.Request.Host = new HostString(host); context.Request.Host = new HostString(host);
context.Request.Scheme = protocol; context.Request.Scheme = protocol;
@ -939,7 +928,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string appBase, IRouter router) private static UrlHelper CreateUrlHelper(string appBase, IRouter router)
{ {
var services = GetServices(); var services = CreateServices();
var context = CreateHttpContext(services, appBase); var context = CreateHttpContext(services, appBase);
var actionContext = CreateActionContext(context, router); var actionContext = CreateActionContext(context, router);
@ -957,27 +946,25 @@ namespace Microsoft.AspNet.Mvc.Routing
return GetRouter(services, "mockRoute", "/mockTemplate"); return GetRouter(services, "mockRoute", "/mockTemplate");
} }
private static IServiceProvider GetServices() private static IServiceProvider CreateServices()
{ {
var services = new Mock<IServiceProvider>(); var services = new ServiceCollection();
services.AddLogging();
services.AddRouting();
return services.BuildServiceProvider();
}
var optionsAccessor = new Mock<IOptions<RouteOptions>>(); private static IRouteBuilder CreateRouteBuilder(IServiceProvider services)
optionsAccessor {
.SetupGet(o => o.Value) var app = new Mock<IApplicationBuilder>();
.Returns(new RouteOptions()); app
services .SetupGet(a => a.ApplicationServices)
.Setup(s => s.GetService(typeof(IOptions<RouteOptions>))) .Returns(services);
.Returns(optionsAccessor.Object);
services return new RouteBuilder(app.Object)
.Setup(s => s.GetService(typeof(IInlineConstraintResolver))) {
.Returns(new DefaultInlineConstraintResolver(optionsAccessor.Object)); DefaultHandler = new PassThroughRouter(),
};
services
.Setup(s => s.GetService(typeof(ILoggerFactory)))
.Returns(NullLoggerFactory.Instance);
return services.Object;
} }
private static IRouter GetRouter( private static IRouter GetRouter(
@ -985,8 +972,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string mockRouteName, string mockRouteName,
string mockTemplateValue) string mockTemplateValue)
{ {
var routeBuilder = new RouteBuilder(); var routeBuilder = CreateRouteBuilder(services);
routeBuilder.ServiceProvider = services;
var target = new Mock<IRouter>(MockBehavior.Strict); var target = new Mock<IRouter>(MockBehavior.Strict);
target target

View File

@ -516,10 +516,12 @@ namespace Microsoft.AspNet.Mvc
private static RouteBuilder GetRouteBuilder(IServiceProvider serviceProvider) private static RouteBuilder GetRouteBuilder(IServiceProvider serviceProvider)
{ {
var builder = new RouteBuilder var app = new Mock<IApplicationBuilder>();
{ app
ServiceProvider = serviceProvider, .SetupGet(a => a.ApplicationServices)
}; .Returns(serviceProvider);
var builder = new RouteBuilder(app.Object);
var handler = new Mock<IRouter>(MockBehavior.Strict); var handler = new Mock<IRouter>(MockBehavior.Strict);
handler handler