Should GetVirtualPath returns PathString

This commit is contained in:
ianhong 2015-03-20 16:43:37 -07:00
parent fe5b6d67c5
commit ff209f04bb
5 changed files with 111 additions and 83 deletions

View File

@ -13,7 +13,6 @@ using Microsoft.Framework.Internal;
using Microsoft.Framework.Logging; using Microsoft.Framework.Logging;
using Microsoft.Framework.OptionsModel; using Microsoft.Framework.OptionsModel;
namespace Microsoft.AspNet.Routing namespace Microsoft.AspNet.Routing
{ {
public class RouteCollection : IRouteCollection public class RouteCollection : IRouteCollection
@ -214,18 +213,18 @@ namespace Microsoft.AspNet.Routing
} }
} }
private string NormalizeVirtualPath(String url) private PathString NormalizeVirtualPath(PathString path)
{ {
if (string.IsNullOrEmpty(url)) return url; var url = path.Value;
if (_options.LowercaseUrls) if (!string.IsNullOrEmpty(url) && _options.LowercaseUrls)
{ {
var indexOfSeparator = url.IndexOfAny(new char[] { '?', '#' }); var indexOfSeparator = url.IndexOfAny(new char[] { '?', '#' });
// No query string, lowercase the url // No query string, lowercase the url
if (indexOfSeparator == -1) if (indexOfSeparator == -1)
{ {
return url.ToLowerInvariant(); url = url.ToLowerInvariant();
} }
else else
{ {
@ -233,11 +232,13 @@ namespace Microsoft.AspNet.Routing
var queryString = url.Substring(indexOfSeparator); var queryString = url.Substring(indexOfSeparator);
// queryString will contain the delimiter ? or # as the first character, so it's safe to append. // queryString will contain the delimiter ? or # as the first character, so it's safe to append.
return lowercaseUrl + queryString; url = lowercaseUrl + queryString;
} }
return new PathString(url);
} }
return url; return path;
} }
private void EnsureLogger(HttpContext context) private void EnsureLogger(HttpContext context)

View File

@ -1,7 +1,9 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// 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.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNet.Http;
using Microsoft.Framework.Internal; using Microsoft.Framework.Internal;
namespace Microsoft.AspNet.Routing namespace Microsoft.AspNet.Routing
@ -12,7 +14,6 @@ namespace Microsoft.AspNet.Routing
/// </summary> /// </summary>
public class VirtualPathData public class VirtualPathData
{ {
private string _virtualPath;
private readonly IDictionary<string, object> _dataToken; private readonly IDictionary<string, object> _dataToken;
/// <summary> /// <summary>
@ -34,6 +35,21 @@ namespace Microsoft.AspNet.Routing
public VirtualPathData( public VirtualPathData(
[NotNull] IRouter router, [NotNull] IRouter router,
string virtualPath, string virtualPath,
IDictionary<string, object> dataTokens)
: this(router, CreatePathString(virtualPath), dataTokens)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="VirtualPathData"/> class.
/// </summary>
/// <param name="router">The object that is used to generate the URL.</param>
/// <param name="virtualPath">The generated URL.</param>
/// <param name="dataTokens">The collection of custom values.</param>
public VirtualPathData(
[NotNull] IRouter router,
PathString virtualPath,
IDictionary<string, object> dataTokens) IDictionary<string, object> dataTokens)
{ {
Router = router; Router = router;
@ -65,16 +81,26 @@ namespace Microsoft.AspNet.Routing
/// <summary> /// <summary>
/// Gets or sets the URL that was generated from the <see cref="Router"/>. /// Gets or sets the URL that was generated from the <see cref="Router"/>.
/// </summary> /// </summary>
public string VirtualPath public PathString VirtualPath { get; set; }
private static PathString CreatePathString(string path)
{ {
get if (!string.IsNullOrEmpty(path))
{ {
return _virtualPath ?? string.Empty; PathString pathString;
} if (path.Length > 0 && !path.StartsWith("/", StringComparison.Ordinal))
set {
{ pathString = new PathString("/" + path);
_virtualPath = value; }
else
{
pathString = new PathString(path);
}
return pathString;
} }
return PathString.Empty;
} }
} }
} }

