Files
SabreTools.IO/SabreTools.IO.Test/Extensions/IOExtensionsTests.cs
2025-07-23 10:25:19 -04:00

313 lines
9.7 KiB
C#

using System;
using System.IO;
using System.Text;
using SabreTools.IO.Extensions;
using Xunit;
namespace SabreTools.IO.Test.Extensions
{
public class IOExtensionsTests
{
#region Ensure
[Theory]
[InlineData(null, null)]
[InlineData("", null)]
[InlineData(" ", " ")] // TODO: This is a bad result
[InlineData("dirname", "dirname")]
[InlineData("\"dirname\"", "dirname")]
public void EnsureTest(string? dir, string? expected)
{
// Handle test setup
expected ??= PathTool.GetRuntimeDirectory();
if (expected != null)
expected = Path.GetFullPath(expected);
string actual = dir.Ensure(create: false);
Assert.Equal(expected, actual);
}
#endregion
#region Get Encoding
[Fact]
public void GetEncoding_EmptyPath()
{
string path = "";
Encoding expected = Encoding.Default;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
[Fact]
public void GetEncoding_InvalidPath()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "INVALID");
Encoding expected = Encoding.Default;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
// Disable warning about UTF7 usage
#pragma warning disable SYSLIB0001
[Fact]
public void GetEncoding_UTF7()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "utf7bom.txt");
Encoding expected = Encoding.UTF7;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
#pragma warning restore SYSLIB0001
[Fact]
public void GetEncoding_UTF8()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "utf8bom.txt");
Encoding expected = Encoding.UTF8;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
[Fact]
public void GetEncoding_Unicode()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "utf16lebom.txt");
Encoding expected = Encoding.Unicode;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
[Fact]
public void GetEncoding_BigEndianUnicode()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "utf16bebom.txt");
Encoding expected = Encoding.BigEndianUnicode;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
[Fact]
public void GetEncoding_UTF32()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "utf32bom.txt");
Encoding expected = Encoding.UTF32;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
[Fact]
public void GetEncoding_ASCII()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "ascii.txt");
Encoding expected = Encoding.Default;
var actual = path.GetEncoding();
Assert.Equal(expected, actual);
}
#endregion
#region Get Normalized Extension
[Theory]
[InlineData(null, null)]
[InlineData("", null)]
[InlineData(" ", null)]
[InlineData("no-extension", null)]
[InlineData("NO-EXTENSION", null)]
[InlineData("no-extension.", null)]
[InlineData("NO-EXTENSION.", null)]
[InlineData("filename.ext", "ext")]
[InlineData("FILENAME.EXT", "ext")]
public void GetNormalizedExtensionTest(string? path, string? expected)
{
string? actual = path.GetNormalizedExtension();
Assert.Equal(expected, actual);
}
#endregion
#region Path
[Fact]
public void ListEmpty_NullDirectory()
{
string? dir = null;
var empty = dir.ListEmpty();
Assert.Null(empty);
}
[Fact]
public void ListEmpty_InvalidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData", "INVALID");
var empty = dir.ListEmpty();
Assert.Null(empty);
}
[Fact]
public void ListEmpty_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var empty = dir.ListEmpty();
Assert.NotNull(empty);
Assert.Empty(empty);
}
[Fact]
public void SafeGetDirectories_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeGetDirectories();
Assert.Single(dirs);
}
[Fact]
public void SafeGetDirectories_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeGetDirectories("*");
Assert.Single(dirs);
}
[Fact]
public void SafeGetDirectories_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeGetDirectories("*", SearchOption.AllDirectories);
Assert.Single(dirs);
}
[Fact]
public void SafeGetFiles_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeGetFiles();
Assert.NotEmpty(files);
}
[Fact]
public void SafeGetFiles_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeGetFiles("*");
Assert.NotEmpty(files);
}
[Fact]
public void SafeGetFiles_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeGetFiles("*", SearchOption.AllDirectories);
Assert.NotEmpty(files);
}
[Fact]
public void SafeGetFileSystemEntries_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeGetFileSystemEntries();
Assert.NotEmpty(entries);
}
[Fact]
public void SafeGetFileSystemEntries_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeGetFileSystemEntries("*");
Assert.NotEmpty(entries);
}
[Fact]
public void SafeGetFileSystemEntries_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeGetFileSystemEntries("*", SearchOption.AllDirectories);
Assert.NotEmpty(entries);
}
[Fact]
public void SafeEnumerateDirectories_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeEnumerateDirectories();
Assert.Single(dirs);
}
[Fact]
public void SafeEnumerateDirectories_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeEnumerateDirectories("*");
Assert.Single(dirs);
}
[Fact]
public void SafeEnumerateDirectories_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var dirs = dir.SafeEnumerateDirectories("*", SearchOption.AllDirectories);
Assert.Single(dirs);
}
[Fact]
public void SafeEnumerateFiles_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeEnumerateFiles();
Assert.NotEmpty(files);
}
[Fact]
public void SafeEnumerateFiles_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeEnumerateFiles("*");
Assert.NotEmpty(files);
}
[Fact]
public void SafeEnumerateFiles_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var files = dir.SafeEnumerateFiles("*", SearchOption.AllDirectories);
Assert.NotEmpty(files);
}
[Fact]
public void SafeEnumerateFileSystemEntries_ValidDirectory()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeEnumerateFileSystemEntries();
Assert.NotEmpty(entries);
}
[Fact]
public void SafeEnumerateFileSystemEntries_ValidDirectory_Pattern()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeEnumerateFileSystemEntries("*");
Assert.NotEmpty(entries);
}
[Fact]
public void SafeEnumerateFileSystemEntries_ValidDirectory_PatternOption()
{
string dir = Path.Combine(Environment.CurrentDirectory, "TestData");
var entries = dir.SafeEnumerateFileSystemEntries("*", SearchOption.AllDirectories);
Assert.NotEmpty(entries);
}
#endregion
}
}