mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
128 lines
4.6 KiB
C#
128 lines
4.6 KiB
C#
|
|
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
|
||
|
|
}
|
||
|
|
}
|