View File

@ -20,12 +20,12 @@ namespace Microsoft.AspNet.Routing
public class RouteCollectionTest public class RouteCollectionTest
{ {
[Theory] [Theory]
[InlineData(@"Home/Index/23", "home/index/23", true)] [InlineData(@"Home/Index/23", "/home/index/23", true)]
[InlineData(@"Home/Index/23", "Home/Index/23", false)] [InlineData(@"Home/Index/23", "/Home/Index/23", false)]
[InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "Home/Index/23?Param1=ABC&Param2=Xyz", false)] [InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "/Home/Index/23?Param1=ABC&Param2=Xyz", false)]
[InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "home/index/23?Param1=ABC&Param2=Xyz", true)] [InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "/home/index/23?Param1=ABC&Param2=Xyz", true)]
[InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "Home/Index/23#Param1=ABC&Param2=Xyz", false)] [InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "/Home/Index/23#Param1=ABC&Param2=Xyz", false)]
[InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "home/index/23#Param1=ABC&Param2=Xyz", true)] [InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "/home/index/23#Param1=ABC&Param2=Xyz", true)]
public void GetVirtualPath_CanLowerCaseUrls_BasedOnOptions( public void GetVirtualPath_CanLowerCaseUrls_BasedOnOptions(
string returnUrl, string returnUrl,
string lowercaseUrl, string lowercaseUrl,
@ -45,15 +45,15 @@ namespace Microsoft.AspNet.Routing
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
// Assert // Assert
Assert.Equal(lowercaseUrl, pathData.VirtualPath); Assert.Equal(new PathString(lowercaseUrl), pathData.VirtualPath);
Assert.Same(target.Object, pathData.Router); Assert.Same(target.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
[Theory] [Theory]
[InlineData(@"\u0130", @"\u0130", true)] [InlineData(@"\u0130", @"/\u0130", true)]
[InlineData(@"\u0049", @"\u0049", true)] [InlineData(@"\u0049", @"/\u0049", true)]
[InlineData(@"<22>ino", @"<EFBFBD>ino", true)] [InlineData(@"<22>ino", @"/<EFBFBD>ino", true)]
public void GetVirtualPath_DoesntLowerCaseUrls_Invariant( public void GetVirtualPath_DoesntLowerCaseUrls_Invariant(
string returnUrl, string returnUrl,
string lowercaseUrl, string lowercaseUrl,
@ -73,7 +73,7 @@ namespace Microsoft.AspNet.Routing
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
// Assert // Assert
Assert.Equal(lowercaseUrl, pathData.VirtualPath); Assert.Equal(new PathString(lowercaseUrl), pathData.VirtualPath);
Assert.Same(target.Object, pathData.Router); Assert.Same(target.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -83,7 +83,7 @@ namespace Microsoft.AspNet.Routing
public void GetVirtualPath_ReturnsDataTokens(RouteValueDictionary dataTokens, string routerName) public void GetVirtualPath_ReturnsDataTokens(RouteValueDictionary dataTokens, string routerName)
{ {
// Arrange // Arrange
var virtualPath = "TestVirtualPath"; var virtualPath = new PathString("/TestVirtualPath");
var pathContextValues = new RouteValueDictionary { { "controller", virtualPath } }; var pathContextValues = new RouteValueDictionary { { "controller", virtualPath } };
@ -114,7 +114,7 @@ namespace Microsoft.AspNet.Routing
Assert.Equal(dataToken.Value, pathData.DataTokens[dataToken.Key]); Assert.Equal(dataToken.Value, pathData.DataTokens[dataToken.Key]);
} }
} }
[Fact] [Fact]
public async Task RouteAsync_LogsCorrectValuesWhenHandled() public async Task RouteAsync_LogsCorrectValuesWhenHandled()
{ {
@ -269,8 +269,8 @@ namespace Microsoft.AspNet.Routing
} }
[Theory] [Theory]
[InlineData(false, "RouteName")] [InlineData(false, "/RouteName")]
[InlineData(true, "routename")] [InlineData(true, "/routename")]
public void NamedRouteTests_GetNamedRoute_ReturnsValue(bool lowercaseUrls, string expectedUrl) public void NamedRouteTests_GetNamedRoute_ReturnsValue(bool lowercaseUrls, string expectedUrl)
{ {
// Arrange // Arrange
@ -283,7 +283,7 @@ namespace Microsoft.AspNet.Routing
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
// Assert // Assert
Assert.Equal(expectedUrl, pathData.VirtualPath); Assert.Equal(new PathString(expectedUrl), pathData.VirtualPath);
var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router); var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router);
Assert.Equal(virtualPathContext.RouteName, namedRouter.Name); Assert.Equal(virtualPathContext.RouteName, namedRouter.Name);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -302,7 +302,7 @@ namespace Microsoft.AspNet.Routing
// Assert // Assert
Assert.Null(stringVirtualPath); Assert.Null(stringVirtualPath);
} }
[Fact] [Fact]
public void NamedRouteTests_GetNamedRoute_AmbiguousRoutesInCollection_DoesNotThrowForUnambiguousRoute() public void NamedRouteTests_GetNamedRoute_AmbiguousRoutesInCollection_DoesNotThrowForUnambiguousRoute()
{ {
@ -317,12 +317,12 @@ namespace Microsoft.AspNet.Routing
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
// Assert // Assert
Assert.Equal("route1", pathData.VirtualPath); Assert.Equal(new PathString("/route1"), pathData.VirtualPath);
var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router); var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router);
Assert.Equal("Route1", namedRouter.Name); Assert.Equal("Route1", namedRouter.Name);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
[Fact] [Fact]
public void NamedRouteTests_GetNamedRoute_AmbiguousRoutesInCollection_ThrowsForAmbiguousRoute() public void NamedRouteTests_GetNamedRoute_AmbiguousRoutesInCollection_ThrowsForAmbiguousRoute()
{ {
@ -390,7 +390,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router); var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router);
Assert.Equal("Match", namedRouter.Name); Assert.Equal("Match", namedRouter.Name);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -420,7 +420,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router); var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router);
Assert.Equal("Match", namedRouter.Name); Assert.Equal("Match", namedRouter.Name);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -450,7 +450,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router); var namedRouter = Assert.IsAssignableFrom<INamedRouter>(pathData.Router);
Assert.Equal("Match", namedRouter.Name); Assert.Equal("Match", namedRouter.Name);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -479,7 +479,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
Assert.Same(route1.Object, pathData.Router); Assert.Same(route1.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -543,7 +543,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
Assert.Same(route2.Object, pathData.Router); Assert.Same(route2.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -576,7 +576,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
Assert.Same(route3.Object, pathData.Router); Assert.Same(route3.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -609,7 +609,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
Assert.Same(route2.Object, pathData.Router); Assert.Same(route2.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -644,7 +644,7 @@ namespace Microsoft.AspNet.Routing
// Act // Act
var pathData = routeCollection.GetVirtualPath(virtualPathContext); var pathData = routeCollection.GetVirtualPath(virtualPathContext);
Assert.Equal("best", pathData.VirtualPath); Assert.Equal(new PathString("/best"), pathData.VirtualPath);
Assert.Same(route3.Object, pathData.Router); Assert.Same(route3.Object, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -663,19 +663,19 @@ namespace Microsoft.AspNet.Routing
yield return new object[] { yield return new object[] {
"{controller}/{action}", "{controller}/{action}",
new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } },
"home/index", "/home/index",
true }; true };
yield return new object[] { yield return new object[] {
"{controller}/{action}/", "{controller}/{action}/",
new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } }, new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" } },
"Home/Index", "/Home/Index",
false }; false };
yield return new object[] { yield return new object[] {
"api/{action}/", "api/{action}/",
new RouteValueDictionary { { "action", "Create" } }, new RouteValueDictionary { { "action", "Create" } },
"api/create", "/api/create",
true }; true };
yield return new object[] { yield return new object[] {
@ -685,7 +685,7 @@ namespace Microsoft.AspNet.Routing
{ "id", "23" }, { "id", "23" },
{ "Param1", "Value1" }, { "Param1", "Value1" },
{ "Param2", "Value2" } }, { "Param2", "Value2" } },
"api/create/23?Param1=Value1&Param2=Value2", "/api/create/23?Param1=Value1&Param2=Value2",
true }; true };
yield return new object[] { yield return new object[] {
@ -695,7 +695,7 @@ namespace Microsoft.AspNet.Routing
{ "id", "23" }, { "id", "23" },
{ "Param1", "Value1" }, { "Param1", "Value1" },
{ "Param2", "Value2" } }, { "Param2", "Value2" } },
"api/Create/23?Param1=Value1&Param2=Value2", "/api/Create/23?Param1=Value1&Param2=Value2",
false }; false };
} }
} }
@ -720,7 +720,7 @@ namespace Microsoft.AspNet.Routing
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.Equal(expectedUrl, pathData.VirtualPath); Assert.Equal(new PathString(expectedUrl), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }

