Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

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" }));
}
});
}
}
}