Files
SabreTools/SabreTools.FileTypes.Test/FileTypeToolTests.cs

128 lines
4.6 KiB
C#
Raw Permalink Normal View History

2025-01-06 10:51:50 -05:00
using System;
using System.IO;
using SabreTools.Hashing;
using SabreTools.IO.Extensions;
using Xunit;
namespace SabreTools.FileTypes.Test
{
public class FileTypeToolTests
{
private static readonly HashType[] _defaultHashes = [HashType.CRC32, HashType.MD5, HashType.SHA1];
private const long _expectedSize = 125;
private const string _expectedCrc = "ba02a660";
private const string _expectedMd5 = "b722871eaa950016296184d026c5dec9";
private const string _expectedSha1 = "eea1ee2d801d830c4bdad4df3c8da6f9f52d1a9f";
#region GetInfo
[Fact]
public void GetInfo_File_EmptyPath()
{
string input = string.Empty;
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes);
Assert.Null(actual.Filename);
Assert.Null(actual.Size);
Assert.Null(actual.CRC);
Assert.Null(actual.MD5);
Assert.Null(actual.SHA1);
}
[Fact]
public void GetInfo_File_NotExists()
{
string input = "INVALID";
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes);
Assert.Null(actual.Filename);
Assert.Null(actual.Size);
Assert.Null(actual.CRC);
Assert.Null(actual.MD5);
Assert.Null(actual.SHA1);
}
[Fact]
public void GetInfo_File_NoHeader()
{
string input = Path.Combine(Environment.CurrentDirectory, "TestData", "file-to-hash.bin");
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes);
Assert.Equal("file-to-hash.bin", actual.Filename);
Assert.Equal(_expectedSize, actual.Size);
Assert.Equal(_expectedCrc, actual.CRC.ToHexString());
Assert.Equal(_expectedMd5, actual.MD5.ToHexString());
Assert.Equal(_expectedSha1, actual.SHA1.ToHexString());
}
[Fact]
public void GetInfo_File_NullHeader()
{
string input = Path.Combine(Environment.CurrentDirectory, "TestData", "file-to-hash.bin");
string? header = null;
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes, header);
Assert.Equal("file-to-hash.bin", actual.Filename);
Assert.Equal(_expectedSize, actual.Size);
Assert.Equal(_expectedCrc, actual.CRC.ToHexString());
Assert.Equal(_expectedMd5, actual.MD5.ToHexString());
Assert.Equal(_expectedSha1, actual.SHA1.ToHexString());
}
[Fact]
public void GetInfo_File_EmptyHeader()
{
string input = Path.Combine(Environment.CurrentDirectory, "TestData", "file-to-hash.bin");
string? header = string.Empty;
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes, header);
Assert.Equal("file-to-hash.bin", actual.Filename);
Assert.Equal(_expectedSize, actual.Size);
Assert.Equal(_expectedCrc, actual.CRC.ToHexString());
Assert.Equal(_expectedMd5, actual.MD5.ToHexString());
Assert.Equal(_expectedSha1, actual.SHA1.ToHexString());
}
[Fact]
public void GetInfo_File_NonMatchingHeader()
{
string input = Path.Combine(Environment.CurrentDirectory, "TestData", "file-to-hash.bin");
string? header = "nes";
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes, header);
Assert.Equal("file-to-hash.bin", actual.Filename);
Assert.Equal(_expectedSize, actual.Size);
Assert.Equal(_expectedCrc, actual.CRC.ToHexString());
Assert.Equal(_expectedMd5, actual.MD5.ToHexString());
Assert.Equal(_expectedSha1, actual.SHA1.ToHexString());
}
[Fact]
public void GetInfo_Stream_Null()
{
Stream? input = null;
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes);
Assert.Null(actual.Size);
Assert.Null(actual.CRC);
Assert.Null(actual.MD5);
Assert.Null(actual.SHA1);
}
[Fact]
public void GetInfo_Stream_Valid()
{
string path = Path.Combine(Environment.CurrentDirectory, "TestData", "file-to-hash.bin");
Stream? input = File.OpenRead(path);
BaseFile actual = FileTypeTool.GetInfo(input, _defaultHashes);
Assert.Equal(_expectedSize, actual.Size);
Assert.Equal(_expectedCrc, actual.CRC.ToHexString());
Assert.Equal(_expectedMd5, actual.MD5.ToHexString());
Assert.Equal(_expectedSha1, actual.SHA1.ToHexString());
}
#endregion
}
}