@@ -89,6 +89,44 @@ public void GetVirtualPath_DoesntLowerCaseUrls_Invariant(
89
89
Assert . Empty ( pathData . DataTokens ) ;
90
90
}
91
91
92
+ [ Theory ]
93
+ [ InlineData ( @"Home/Index/23?Param1=ABC&Param2=Xyz" , "/Home/Index/23?Param1=ABC&Param2=Xyz" , false , true , false ) ]
94
+ [ InlineData ( @"Home/Index/23?Param1=ABC&Param2=Xyz" , "/Home/Index/23?Param1=ABC&Param2=Xyz" , false , false , false ) ]
95
+ [ InlineData ( @"Home/Index/23?Param1=ABC&Param2=Xyz" , "/home/index/23/?param1=abc¶m2=xyz" , true , true , true ) ]
96
+ [ InlineData ( @"Home/Index/23#Param1=ABC&Param2=Xyz" , "/Home/Index/23/#Param1=ABC&Param2=Xyz" , false , true , true ) ]
97
+ [ InlineData ( @"Home/Index/23#Param1=ABC&Param2=Xyz" , "/home/index/23#Param1=ABC&Param2=Xyz" , true , false , false ) ]
98
+ [ InlineData ( @"Home/Index/23/?Param1=ABC&Param2=Xyz" , "/home/index/23/?param1=abc¶m2=xyz" , true , true , true ) ]
99
+ [ InlineData ( @"Home/Index/23/#Param1=ABC&Param2=Xyz" , "/home/index/23/#Param1=ABC&Param2=Xyz" , true , false , true ) ]
100
+ [ InlineData ( @"Home/Index/23/#Param1=ABC&Param2=Xyz" , "/home/index/23/#param1=abc¶m2=xyz" , true , true , true ) ]
101
+ public void GetVirtualPath_CanLowerCaseUrls_QueryStrings_BasedOnOptions (
102
+ string returnUrl ,
103
+ string expectedUrl ,
104
+ bool lowercaseUrls ,
105
+ bool lowercaseQueryStrings , bool appendTrailingSlash )
106
+ {
107
+ // Arrange
108
+ var target = new Mock < IRouter > ( MockBehavior . Strict ) ;
109
+ target
110
+ . Setup ( e => e . GetVirtualPath ( It . IsAny < VirtualPathContext > ( ) ) )
111
+ . Returns ( new VirtualPathData ( target . Object , returnUrl ) ) ;
112
+
113
+ var routeCollection = new RouteCollection ( ) ;
114
+ routeCollection . Add ( target . Object ) ;
115
+ var virtualPathContext = CreateVirtualPathContext (
116
+ options : GetRouteOptions (
117
+ lowerCaseUrls : lowercaseUrls ,
118
+ lowercaseQueryStrings : lowercaseQueryStrings ,
119
+ appendTrailingSlash : appendTrailingSlash ) ) ;
120
+
121
+ // Act
122
+ var pathData = routeCollection . GetVirtualPath ( virtualPathContext ) ;
123
+
124
+ // Assert
125
+ Assert . Equal ( expectedUrl , pathData . VirtualPath ) ;
126
+ Assert . Same ( target . Object , pathData . Router ) ;
127
+ Assert . Empty ( pathData . DataTokens ) ;
128
+ }
129
+
92
130
[ Theory ]
93
131
[ MemberData ( nameof ( DataTokensTestData ) ) ]
94
132
public void GetVirtualPath_ReturnsDataTokens ( RouteValueDictionary dataTokens , string routerName )
@@ -663,12 +701,13 @@ private static Mock<IRouter> CreateRoute(
663
701
664
702
private static Action < RouteOptions > GetRouteOptions (
665
703
bool lowerCaseUrls = false ,
666
- bool appendTrailingSlash = false )
704
+ bool appendTrailingSlash = false , bool lowercaseQueryStrings = false )
667
705
{
668
706
return ( options ) =>
669
707
{
670
708
options . LowercaseUrls = lowerCaseUrls ;
671
709
options . AppendTrailingSlash = appendTrailingSlash ;
710
+ options . LowercaseQueryStrings = lowercaseQueryStrings ;
672
711
} ;
673
712
}
674
713
}
0 commit comments