Merge pull request #2268 from dkanada/absolute-path-fix

Fix tests for absolute paths
This commit is contained in:
Bond-009 2020-01-13 19:58:45 +01:00 committed by GitHub
commit facbd87cfc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 21 deletions

View File

@ -3,8 +3,8 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
@ -17,7 +17,7 @@ using OperatingSystem = MediaBrowser.Common.System.OperatingSystem;
namespace Emby.Server.Implementations.IO
{
/// <summary>
/// Class ManagedFileSystem
/// Class ManagedFileSystem.
/// </summary>
public class ManagedFileSystem : IFileSystem
{
@ -80,20 +80,20 @@ namespace Emby.Server.Implementations.IO
public virtual string MakeAbsolutePath(string folderPath, string filePath)
{
if (string.IsNullOrWhiteSpace(filePath)
// stream
|| filePath.Contains("://"))
// path is actually a stream
if (string.IsNullOrWhiteSpace(filePath) || filePath.Contains("://", StringComparison.Ordinal))
{
return filePath;
}
if (filePath.Length > 3 && filePath[1] == ':' && filePath[2] == '/')
{
return filePath; // absolute local path
// absolute local path
return filePath;
}
// unc path
if (filePath.StartsWith("\\\\"))
if (filePath.StartsWith("\\\\", StringComparison.Ordinal))
{
return filePath;
}
@ -101,13 +101,16 @@ namespace Emby.Server.Implementations.IO
var firstChar = filePath[0];
if (firstChar == '/')
{
// For this we don't really know.
// for this we don't really know
return filePath;
}
if (firstChar == '\\') //relative path
// relative path
if (firstChar == '\\')
{
filePath = filePath.Substring(1);
}
try
{
return Path.GetFullPath(Path.Combine(folderPath, filePath));
@ -131,11 +134,7 @@ namespace Emby.Server.Implementations.IO
/// </summary>
/// <param name="shortcutPath">The shortcut path.</param>
/// <param name="target">The target.</param>
/// <exception cref="ArgumentNullException">
/// shortcutPath
/// or
/// target
/// </exception>
/// <exception cref="ArgumentNullException">The shortcutPath or target is null.</exception>
public virtual void CreateShortcut(string shortcutPath, string target)
{
if (string.IsNullOrEmpty(shortcutPath))
@ -281,11 +280,11 @@ namespace Emby.Server.Implementations.IO
}
/// <summary>
/// Takes a filename and removes invalid characters
/// Takes a filename and removes invalid characters.
/// </summary>
/// <param name="filename">The filename.</param>
/// <returns>System.String.</returns>
/// <exception cref="ArgumentNullException">filename</exception>
/// <exception cref="ArgumentNullException">The filename is null.</exception>
public virtual string GetValidFilename(string filename)
{
var builder = new StringBuilder(filename);
@ -449,7 +448,7 @@ namespace Emby.Server.Implementations.IO
public virtual void SetHidden(string path, bool isHidden)
{
if (OperatingSystem.Id != MediaBrowser.Model.System.OperatingSystemId.Windows)
if (OperatingSystem.Id != OperatingSystemId.Windows)
{
return;
}
@ -473,7 +472,7 @@ namespace Emby.Server.Implementations.IO
public virtual void SetReadOnly(string path, bool isReadOnly)
{
if (OperatingSystem.Id != MediaBrowser.Model.System.OperatingSystemId.Windows)
if (OperatingSystem.Id != OperatingSystemId.Windows)
{
return;
}
@ -497,7 +496,7 @@ namespace Emby.Server.Implementations.IO
public virtual void SetAttributes(string path, bool isHidden, bool isReadOnly)
{
if (OperatingSystem.Id != MediaBrowser.Model.System.OperatingSystemId.Windows)
if (OperatingSystem.Id != OperatingSystemId.Windows)
{
return;
}
@ -780,7 +779,7 @@ namespace Emby.Server.Implementations.IO
public virtual void SetExecutable(string path)
{
if (OperatingSystem.Id == MediaBrowser.Model.System.OperatingSystemId.Darwin)
if (OperatingSystem.Id == OperatingSystemId.Darwin)
{
RunProcess("chmod", "+x \"" + path + "\"", Path.GetDirectoryName(path));
}

View File

@ -1,6 +1,8 @@
using System;
using AutoFixture;
using AutoFixture.AutoMoq;
using Emby.Server.Implementations.IO;
using MediaBrowser.Model.System;
using Xunit;
namespace Jellyfin.Server.Implementations.Tests.IO
@ -26,7 +28,16 @@ namespace Jellyfin.Server.Implementations.Tests.IO
string expectedAbsolutePath)
{
var generatedPath = _sut.MakeAbsolutePath(folderPath, filePath);
Assert.Equal(expectedAbsolutePath, generatedPath);
if (MediaBrowser.Common.System.OperatingSystem.Id == OperatingSystemId.Windows)
{
var expectedWindowsPath = expectedAbsolutePath.Replace('/', '\\');
Assert.Equal(expectedWindowsPath, generatedPath.Split(':')[1]);
}
else
{
Assert.Equal(expectedAbsolutePath, generatedPath);
}
}
}
}