193 lines
9.9 KiB
C#
193 lines
9.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using NUnit.Framework;
|
|
|
|
using DelphiProjectHandler.Dialogs;
|
|
|
|
namespace DelphiProjectHandler.Tests.Utils
|
|
{
|
|
[TestFixture]
|
|
public class RelativePathClassTests
|
|
{
|
|
#region (Test methods)
|
|
|
|
protected string GetTestFailMessage(string iBasePath, string iPath)
|
|
{
|
|
return string.Format("Base path: {0}, Destination path: {1}", iBasePath, iPath);
|
|
}
|
|
|
|
protected void DoGetRelativePath(string iBasePath, string iPath, string iExpected)
|
|
{
|
|
try
|
|
{
|
|
string vActual = RelativePath.GetRelativePath(iBasePath, iPath);
|
|
Assert.AreEqual(iExpected, vActual, GetTestFailMessage(iBasePath, iPath));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Assert.Fail(e.Message + "; " + GetTestFailMessage(iBasePath, iPath));
|
|
}
|
|
}
|
|
|
|
protected void DoGetRelativePath(string iBasePath, string iPath)
|
|
{
|
|
DoGetRelativePath(iBasePath, iPath, iPath);
|
|
}
|
|
|
|
protected void DoGetRelativeFileName(bool iRelativeToPath, string iBaseFileName, string iFileName, string iExpected)
|
|
{
|
|
try
|
|
{
|
|
if (iRelativeToPath)
|
|
iBaseFileName = PathUtils.AddEndingDirectorySeparator(Path.GetDirectoryName(iBaseFileName));
|
|
|
|
string vActual = RelativePath.GetRelativeFileName(iBaseFileName, iFileName);
|
|
Assert.AreEqual(iExpected, vActual, GetTestFailMessage(iBaseFileName, iFileName));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Assert.Fail(e.Message + "; " + GetTestFailMessage(iBaseFileName, iFileName));
|
|
}
|
|
}
|
|
|
|
protected void DoGetRelativeFileName(bool iToBasePath, string iBaseFileName, string iFileName)
|
|
{
|
|
DoGetRelativeFileName(iToBasePath, iBaseFileName, iFileName, iFileName);
|
|
}
|
|
|
|
protected void DoGetRelativeFileNameByFolder(string iBaseFolder, string iFileName, string iExpected)
|
|
{
|
|
string vActual = RelativePath.GetRelativeFilenameByFolder(iBaseFolder, iFileName);
|
|
Assert.AreEqual(iExpected, vActual, GetTestFailMessage(iBaseFolder, iFileName));
|
|
}
|
|
|
|
protected void DoGetRelativeFileNameByFolder(string iBaseFolder, string iFileName)
|
|
{
|
|
DoGetRelativeFileNameByFolder(iBaseFolder, iFileName, iFileName);
|
|
}
|
|
|
|
#endregion
|
|
|
|
[Test]
|
|
public void GetRelativePath_DifferentRoots()
|
|
{
|
|
DoGetRelativePath(@"c:\windows\temp", @"d:\windows\temp\");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativePath_Rooted_NotRooted()
|
|
{
|
|
DoGetRelativePath(@"c:\windows\temp", @"windows\temp\");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativePath_Rooted()
|
|
{
|
|
DoGetRelativePath(@"c:\Windows\temp", @"c:\windows\temp\folder1\folder2", @"folder1\folder2\");
|
|
DoGetRelativePath(@"c:\windows\temp\folder1\folder2", @"c:\windows\temp\", @"..\..\");
|
|
DoGetRelativePath(@"c:\windows\temp\folder1\folder2", @"c:\windows\temp\folder3\folder4", @"..\..\folder3\folder4\");
|
|
DoGetRelativePath(@"c:\windows\temp\", "", @"c:\windows\temp\");
|
|
DoGetRelativePath(@"c:\windows\temp", @"c:\windows\temp", "");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativePath_Rooted_RootFolder()
|
|
{
|
|
DoGetRelativePath(@"c:\windows\temp", @"\windows\temp\folder1\folder2", @"folder1\folder2\");
|
|
DoGetRelativePath(@"c:\windows\temp\folder1\folder2", @"\windows\temp\", @"..\..\");
|
|
DoGetRelativePath(@"c:\windows\temp\folder1\folder2", @"\windows\temp\folder3\folder4", @"..\..\folder3\folder4\");
|
|
DoGetRelativePath(@"c:\windows\temp\", @"\", @"..\..\");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativePath_NotRooted()
|
|
{
|
|
DoGetRelativePath(@"Windows\temp", @"windows\temp\folder1\folder2", @"folder1\folder2\");
|
|
DoGetRelativePath(@"windows\temp\folder1\folder2", @"windows\temp\", @"..\..\");
|
|
DoGetRelativePath(@"windows\temp\folder1\folder2", @"windows\temp\folder3\folder4", @"..\..\folder3\folder4\");
|
|
DoGetRelativePath(@"windows\temp\", "", @"windows\temp\");
|
|
DoGetRelativePath(@"windows\temp", @"windows\temp", "");
|
|
|
|
DoGetRelativePath(@"\windows\temp", @"c:\windows\temp\folder1\folder2", @"folder1\folder2\");
|
|
DoGetRelativePath(@"\windows\temp\folder1\folder2", @"c:\windows\temp\", @"..\..\");
|
|
DoGetRelativePath(@"\windows\temp\folder1\folder2", @"c:\windows\temp\folder3\folder4", @"..\..\folder3\folder4\");
|
|
DoGetRelativePath(@"\windows\temp\", "", @"\windows\temp\");
|
|
DoGetRelativePath(@"\windows\temp", @"c:\windows\temp", "");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativePath_NotRooted_Rooted()
|
|
{
|
|
DoGetRelativePath(@"windows\temp", @"c:\windows\temp\folder1\folder2\");
|
|
DoGetRelativePath(@"windows\temp\folder1\folder2", @"c:\windows\temp\");
|
|
DoGetRelativePath(@"windows\temp\folder1\folder2", @"c:\windows\temp\folder3\folder4\");
|
|
DoGetRelativePath(@"windows\temp\", "", @"windows\temp\");
|
|
DoGetRelativePath(@"windows\temp", @"c:\windows\temp\");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativeFileName_DifferentRoots()
|
|
{
|
|
for (int vIdx = 0; vIdx <= 1; vIdx++)
|
|
{
|
|
bool vToBasePath = Convert.ToBoolean(vIdx);
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"d:\windows\temp\file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"windows\temp\file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"c:\windows\temp\folder1\folder2\file2.txt", @"folder1\folder2\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\file2.txt", @"..\..\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\folder3\folder4\file2.txt", @"..\..\folder3\folder4\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", "file2.txt", @"c:\windows\temp\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"c:\windows\temp\file2.txt", "file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"\windows\temp\folder1\folder2\file2.txt", @"folder1\folder2\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\folder1\folder2\file1.txt", @"\windows\temp\file2.txt", @"..\..\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\folder1\folder2\file1.txt", @"\windows\temp\folder3\folder4\file2.txt", @"..\..\folder3\folder4\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"c:\windows\temp\file1.txt", @"\file2.txt", @"..\..\file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"\windows\temp\file1.txt", @"c:\windows\temp\folder1\folder2\file2.txt", @"folder1\folder2\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"\windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\file2.txt", @"..\..\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"\windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\folder3\folder4\file2.txt", @"..\..\folder3\folder4\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"\windows\temp\file1.txt", @"c:\windows\temp\file2.txt", "file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"\windows\temp\file1.txt", "file2.txt", @"\windows\temp\file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", @"windows\temp\folder1\folder2\file2.txt", @"folder1\folder2\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\folder1\folder2\file1.txt", @"windows\temp\file2.txt", @"..\..\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\folder1\folder2\file1.txt", @"windows\temp\folder3\folder4\file2.txt", @"..\..\folder3\folder4\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", "file2.txt", @"windows\temp\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", @"windows\temp\file2.txt", "file2.txt");
|
|
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", @"c:\windows\temp\folder1\folder2\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\folder1\folder2\file1.txt", @"c:\windows\temp\folder3\folder4\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", "file2.txt", @"windows\temp\file2.txt");
|
|
DoGetRelativeFileName(vToBasePath, @"windows\temp\file1.txt", @"c:\windows\temp\file2.txt");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void IsPathRooted()
|
|
{
|
|
Assert.IsTrue(Path.IsPathRooted(@"c:\temp"), @"c:\temp");
|
|
Assert.IsTrue(Path.IsPathRooted(@"c:\"), @"c:\");
|
|
Assert.IsTrue(Path.IsPathRooted(@"c:"), @"c:");
|
|
Assert.IsTrue(Path.IsPathRooted(@"\temp"), @"\temp");
|
|
Assert.IsFalse(Path.IsPathRooted(@"temp"), @"temp");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativeFileName()
|
|
{
|
|
DoGetRelativeFileName(false, @"c:\Temp\folder1\folder2\filename1.txt", @"c:\temp\folder1\filename2.txt", @"..\filename2.txt");
|
|
}
|
|
|
|
[Test]
|
|
public void GetRelativeFileNameByFolder()
|
|
{
|
|
DoGetRelativeFileNameByFolder(@"c:\Temp\folder1\folder2", @"c:\temp\filename1.txt", @"..\..\filename1.txt");
|
|
DoGetRelativeFileNameByFolder(@"", @"c:\temp\filename1.txt");
|
|
}
|
|
}
|
|
}
|