210 lines
7.4 KiB
C#
210 lines
7.4 KiB
C#
|
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|||
|
|
|||
|
using System.Web.WebPages.TestUtils;
|
|||
|
using Xunit;
|
|||
|
|
|||
|
namespace System.Web.WebPages.Test
|
|||
|
{
|
|||
|
public class UrlUtilTest
|
|||
|
{
|
|||
|
[Fact]
|
|||
|
public void UrlTest()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/WebSite1/subfolder1/default.aspx"),
|
|||
|
__ = Utils.CreateHttpRuntime("/WebSite1/"))
|
|||
|
{
|
|||
|
var vpath = "~/subfolder1/default.aspx";
|
|||
|
var href = "~/world/test.aspx";
|
|||
|
var expected = "/WebSite1/world/test.aspx";
|
|||
|
Assert.Equal(expected, UrlUtil.Url(vpath, href));
|
|||
|
Assert.Equal(expected, new MockPage() { VirtualPath = vpath }.Href(href));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void UrlTest2()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/WebSite1/default.aspx"),
|
|||
|
__ = Utils.CreateHttpRuntime("/WebSite1/"))
|
|||
|
{
|
|||
|
var vpath = "~/default.aspx";
|
|||
|
var href = "~/world/test.aspx";
|
|||
|
var expected = "/WebSite1/world/test.aspx";
|
|||
|
Assert.Equal(expected, UrlUtil.Url(vpath, href));
|
|||
|
Assert.Equal(expected, new MockPage() { VirtualPath = vpath }.Href(href));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void UrlTest3()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/WebSite1/subfolder1/default.aspx"),
|
|||
|
__ = Utils.CreateHttpRuntime("/WebSite1/"))
|
|||
|
{
|
|||
|
var vpath = "~/subfolder1/default.aspx";
|
|||
|
var href = "world/test.aspx";
|
|||
|
var expected = "/WebSite1/subfolder1/world/test.aspx";
|
|||
|
Assert.Equal(expected, UrlUtil.Url(vpath, href));
|
|||
|
Assert.Equal(expected, new MockPage() { VirtualPath = vpath }.Href(href));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void UrlTest4()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/WebSite1/subfolder1/default.aspx"),
|
|||
|
__ = Utils.CreateHttpRuntime("/WebSite1/"))
|
|||
|
{
|
|||
|
var vpath = "~/subfolder2/default.aspx";
|
|||
|
var href = "world/test.aspx";
|
|||
|
var expected = "/WebSite1/subfolder2/world/test.aspx";
|
|||
|
Assert.Equal(expected, UrlUtil.Url(vpath, href));
|
|||
|
Assert.Equal(expected, new MockPage() { VirtualPath = vpath }.Href(href));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlEncodesPagePart()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var page = "This is a really bad name for a page";
|
|||
|
var expected = "This%20is%20a%20really%20bad%20name%20for%20a%20page";
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, expected);
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlAppendsNonAnonymousTypesToPathPortion()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
object[] pathParts = new object[] { "part", Decimal.One, 1.25f };
|
|||
|
var page = "home";
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, pathParts);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "/part/1/1.25");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlEncodesAppendedPathPortion()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
object[] pathParts = new object[] { "path portion", "ζ" };
|
|||
|
var page = "home";
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, pathParts);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "/path%20portion/%ce%b6");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlAppendsAnonymousObjectsToQueryString()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var page = "home";
|
|||
|
var queryString = new { sort = "FName", dir = "desc" };
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, queryString);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "?sort=FName&dir=desc");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlAppendsMultipleAnonymousObjectsToQueryString()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var page = "home";
|
|||
|
var queryString1 = new { sort = "FName", dir = "desc" };
|
|||
|
var queryString2 = new { view = "Activities", page = 7 };
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, queryString1, queryString2);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "?sort=FName&dir=desc&view=Activities&page=7");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlEncodesQueryStringKeysAndValues()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var page = "home";
|
|||
|
var queryString = new { ζ = "my=value&", mykey = "<π" };
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, queryString);
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "?%ce%b6=my%3dvalue%26&mykey=%3c%cf%80");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void BuildUrlGeneratesPathPartsAndQueryString()
|
|||
|
{
|
|||
|
// Arrange
|
|||
|
var page = "home";
|
|||
|
|
|||
|
// Act
|
|||
|
var actual = UrlUtil.BuildUrl(page, "products", new { cat = 37 }, "furniture", new { sort = "name", dir = "desc" });
|
|||
|
|
|||
|
// Assert
|
|||
|
Assert.Equal(actual, page + "/products/furniture?cat=37&sort=name&dir=desc");
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void UrlAppRootTest()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/"),
|
|||
|
__ = Utils.CreateHttpRuntime("/"))
|
|||
|
{
|
|||
|
var vpath = "~/";
|
|||
|
var href = "~/world/test.aspx";
|
|||
|
var expected = "/world/test.aspx";
|
|||
|
Assert.Equal(expected, UrlUtil.Url(vpath, href));
|
|||
|
Assert.Equal(expected, new MockPage() { VirtualPath = vpath }.Href(href));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
[Fact]
|
|||
|
public void UrlAnonymousObjectTest()
|
|||
|
{
|
|||
|
AppDomainUtils.RunInSeparateAppDomain(() =>
|
|||
|
{
|
|||
|
using (IDisposable _ = Utils.CreateHttpContext("default.aspx", "http://localhost/"),
|
|||
|
__ = Utils.CreateHttpRuntime("/"))
|
|||
|
{
|
|||
|
Assert.Equal("/world/test.cshtml?Prop1=value1",
|
|||
|
UrlUtil.Url("~/world/page.cshtml", "test.cshtml", new { Prop1 = "value1" }));
|
|||
|
Assert.Equal("/world/test.cshtml?Prop1=value1&Prop2=value2",
|
|||
|
UrlUtil.Url("~/world/page.cshtml", "test.cshtml", new { Prop1 = "value1", Prop2 = "value2" }));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|