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 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 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 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 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("", false, "filename.bin")] [InlineData("", 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); } } }