Files
SabreTools.IO/SabreTools.IO.Test/PathToolTests.cs
2025-07-23 12:03:42 -04:00

122 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using Xunit;
namespace SabreTools.IO.Test
{
public class PathToolTests
{
[Fact]
public void GetDirectoriesOnly_NoAppendParent()
{
string expectedParent = Path.Combine(Environment.CurrentDirectory, "TestData");
string expectedCurrent = Path.Combine(expectedParent, "Subdirectory");
List<string> inputs =
[
string.Empty,
Path.Combine(Environment.CurrentDirectory, "TestData"),
Path.Combine(Environment.CurrentDirectory, "TestData", "Subdir*"),
];
var actual = PathTool.GetDirectoriesOnly(inputs, appendParent: true);
Assert.NotEmpty(actual);
var first = actual[0];
Assert.Equal(expectedCurrent, first.CurrentPath);
Assert.Equal(expectedParent, first.ParentPath);
}
[Fact]
public void GetDirectoriesOnly_AppendParent()
{
string expectedParent = Path.Combine(Environment.CurrentDirectory, "TestData");
string expectedCurrent = Path.Combine(expectedParent, "Subdirectory");
List<string> inputs =
[
string.Empty,
Path.Combine(Environment.CurrentDirectory, "TestData"),
Path.Combine(Environment.CurrentDirectory, "TestData", "Subdir*"),
];
var actual = PathTool.GetDirectoriesOnly(inputs, appendParent: false);
Assert.NotEmpty(actual);
var first = actual[0];
Assert.Equal(expectedCurrent, first.CurrentPath);
Assert.Equal(string.Empty, first.ParentPath);
}
[Fact]
public void GetFilesOnly_NoAppendParent()
{
string expectedParent = Path.Combine(Environment.CurrentDirectory, "TestData");
string expectedCurrent = Path.Combine(expectedParent, "ascii.txt");
List<string> inputs =
[
string.Empty,
Path.Combine(Environment.CurrentDirectory, "TestData"),
Path.Combine(Environment.CurrentDirectory, "TestData", "Subdir*"),
Path.Combine(Environment.CurrentDirectory, "TestData", "utf8bom.txt"),
];
var actual = PathTool.GetFilesOnly(inputs, appendParent: true);
Assert.NotEmpty(actual);
var first = actual[0];
Assert.Equal(expectedCurrent, first.CurrentPath);
Assert.Equal(expectedParent, first.ParentPath);
}
[Fact]
public void GetFilesOnly_AppendParent()
{
string expectedParent = Path.Combine(Environment.CurrentDirectory, "TestData");
string expectedCurrent = Path.Combine(expectedParent, "ascii.txt");
List<string> inputs =
[
string.Empty,
Path.Combine(Environment.CurrentDirectory, "TestData"),
Path.Combine(Environment.CurrentDirectory, "TestData", "Subdir*"),
Path.Combine(Environment.CurrentDirectory, "TestData", "utf8bom.txt"),
];
var actual = PathTool.GetFilesOnly(inputs, appendParent: false);
Assert.NotEmpty(actual);
var first = actual[0];
Assert.Equal(expectedCurrent, first.CurrentPath);
Assert.Equal(string.Empty, first.ParentPath);
}
[Theory]
[InlineData(null, false, "")]
[InlineData(null, true, "")]
[InlineData("", false, "")]
[InlineData("", true, "")]
[InlineData("filename.bin", false, "filename.bin")]
[InlineData("filename.bin", true, "filename.bin")]
[InlineData("\"filename.bin\"", false, "filename.bin")]
[InlineData("\"filename.bin\"", true, "filename.bin")]
[InlineData("<filename.bin>", false, "filename.bin")]
[InlineData("<filename.bin>", true, "filename.bin")]
[InlineData("1.2.3.4..bin", false, "1.2.3.4..bin")]
[InlineData("1.2.3.4..bin", true, "1.2.3.4..bin")]
[InlineData("dir/filename.bin", false, "dir/filename.bin")]
[InlineData("dir/filename.bin", true, "dir/filename.bin")]
[InlineData(" dir / filename.bin", false, "dir/filename.bin")]
[InlineData(" dir / filename.bin", true, "dir/filename.bin")]
[InlineData("\0dir/\0filename.bin", false, "_dir/_filename.bin")]
[InlineData("\0dir/\0filename.bin", true, "_dir/_filename.bin")]
public void NormalizeOutputPathsTest(string? path, bool getFullPath, string expected)
{
// Modify expected to account for test data if necessary
if (getFullPath && !string.IsNullOrEmpty(expected))
expected = Path.GetFullPath(expected);
string actual = PathTool.NormalizeFilePath(path, getFullPath);
Assert.Equal(expected, actual);
}
}
}