57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using dy.net.storage;
|
|
|
|
namespace dy.net.Tests;
|
|
|
|
public class StoragePathTests
|
|
{
|
|
[Theory]
|
|
[InlineData(null, "/")]
|
|
[InlineData("", "/")]
|
|
[InlineData(" ", "/")]
|
|
[InlineData("/", "/")]
|
|
[InlineData("///", "/")]
|
|
public void NormalizeRemote_NormalizesEmptyAndRootPaths(string input, string expected)
|
|
{
|
|
Assert.Equal(expected, StoragePath.NormalizeRemote(input));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("\\media\\author\\video.mp4", "/media/author/video.mp4")]
|
|
[InlineData("//media///author/video.mp4/", "/media/author/video.mp4")]
|
|
[InlineData(" media/author/video.mp4 ", "/media/author/video.mp4")]
|
|
public void NormalizeRemote_NormalizesSeparators(string input, string expected)
|
|
{
|
|
Assert.Equal(expected, StoragePath.NormalizeRemote(input));
|
|
}
|
|
|
|
[Fact]
|
|
public void CombineRemote_JoinsRemoteSegments()
|
|
{
|
|
Assert.Equal("/base/account/video.mp4", StoragePath.CombineRemote("/base/", null, "account", "/video.mp4"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Encode_EncodesUnicodeSpacesAndReservedCharactersPerSegment()
|
|
{
|
|
Assert.Equal("/%E4%B8%AD%E6%96%87%20folder/video%20%231.mp4", StoragePath.Encode("/中文 folder/video #1.mp4"));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("/", "/")]
|
|
[InlineData("/video.mp4", "/")]
|
|
[InlineData("/media/author/video.mp4", "/media/author")]
|
|
public void DirectoryName_ReturnsRemoteParent(string input, string expected)
|
|
{
|
|
Assert.Equal(expected, StoragePath.DirectoryName(input));
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("/media/./video.mp4")]
|
|
[InlineData("/media/../video.mp4")]
|
|
[InlineData("..\\video.mp4")]
|
|
public void NormalizeRemote_RejectsTraversalSegments(string input)
|
|
{
|
|
Assert.Throws<ArgumentException>(() => StoragePath.NormalizeRemote(input));
|
|
}
|
|
}
|