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

180 lines
6.4 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Linq;
using System.Web.WebPages.TestUtils;
using Microsoft.Internal.Web.Utils;
using Xunit;
namespace System.Web.WebPages.Test
{
public class PathUtilTest
{
[Fact]
public void IsSimpleNameTest()
{
Assert.True(PathUtil.IsSimpleName("Test.cshtml"));
Assert.True(PathUtil.IsSimpleName("Test.Hello.cshtml"));
Assert.False(PathUtil.IsSimpleName("~/myapp/Test/Hello.cshtml"));
Assert.False(PathUtil.IsSimpleName("../Test/Hello.cshtml"));
Assert.False(PathUtil.IsSimpleName("../../Test/Hello.cshtml"));
Assert.False(PathUtil.IsSimpleName("/Test/Hello.cshtml"));
}
[Fact]
public void GetExtensionForNullPathsReturnsNull()
{
// Arrange
string path = null;
// Act
string extension = PathUtil.GetExtension(path);
// Assert
Assert.Null(extension);
}
[Fact]
public void GetExtensionForEmptyPathsReturnsEmptyString()
{
// Arrange
string path = String.Empty;
// Act
string extension = PathUtil.GetExtension(path);
// Assert
Assert.Equal(0, extension.Length);
}
[Fact]
public void GetExtensionReturnsEmptyStringForPathsThatDoNotContainExtension()
{
// Arrange
string[] paths = new[] { "SomePath", "SomePath/", "SomePath/MorePath", "SomePath/MorePath/" };
// Act
var extensions = paths.Select(PathUtil.GetExtension);
// Assert
Assert.True(extensions.All(ext => ext.Length == 0));
}
[Fact]
public void GetExtensionReturnsEmptyStringForPathsContainingPathInfo()
{
// Arrange
string[] paths = new[] { "SomePath.cshtml/", "SomePath.html/path/info" };
// Act
var extensions = paths.Select(PathUtil.GetExtension);
// Assert
Assert.True(extensions.All(ext => ext.Length == 0));
}
[Fact]
public void GetExtensionReturnsEmptyStringForPathsTerminatingWithADot()
{
// Arrange
string[] paths = new[] { "SomePath.", "SomeDirectory/SomePath/SomePath.", "SomeDirectory/SomePath.foo." };
// Act
var extensions = paths.Select(PathUtil.GetExtension);
// Assert
Assert.True(extensions.All(ext => ext.Length == 0));
}
[Fact]
public void GetExtensionReturnsExtensionsForPathsTerminatingInExtension()
{
// Arrange
string path1 = "SomePath.cshtml";
string path2 = "SomeDir/SomePath.txt";
// Act
string ext1 = PathUtil.GetExtension(path1);
string ext2 = PathUtil.GetExtension(path2);
// Assert
Assert.Equal(ext1, ".cshtml");
Assert.Equal(ext2, ".txt");
}
[Fact]
public void GetExtensionDoesNotThrowForPathsWithInvalidCharacters()
{
// Arrange
// Repro from test case in Bug 93828
string path = "Insights/110786998958803%7C2.d24wA6Y3MiT2w8p3OT4yTw__.3600.1289415600-708897727%7CRLN-t1w9bXtKWZ_11osz15Rk_jY";
// Act
string extension = PathUtil.GetExtension(path);
// Assert
Assert.Equal(".1289415600-708897727%7CRLN-t1w9bXtKWZ_11osz15Rk_jY", extension);
}
[Fact]
public void IsWithinAppRootNestedTest()
{
AppDomainUtils.RunInSeparateAppDomain(() =>
{
var root = "/subfolder1/website1";
using (Utils.CreateHttpRuntime(root))
{
Assert.True(PathUtil.IsWithinAppRoot(root, "~/"));
Assert.True(PathUtil.IsWithinAppRoot(root, "~/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "~/test/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/subfolder1/website1"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/subfolder1/website1/"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/subfolder1/website1/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/subfolder1/website1/test/default.cshtml"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/subfolder1"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/subfolder1/"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/subfolder1/website2"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/subfolder2"));
}
});
}
[Fact]
public void IsWithinAppRootTest()
{
AppDomainUtils.RunInSeparateAppDomain(() =>
{
var root = "/website1";
using (Utils.CreateHttpRuntime(root))
{
Assert.True(PathUtil.IsWithinAppRoot(root, "~/"));
Assert.True(PathUtil.IsWithinAppRoot(root, "~/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "~/test/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/website1"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/website1/"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/website1/default.cshtml"));
Assert.True(PathUtil.IsWithinAppRoot(root, "/website1/test/default.cshtml"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/website2"));
Assert.False(PathUtil.IsWithinAppRoot(root, "/subfolder1/"));
}
});
}
private class TestVirtualPathUtility : IVirtualPathUtility
{
public string Combine(string basePath, string relativePath)
{
return basePath + "/" + relativePath;
}
public string ToAbsolute(string virtualPath)
{
return virtualPath;
}
}
}
}