View File

@ -953,7 +953,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.Equal("Home", pathData.VirtualPath); Assert.Equal(new PathString("/Home"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -979,7 +979,7 @@ namespace Microsoft.AspNet.Routing.Template
RouteValueDictionary dataTokens) RouteValueDictionary dataTokens)
{ {
// Arrange // Arrange
var path = "TestPath"; var path = new PathString("/TestPath");
var target = new Mock<IRouter>(MockBehavior.Strict); var target = new Mock<IRouter>(MockBehavior.Strict);
target target
@ -1024,7 +1024,7 @@ namespace Microsoft.AspNet.Routing.Template
RouteValueDictionary dataTokens) RouteValueDictionary dataTokens)
{ {
// Arrange // Arrange
var path = "TestPath"; var path = new PathString("/TestPath");
var target = new Mock<IRouter>(MockBehavior.Strict); var target = new Mock<IRouter>(MockBehavior.Strict);
target target
@ -1070,7 +1070,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.False(context.IsBound); Assert.False(context.IsBound);
Assert.Equal("Home", pathData.VirtualPath); Assert.Equal(new PathString("/Home"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1087,7 +1087,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.Equal("Home/Index", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1130,7 +1130,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.NotNull(pathData); Assert.NotNull(pathData);
Assert.Equal("hello/1234", pathData.VirtualPath); Assert.Equal(new PathString("/hello/1234"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1173,7 +1173,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.NotNull(pathData); Assert.NotNull(pathData);
Assert.Equal("hello/1234", pathData.VirtualPath); Assert.Equal(new PathString("/hello/1234"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1205,7 +1205,7 @@ namespace Microsoft.AspNet.Routing.Template
// Assert // Assert
Assert.True(context.IsBound); Assert.True(context.IsBound);
Assert.NotNull(pathData); Assert.NotNull(pathData);
Assert.Equal("hello/1234", pathData.VirtualPath); Assert.Equal(new PathString("/hello/1234"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1234,7 +1234,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Store", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Store"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1263,7 +1263,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Admin/Home/Store", pathData.VirtualPath); Assert.Equal(new PathString("/Admin/Home/Store"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1291,7 +1291,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Store?id=5", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Store?id=5"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1322,7 +1322,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("slug/Home/Store", pathData.VirtualPath); Assert.Equal(new PathString("/slug/Home/Store"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1353,7 +1353,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("slug/Home/Store", pathData.VirtualPath); Assert.Equal(new PathString("/slug/Home/Store"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1383,7 +1383,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("slug/Shopping", pathData.VirtualPath); Assert.Equal(new PathString("/slug/Shopping"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1414,7 +1414,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("slug/Home/Store", pathData.VirtualPath); Assert.Equal(new PathString("/slug/Home/Store"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
@ -1433,7 +1433,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/4", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/4"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1465,7 +1465,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/98", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/98"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1482,7 +1482,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1514,7 +1514,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/14", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/14"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1537,7 +1537,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1559,7 +1559,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products.xml", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products.xml"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1581,7 +1581,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1603,7 +1603,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products.xml", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products.xml"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1625,7 +1625,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1647,7 +1647,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/products?format=json", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/products?format=json"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1669,7 +1669,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/.products", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/.products"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1691,7 +1691,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index/", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index/"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -1713,7 +1713,7 @@ namespace Microsoft.AspNet.Routing.Template
var pathData = route.GetVirtualPath(context); var pathData = route.GetVirtualPath(context);
// Assert // Assert
Assert.Equal("Home/Index", pathData.VirtualPath); Assert.Equal(new PathString("/Home/Index"), pathData.VirtualPath);
Assert.Same(route, pathData.Router); Assert.Same(route, pathData.Router);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -2030,4 +2030,4 @@ namespace Microsoft.AspNet.Routing.Template
} }
} }
} }
#endif #endif

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.
#if DNX451 #if DNX451
using Microsoft.AspNet.Http;
using Moq; using Moq;
using Xunit; using Xunit;
@ -14,14 +15,14 @@ namespace Microsoft.AspNet.Routing
{ {
// Arrange // Arrange
var router = new Mock<IRouter>().Object; var router = new Mock<IRouter>().Object;
var path = "virtual path"; var path = new PathString("/virtual path");
// Act // Act
var pathData = new VirtualPathData(router, path, null); var pathData = new VirtualPathData(router, path, null);
// Assert // Assert
Assert.Same(router, pathData.Router); Assert.Same(router, pathData.Router);
Assert.Same(path, pathData.VirtualPath); Assert.Equal(path, pathData.VirtualPath);
Assert.NotNull(pathData.DataTokens); Assert.NotNull(pathData.DataTokens);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }
@ -31,7 +32,7 @@ namespace Microsoft.AspNet.Routing
{ {
// Arrange // Arrange
var router = new Mock<IRouter>().Object; var router = new Mock<IRouter>().Object;
var path = "virtual path"; var path = new PathString("/virtual path");
var dataTokens = new RouteValueDictionary(); var dataTokens = new RouteValueDictionary();
dataTokens["TestKey"] = "TestValue"; dataTokens["TestKey"] = "TestValue";
@ -40,7 +41,7 @@ namespace Microsoft.AspNet.Routing
// Assert // Assert
Assert.Same(router, pathData.Router); Assert.Same(router, pathData.Router);
Assert.Same(path, pathData.VirtualPath); Assert.Equal(path, pathData.VirtualPath);
Assert.NotNull(pathData.DataTokens); Assert.NotNull(pathData.DataTokens);
Assert.Equal("TestValue", pathData.DataTokens["TestKey"]); Assert.Equal("TestValue", pathData.DataTokens["TestKey"]);
Assert.Equal(1, pathData.DataTokens.Count); Assert.Equal(1, pathData.DataTokens.Count);
@ -58,7 +59,7 @@ namespace Microsoft.AspNet.Routing
// Assert // Assert
Assert.Same(router, pathData.Router); Assert.Same(router, pathData.Router);
Assert.Equal(string.Empty, pathData.VirtualPath); Assert.Equal(new PathString(string.Empty), pathData.VirtualPath);
Assert.NotNull(pathData.DataTokens); Assert.NotNull(pathData.DataTokens);
Assert.Empty(pathData.DataTokens); Assert.Empty(pathData.DataTokens);
} }