mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add first set of DatItemTool tests
This commit is contained in:
389
SabreTools.DatItems.Test/DatItemToolTests.cs
Normal file
389
SabreTools.DatItems.Test/DatItemToolTests.cs
Normal file
@@ -0,0 +1,389 @@
|
|||||||
|
using System.Text;
|
||||||
|
using SabreTools.Core.Tools;
|
||||||
|
using SabreTools.DatItems.Formats;
|
||||||
|
using SabreTools.FileTypes;
|
||||||
|
using SabreTools.FileTypes.Aaru;
|
||||||
|
using SabreTools.FileTypes.Archives;
|
||||||
|
using SabreTools.FileTypes.CHD;
|
||||||
|
using SabreTools.IO.Extensions;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace SabreTools.DatItems.Test
|
||||||
|
{
|
||||||
|
public class DatItemToolTests
|
||||||
|
{
|
||||||
|
#region CreateDatItem
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(FileType.None, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.AaruFormat, (TreatAsFile)0x00, ItemType.Media)]
|
||||||
|
[InlineData(FileType.AaruFormat, TreatAsFile.AaruFormat, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.AaruFormat, TreatAsFile.NonArchive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.AaruFormat, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.CHD, (TreatAsFile)0x00, ItemType.Disk)]
|
||||||
|
[InlineData(FileType.CHD, TreatAsFile.CHD, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.CHD, TreatAsFile.NonArchive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.CHD, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.Folder, (TreatAsFile)0x00, null)]
|
||||||
|
[InlineData(FileType.SevenZipArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.SevenZipArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.SevenZipArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.GZipArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.GZipArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.GZipArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.RarArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.RarArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.RarArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.TapeArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.TapeArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.TapeArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.XZArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.XZArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.XZArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.ZipArchive, (TreatAsFile)0x00, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.ZipArchive, TreatAsFile.Archive, ItemType.Rom)]
|
||||||
|
[InlineData(FileType.ZipArchive, TreatAsFile.All, ItemType.Rom)]
|
||||||
|
public void CreateDatItemTest(FileType fileType, TreatAsFile asFile, ItemType? expected)
|
||||||
|
{
|
||||||
|
var baseFile = CreateBaseFile(fileType);
|
||||||
|
var actual = DatItemTool.CreateDatItem(baseFile, asFile);
|
||||||
|
Assert.Equal(expected, actual?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertToDisk
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToDisk_CHDFile()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
BaseFile baseFile = new CHDFile
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
MD5 = null,
|
||||||
|
InternalMD5 = md5.FromHexString(),
|
||||||
|
SHA1 = null,
|
||||||
|
InternalSHA1 = sha1.FromHexString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Disk actual = baseFile.ConvertToDisk();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Disk.NameKey));
|
||||||
|
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Disk.MD5Key));
|
||||||
|
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Disk.SHA1Key));
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToDisk_Generic()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
BaseFile baseFile = new BaseFile
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
MD5 = md5.FromHexString(),
|
||||||
|
SHA1 = sha1.FromHexString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Disk actual = baseFile.ConvertToDisk();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Disk.NameKey));
|
||||||
|
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Disk.MD5Key));
|
||||||
|
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Disk.SHA1Key));
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertToFile
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToFile_Generic()
|
||||||
|
{
|
||||||
|
string crc = TextHelper.NormalizeCRC32("1234abcd")!;
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
BaseFile baseFile = new BaseFile
|
||||||
|
{
|
||||||
|
CRC = crc.FromHexString(),
|
||||||
|
MD5 = md5.FromHexString(),
|
||||||
|
SHA1 = sha1.FromHexString(),
|
||||||
|
SHA256 = sha256.FromHexString(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Formats.File actual = baseFile.ConvertToFile();
|
||||||
|
|
||||||
|
Assert.Equal(crc, actual.CRC);
|
||||||
|
Assert.Equal(md5, actual.MD5);
|
||||||
|
Assert.Equal(sha1, actual.SHA1);
|
||||||
|
Assert.Equal(sha256, actual.SHA256);
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertToMedia
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToMedia_AaruFormat()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
string spamSum = "1234abcd";
|
||||||
|
BaseFile baseFile = new AaruFormat
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
MD5 = null,
|
||||||
|
InternalMD5 = md5.FromHexString(),
|
||||||
|
SHA1 = null,
|
||||||
|
InternalSHA1 = sha1.FromHexString(),
|
||||||
|
SHA256 = null,
|
||||||
|
InternalSHA256 = sha256.FromHexString(),
|
||||||
|
SpamSum = null,
|
||||||
|
InternalSpamSum = Encoding.ASCII.GetBytes(spamSum),
|
||||||
|
};
|
||||||
|
|
||||||
|
Media actual = baseFile.ConvertToMedia();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Media.NameKey));
|
||||||
|
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Media.MD5Key));
|
||||||
|
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Media.SHA1Key));
|
||||||
|
Assert.Equal(sha256, actual.GetStringFieldValue(Models.Metadata.Media.SHA256Key));
|
||||||
|
Assert.Equal(spamSum, actual.GetStringFieldValue(Models.Metadata.Media.SpamSumKey));
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToMedia_Generic()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
string spamSum = "1234abcd";
|
||||||
|
BaseFile baseFile = new BaseFile
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
MD5 = md5.FromHexString(),
|
||||||
|
SHA1 = sha1.FromHexString(),
|
||||||
|
SHA256 = sha256.FromHexString(),
|
||||||
|
SpamSum = Encoding.ASCII.GetBytes(spamSum),
|
||||||
|
};
|
||||||
|
|
||||||
|
Media actual = baseFile.ConvertToMedia();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Media.NameKey));
|
||||||
|
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Media.MD5Key));
|
||||||
|
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Media.SHA1Key));
|
||||||
|
Assert.Equal(sha256, actual.GetStringFieldValue(Models.Metadata.Media.SHA256Key));
|
||||||
|
Assert.Equal(spamSum, actual.GetStringFieldValue(Models.Metadata.Media.SpamSumKey));
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertToRom
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToRom_Generic()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string date = "XXXXXX";
|
||||||
|
string crc = TextHelper.NormalizeCRC32("1234abcd")!;
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
string sha384 = TextHelper.NormalizeSHA384("1234abcd")!;
|
||||||
|
string sha512 = TextHelper.NormalizeSHA512("1234abcd")!;
|
||||||
|
string spamSum = "1234abcd";
|
||||||
|
long size = 12345;
|
||||||
|
BaseFile baseFile = new BaseFile
|
||||||
|
{
|
||||||
|
Filename = filename,
|
||||||
|
Date = date,
|
||||||
|
CRC = crc.FromHexString(),
|
||||||
|
MD5 = md5.FromHexString(),
|
||||||
|
SHA1 = sha1.FromHexString(),
|
||||||
|
SHA256 = sha256.FromHexString(),
|
||||||
|
SHA384 = sha384.FromHexString(),
|
||||||
|
SHA512 = sha512.FromHexString(),
|
||||||
|
SpamSum = Encoding.ASCII.GetBytes(spamSum),
|
||||||
|
Size = size,
|
||||||
|
};
|
||||||
|
|
||||||
|
Rom actual = baseFile.ConvertToRom();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.GetStringFieldValue(Models.Metadata.Rom.NameKey));
|
||||||
|
Assert.Equal(date, actual.GetStringFieldValue(Models.Metadata.Rom.DateKey));
|
||||||
|
Assert.Equal(crc, actual.GetStringFieldValue(Models.Metadata.Rom.CRCKey));
|
||||||
|
Assert.Equal(md5, actual.GetStringFieldValue(Models.Metadata.Rom.MD5Key));
|
||||||
|
Assert.Equal(sha1, actual.GetStringFieldValue(Models.Metadata.Rom.SHA1Key));
|
||||||
|
Assert.Equal(sha256, actual.GetStringFieldValue(Models.Metadata.Rom.SHA256Key));
|
||||||
|
Assert.Equal(sha384, actual.GetStringFieldValue(Models.Metadata.Rom.SHA384Key));
|
||||||
|
Assert.Equal(sha512, actual.GetStringFieldValue(Models.Metadata.Rom.SHA512Key));
|
||||||
|
Assert.Equal(spamSum, actual.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey));
|
||||||
|
Assert.Equal(size, actual.GetInt64FieldValue(Models.Metadata.Rom.SizeKey));
|
||||||
|
Assert.Equal((DupeType)0x00, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ConvertToBaseFile
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToBaseFile_Disk()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
|
||||||
|
Disk disk = new Disk();
|
||||||
|
disk.SetFieldValue<string?>(Models.Metadata.Disk.NameKey, filename);
|
||||||
|
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, md5);
|
||||||
|
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, sha1);
|
||||||
|
|
||||||
|
BaseFile actual = disk.ConvertToBaseFile();
|
||||||
|
CHDFile? actualChd = actual as CHDFile;
|
||||||
|
Assert.NotNull(actualChd);
|
||||||
|
|
||||||
|
Assert.Equal(filename, actualChd.Filename);
|
||||||
|
Assert.Equal(md5, actualChd.MD5.ToHexString());
|
||||||
|
Assert.Equal(md5, actualChd.InternalMD5.ToHexString());
|
||||||
|
Assert.Equal(sha1, actualChd.SHA1.ToHexString());
|
||||||
|
Assert.Equal(sha1, actualChd.InternalSHA1.ToHexString());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToBaseFile_File()
|
||||||
|
{
|
||||||
|
string crc = TextHelper.NormalizeCRC32("1234abcd")!;
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
|
||||||
|
Formats.File file = new Formats.File
|
||||||
|
{
|
||||||
|
CRC = crc,
|
||||||
|
MD5 = md5,
|
||||||
|
SHA1 = sha1,
|
||||||
|
SHA256 = sha256,
|
||||||
|
};
|
||||||
|
|
||||||
|
BaseFile actual = file.ConvertToBaseFile();
|
||||||
|
|
||||||
|
Assert.Equal(crc, actual.CRC.ToHexString());
|
||||||
|
Assert.Equal(md5, actual.MD5.ToHexString());
|
||||||
|
Assert.Equal(sha1, actual.SHA1.ToHexString());
|
||||||
|
Assert.Equal(sha256, actual.SHA256.ToHexString());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToBaseFile_Media()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
string spamSum = "1234abcd";
|
||||||
|
|
||||||
|
Media media = new Media();
|
||||||
|
media.SetFieldValue<string?>(Models.Metadata.Media.NameKey, filename);
|
||||||
|
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, md5);
|
||||||
|
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, sha1);
|
||||||
|
media.SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, sha256);
|
||||||
|
media.SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, spamSum);
|
||||||
|
|
||||||
|
BaseFile actual = media.ConvertToBaseFile();
|
||||||
|
AaruFormat? actualAif = actual as AaruFormat;
|
||||||
|
Assert.NotNull(actualAif);
|
||||||
|
|
||||||
|
Assert.Equal(filename, actualAif.Filename);
|
||||||
|
Assert.Equal(md5, actualAif.MD5.ToHexString());
|
||||||
|
Assert.Equal(md5, actualAif.InternalMD5.ToHexString());
|
||||||
|
Assert.Equal(sha1, actualAif.SHA1.ToHexString());
|
||||||
|
Assert.Equal(sha1, actualAif.InternalSHA1.ToHexString());
|
||||||
|
Assert.Equal(sha256, actualAif.SHA256.ToHexString());
|
||||||
|
Assert.Equal(sha256, actualAif.InternalSHA256.ToHexString());
|
||||||
|
string actualSpamSum = Encoding.ASCII.GetString(actualAif.SpamSum!);
|
||||||
|
Assert.Equal(spamSum, actualSpamSum);
|
||||||
|
actualSpamSum = Encoding.ASCII.GetString(actualAif.InternalSpamSum!);
|
||||||
|
Assert.Equal(spamSum, actualSpamSum);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConvertToBaseFile_Rom()
|
||||||
|
{
|
||||||
|
string filename = "XXXXXX";
|
||||||
|
string date = "XXXXXX";
|
||||||
|
string crc = TextHelper.NormalizeCRC32("1234abcd")!;
|
||||||
|
string md5 = TextHelper.NormalizeMD5("1234abcd")!;
|
||||||
|
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||||
|
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||||
|
string sha384 = TextHelper.NormalizeSHA384("1234abcd")!;
|
||||||
|
string sha512 = TextHelper.NormalizeSHA512("1234abcd")!;
|
||||||
|
string spamSum = "1234abcd";
|
||||||
|
long size = 12345;
|
||||||
|
|
||||||
|
Rom rom = new Rom();
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.NameKey, filename);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.DateKey, date);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, crc);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, md5);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, sha1);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, sha256);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, sha384);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, sha512);
|
||||||
|
rom.SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, spamSum);
|
||||||
|
rom.SetFieldValue<long>(Models.Metadata.Rom.SizeKey, size);
|
||||||
|
|
||||||
|
BaseFile actual = rom.ConvertToBaseFile();
|
||||||
|
|
||||||
|
Assert.Equal(filename, actual.Filename);
|
||||||
|
Assert.Equal(date, actual.Date);
|
||||||
|
Assert.Equal(crc, actual.CRC.ToHexString());
|
||||||
|
Assert.Equal(md5, actual.MD5.ToHexString());
|
||||||
|
Assert.Equal(sha1, actual.SHA1.ToHexString());
|
||||||
|
Assert.Equal(sha256, actual.SHA256.ToHexString());
|
||||||
|
Assert.Equal(sha384, actual.SHA384.ToHexString());
|
||||||
|
Assert.Equal(sha512, actual.SHA512.ToHexString());
|
||||||
|
string actualSpamSum = Encoding.ASCII.GetString(actual.SpamSum!);
|
||||||
|
Assert.Equal(spamSum, actualSpamSum);
|
||||||
|
Assert.Equal(size, actual.Size);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Helpers
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create a BaseFile for testing
|
||||||
|
/// </summary>
|
||||||
|
private static BaseFile CreateBaseFile(FileType fileType)
|
||||||
|
{
|
||||||
|
return fileType switch
|
||||||
|
{
|
||||||
|
FileType.None => new BaseFile(),
|
||||||
|
FileType.AaruFormat => new AaruFormat(),
|
||||||
|
FileType.CHD => new CHDFile(),
|
||||||
|
FileType.Folder => new Folder(),
|
||||||
|
FileType.SevenZipArchive => new ZipArchive(),
|
||||||
|
FileType.GZipArchive => new ZipArchive(),
|
||||||
|
FileType.RarArchive => new ZipArchive(),
|
||||||
|
FileType.TapeArchive => new ZipArchive(),
|
||||||
|
FileType.XZArchive => new ZipArchive(),
|
||||||
|
FileType.ZipArchive => new ZipArchive(),
|
||||||
|
_ => new BaseFile(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
29
SabreTools.DatItems.Test/SabreTools.DatItems.Test.csproj
Normal file
29
SabreTools.DatItems.Test/SabreTools.DatItems.Test.csproj
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFrameworks>net6.0;net8.0;net9.0</TargetFrameworks>
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
<LangVersion>latest</LangVersion>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SabreTools.Core\SabreTools.Core.csproj" />
|
||||||
|
<ProjectReference Include="..\SabreTools.DatItems\SabreTools.DatItems.csproj" />
|
||||||
|
<ProjectReference Include="..\SabreTools.FileTypes\SabreTools.FileTypes.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="coverlet.collector" Version="6.0.3">
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||||
|
<PackageReference Include="xunit" Version="2.9.2" />
|
||||||
|
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -36,16 +36,16 @@ namespace SabreTools.DatItems
|
|||||||
{
|
{
|
||||||
// Disk
|
// Disk
|
||||||
#if NET20 || NET35
|
#if NET20 || NET35
|
||||||
FileTypes.CHD.CHDFile when (asFile & TreatAsFile.CHD) == 0 => baseFile.ConvertToDisk(),
|
CHDFile when (asFile & TreatAsFile.CHD) == 0 => baseFile.ConvertToDisk(),
|
||||||
#else
|
#else
|
||||||
FileTypes.CHD.CHDFile when !asFile.HasFlag(TreatAsFile.CHD) => baseFile.ConvertToDisk(),
|
CHDFile when !asFile.HasFlag(TreatAsFile.CHD) => baseFile.ConvertToDisk(),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Media
|
// Media
|
||||||
#if NET20 || NET35
|
#if NET20 || NET35
|
||||||
FileTypes.Aaru.AaruFormat when (asFile & TreatAsFile.AaruFormat) == 0 => baseFile.ConvertToMedia(),
|
AaruFormat when (asFile & TreatAsFile.AaruFormat) == 0 => baseFile.ConvertToMedia(),
|
||||||
#else
|
#else
|
||||||
FileTypes.Aaru.AaruFormat when !asFile.HasFlag(TreatAsFile.AaruFormat) => baseFile.ConvertToMedia(),
|
AaruFormat when !asFile.HasFlag(TreatAsFile.AaruFormat) => baseFile.ConvertToMedia(),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Rom
|
// Rom
|
||||||
@@ -72,7 +72,7 @@ namespace SabreTools.DatItems
|
|||||||
var disk = new Disk();
|
var disk = new Disk();
|
||||||
|
|
||||||
disk.SetName(baseFile.Filename);
|
disk.SetName(baseFile.Filename);
|
||||||
if (baseFile is FileTypes.CHD.CHDFile chd)
|
if (baseFile is CHDFile chd)
|
||||||
{
|
{
|
||||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, chd.InternalMD5.ToHexString());
|
disk.SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, chd.InternalMD5.ToHexString());
|
||||||
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, chd.InternalSHA1.ToHexString());
|
disk.SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, chd.InternalSHA1.ToHexString());
|
||||||
@@ -118,7 +118,7 @@ namespace SabreTools.DatItems
|
|||||||
var media = new Media();
|
var media = new Media();
|
||||||
|
|
||||||
media.SetName(baseFile.Filename);
|
media.SetName(baseFile.Filename);
|
||||||
if (baseFile is FileTypes.Aaru.AaruFormat aif)
|
if (baseFile is AaruFormat aif)
|
||||||
{
|
{
|
||||||
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, aif.InternalMD5.ToHexString());
|
media.SetFieldValue<string?>(Models.Metadata.Media.MD5Key, aif.InternalMD5.ToHexString());
|
||||||
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, aif.InternalSHA1.ToHexString());
|
media.SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, aif.InternalSHA1.ToHexString());
|
||||||
@@ -171,10 +171,15 @@ namespace SabreTools.DatItems
|
|||||||
/// <returns>BaseFile containing original Disk information</returns>
|
/// <returns>BaseFile containing original Disk information</returns>
|
||||||
public static BaseFile ConvertToBaseFile(this Disk disk)
|
public static BaseFile ConvertToBaseFile(this Disk disk)
|
||||||
{
|
{
|
||||||
|
string? machineName = null;
|
||||||
|
var machine = disk.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine != null)
|
||||||
|
machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
||||||
|
|
||||||
return new CHDFile()
|
return new CHDFile()
|
||||||
{
|
{
|
||||||
Filename = disk.GetName(),
|
Filename = disk.GetName(),
|
||||||
Parent = disk.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
|
Parent = machineName,
|
||||||
MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
|
MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
|
||||||
InternalMD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
|
InternalMD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
|
||||||
SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key).FromHexString(),
|
SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key).FromHexString(),
|
||||||
@@ -189,9 +194,14 @@ namespace SabreTools.DatItems
|
|||||||
/// <returns>BaseFile containing original File information</returns>
|
/// <returns>BaseFile containing original File information</returns>
|
||||||
public static BaseFile ConvertToBaseFile(this Formats.File file)
|
public static BaseFile ConvertToBaseFile(this Formats.File file)
|
||||||
{
|
{
|
||||||
|
string? machineName = null;
|
||||||
|
var machine = file.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine != null)
|
||||||
|
machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
||||||
|
|
||||||
return new BaseFile()
|
return new BaseFile()
|
||||||
{
|
{
|
||||||
Parent = file.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
|
Parent = machineName,
|
||||||
CRC = file.CRC.FromHexString(),
|
CRC = file.CRC.FromHexString(),
|
||||||
MD5 = file.MD5.FromHexString(),
|
MD5 = file.MD5.FromHexString(),
|
||||||
SHA1 = file.SHA1.FromHexString(),
|
SHA1 = file.SHA1.FromHexString(),
|
||||||
@@ -206,10 +216,15 @@ namespace SabreTools.DatItems
|
|||||||
/// <returns>BaseFile containing original Media information</returns>
|
/// <returns>BaseFile containing original Media information</returns>
|
||||||
public static BaseFile ConvertToBaseFile(this Media media)
|
public static BaseFile ConvertToBaseFile(this Media media)
|
||||||
{
|
{
|
||||||
|
string? machineName = null;
|
||||||
|
var machine = media.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine != null)
|
||||||
|
machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
||||||
|
|
||||||
return new AaruFormat()
|
return new AaruFormat()
|
||||||
{
|
{
|
||||||
Filename = media.GetName(),
|
Filename = media.GetName(),
|
||||||
Parent = media.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
|
Parent = machineName,
|
||||||
MD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
|
MD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
|
||||||
InternalMD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
|
InternalMD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
|
||||||
SHA1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key).FromHexString(),
|
SHA1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key).FromHexString(),
|
||||||
@@ -228,11 +243,16 @@ namespace SabreTools.DatItems
|
|||||||
/// <returns>BaseFile containing original Rom information</returns>
|
/// <returns>BaseFile containing original Rom information</returns>
|
||||||
public static BaseFile ConvertToBaseFile(this Rom rom)
|
public static BaseFile ConvertToBaseFile(this Rom rom)
|
||||||
{
|
{
|
||||||
|
string? machineName = null;
|
||||||
|
var machine = rom.GetFieldValue<Machine>(DatItem.MachineKey);
|
||||||
|
if (machine != null)
|
||||||
|
machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey);
|
||||||
|
|
||||||
string? spamSum = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey);
|
string? spamSum = rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey);
|
||||||
return new BaseFile()
|
return new BaseFile()
|
||||||
{
|
{
|
||||||
Filename = rom.GetName(),
|
Filename = rom.GetName(),
|
||||||
Parent = rom.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
|
Parent = machineName,
|
||||||
Date = rom.GetStringFieldValue(Models.Metadata.Rom.DateKey),
|
Date = rom.GetStringFieldValue(Models.Metadata.Rom.DateKey),
|
||||||
Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)),
|
Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)),
|
||||||
CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey).FromHexString(),
|
CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey).FromHexString(),
|
||||||
|
|||||||
@@ -1,29 +1,11 @@
|
|||||||
using SabreTools.Core.Tools;
|
|
||||||
using SabreTools.DatItems;
|
using SabreTools.DatItems;
|
||||||
using SabreTools.DatItems.Formats;
|
using SabreTools.DatItems.Formats;
|
||||||
using SabreTools.FileTypes;
|
|
||||||
using SabreTools.FileTypes.Aaru;
|
|
||||||
using SabreTools.FileTypes.Archives;
|
|
||||||
using SabreTools.FileTypes.CHD;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace SabreTools.Test.DatItems
|
namespace SabreTools.Test.DatItems
|
||||||
{
|
{
|
||||||
public class DatItemTests
|
public class DatItemTests
|
||||||
{
|
{
|
||||||
[Theory]
|
|
||||||
[InlineData(FileType.None, ItemType.Rom)]
|
|
||||||
[InlineData(FileType.Folder, null)]
|
|
||||||
[InlineData(FileType.AaruFormat, ItemType.Media)]
|
|
||||||
[InlineData(FileType.CHD, ItemType.Disk)]
|
|
||||||
[InlineData(FileType.ZipArchive, ItemType.Rom)]
|
|
||||||
public void CreateBaseFileTest(FileType fileType, ItemType? expected)
|
|
||||||
{
|
|
||||||
var baseFile = CreateBaseFile(fileType);
|
|
||||||
var actual = DatItemTool.CreateDatItem(baseFile);
|
|
||||||
Assert.Equal(expected, actual?.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void DuplicateStatusUnequalTest()
|
public void DuplicateStatusUnequalTest()
|
||||||
{
|
{
|
||||||
@@ -133,36 +115,8 @@ namespace SabreTools.Test.DatItems
|
|||||||
Assert.Equal(DupeType.Internal | DupeType.Hash, actual);
|
Assert.Equal(DupeType.Internal | DupeType.Hash, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
|
||||||
[InlineData(null, null, true)]
|
|
||||||
[InlineData(null, new byte[0], true)]
|
|
||||||
[InlineData(new byte[0], null, true)]
|
|
||||||
[InlineData(new byte[] { 0x00 }, new byte[] { 0x00, 0x01 }, false)]
|
|
||||||
[InlineData(new byte[] { 0x00 }, new byte[] { 0x01 }, false)]
|
|
||||||
[InlineData(new byte[] { 0x00 }, new byte[] { 0x00 }, true)]
|
|
||||||
public void ConditionalHashEqualsTest(byte[]? first, byte[]? second, bool expected)
|
|
||||||
{
|
|
||||||
bool actual = SabreTools.Core.Tools.Utilities.ConditionalHashEquals(first, second);
|
|
||||||
Assert.Equal(expected, actual);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Add tests for DatItem.Merge
|
// TODO: Add tests for DatItem.Merge
|
||||||
// TODO: Add tests for ResolveNames
|
// TODO: Add tests for ResolveNames
|
||||||
// TODO: Add tests for Sort
|
// TODO: Add tests for Sort
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Create a BaseFile for testing
|
|
||||||
/// </summary>
|
|
||||||
private static BaseFile CreateBaseFile(FileType fileType)
|
|
||||||
{
|
|
||||||
return fileType switch
|
|
||||||
{
|
|
||||||
FileType.Folder => new Folder(),
|
|
||||||
FileType.AaruFormat => new AaruFormat(),
|
|
||||||
FileType.CHD => new CHDFile(),
|
|
||||||
FileType.ZipArchive => new ZipArchive(),
|
|
||||||
_ => new BaseFile(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,6 +32,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Core.Test", "Sab
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.FileTypes.Test", "SabreTools.FileTypes.Test\SabreTools.FileTypes.Test.csproj", "{76805ADC-1917-4892-BB07-7305825A72A5}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.FileTypes.Test", "SabreTools.FileTypes.Test\SabreTools.FileTypes.Test.csproj", "{76805ADC-1917-4892-BB07-7305825A72A5}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatItems.Test", "SabreTools.DatItems.Test\SabreTools.DatItems.Test.csproj", "{5BB75FB7-D9D0-493D-AF31-A371882A44A4}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -128,6 +130,14 @@ Global
|
|||||||
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|x64.ActiveCfg = Release|Any CPU
|
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|x64.Build.0 = Release|Any CPU
|
{76805ADC-1917-4892-BB07-7305825A72A5}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{5BB75FB7-D9D0-493D-AF31-A371882A44A4}.Release|x64.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Reference in New Issue
Block a user