@@ -1399,7 +1399,6 @@ public void TreeRouter_GenerateLink_Match_HasTwoOptionalParametersWithoutValues(
1399
1399
Assert . Empty ( pathData . DataTokens ) ;
1400
1400
}
1401
1401
1402
-
1403
1402
[ Fact ]
1404
1403
public void TreeRouter_GenerateLink_Match_WithParameters ( )
1405
1404
{
@@ -1965,6 +1964,94 @@ public async Task TreeRouter_SnapshotsRouteData_ResetsBeforeMatchingEachRouteEnt
1965
1964
Assert . DoesNotContain ( nestedValues , kvp => kvp . Key == "category1" ) ;
1966
1965
}
1967
1966
1967
+ [ Fact ]
1968
+ public void TreeRouter_GenerateLink_MatchesNullRequiredValue_WithNullRequestValueString ( )
1969
+ {
1970
+ // Arrange
1971
+ var builder = CreateBuilder ( ) ;
1972
+ var entry = MapOutboundEntry (
1973
+ builder ,
1974
+ "Help/Store" ,
1975
+ requiredValues : new { area = ( string ) null , action = "Edit" , controller = "Store" } ) ;
1976
+ var route = builder . Build ( ) ;
1977
+ var context = CreateVirtualPathContext ( new { area = ( string ) null , action = "Edit" , controller = "Store" } ) ;
1978
+
1979
+ // Act
1980
+ var pathData = route . GetVirtualPath ( context ) ;
1981
+
1982
+ // Assert
1983
+ Assert . NotNull ( pathData ) ;
1984
+ Assert . Equal ( "/Help/Store" , pathData . VirtualPath ) ;
1985
+ Assert . Same ( route , pathData . Router ) ;
1986
+ Assert . Empty ( pathData . DataTokens ) ;
1987
+ }
1988
+
1989
+ [ Fact ]
1990
+ public void TreeRouter_GenerateLink_MatchesNullRequiredValue_WithEmptyRequestValueString ( )
1991
+ {
1992
+ // Arrange
1993
+ var builder = CreateBuilder ( ) ;
1994
+ var entry = MapOutboundEntry (
1995
+ builder ,
1996
+ "Help/Store" ,
1997
+ requiredValues : new { area = ( string ) null , action = "Edit" , controller = "Store" } ) ;
1998
+ var route = builder . Build ( ) ;
1999
+ var context = CreateVirtualPathContext ( new { area = "" , action = "Edit" , controller = "Store" } ) ;
2000
+
2001
+ // Act
2002
+ var pathData = route . GetVirtualPath ( context ) ;
2003
+
2004
+ // Assert
2005
+ Assert . NotNull ( pathData ) ;
2006
+ Assert . Equal ( "/Help/Store" , pathData . VirtualPath ) ;
2007
+ Assert . Same ( route , pathData . Router ) ;
2008
+ Assert . Empty ( pathData . DataTokens ) ;
2009
+ }
2010
+
2011
+ [ Fact ]
2012
+ public void TreeRouter_GenerateLink_MatchesEmptyStringRequiredValue_WithNullRequestValueString ( )
2013
+ {
2014
+ // Arrange
2015
+ var builder = CreateBuilder ( ) ;
2016
+ var entry = MapOutboundEntry (
2017
+ builder ,
2018
+ "Help/Store" ,
2019
+ requiredValues : new { foo = "" , action = "Edit" , controller = "Store" } ) ;
2020
+ var route = builder . Build ( ) ;
2021
+ var context = CreateVirtualPathContext ( new { foo = ( string ) null , action = "Edit" , controller = "Store" } ) ;
2022
+
2023
+ // Act
2024
+ var pathData = route . GetVirtualPath ( context ) ;
2025
+
2026
+ // Assert
2027
+ Assert . NotNull ( pathData ) ;
2028
+ Assert . Equal ( "/Help/Store" , pathData . VirtualPath ) ;
2029
+ Assert . Same ( route , pathData . Router ) ;
2030
+ Assert . Empty ( pathData . DataTokens ) ;
2031
+ }
2032
+
2033
+ [ Fact ]
2034
+ public void TreeRouter_GenerateLink_MatchesEmptyStringRequiredValue_WithEmptyRequestValueString ( )
2035
+ {
2036
+ // Arrange
2037
+ var builder = CreateBuilder ( ) ;
2038
+ var entry = MapOutboundEntry (
2039
+ builder ,
2040
+ "Help/Store" ,
2041
+ requiredValues : new { foo = "" , action = "Edit" , controller = "Store" } ) ;
2042
+ var route = builder . Build ( ) ;
2043
+ var context = CreateVirtualPathContext ( new { foo = "" , action = "Edit" , controller = "Store" } ) ;
2044
+
2045
+ // Act
2046
+ var pathData = route . GetVirtualPath ( context ) ;
2047
+
2048
+ // Assert
2049
+ Assert . NotNull ( pathData ) ;
2050
+ Assert . Equal ( "/Help/Store" , pathData . VirtualPath ) ;
2051
+ Assert . Same ( route , pathData . Router ) ;
2052
+ Assert . Empty ( pathData . DataTokens ) ;
2053
+ }
2054
+
1968
2055
private static RouteContext CreateRouteContext ( string requestPath )
1969
2056
{
1970
2057
var request = new Mock < HttpRequest > ( MockBehavior . Strict ) ;
0 commit comments