Add first set of DatItemTool tests

This commit is contained in:
Matt Nadareski
2025-01-06 12:22:54 -05:00
parent 33fa3461b3
commit f3eb7349bb
5 changed files with 458 additions and 56 deletions

View 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
}
}

View 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>

View File

@@ -36,16 +36,16 @@ namespace SabreTools.DatItems
{
// Disk
#if NET20 || NET35
FileTypes.CHD.CHDFile when (asFile & TreatAsFile.CHD) == 0 => baseFile.ConvertToDisk(),
CHDFile when (asFile & TreatAsFile.CHD) == 0 => baseFile.ConvertToDisk(),
#else
FileTypes.CHD.CHDFile when !asFile.HasFlag(TreatAsFile.CHD) => baseFile.ConvertToDisk(),
CHDFile when !asFile.HasFlag(TreatAsFile.CHD) => baseFile.ConvertToDisk(),
#endif
// Media
#if NET20 || NET35
FileTypes.Aaru.AaruFormat when (asFile & TreatAsFile.AaruFormat) == 0 => baseFile.ConvertToMedia(),
AaruFormat when (asFile & TreatAsFile.AaruFormat) == 0 => baseFile.ConvertToMedia(),
#else
FileTypes.Aaru.AaruFormat when !asFile.HasFlag(TreatAsFile.AaruFormat) => baseFile.ConvertToMedia(),
AaruFormat when !asFile.HasFlag(TreatAsFile.AaruFormat) => baseFile.ConvertToMedia(),
#endif
// Rom
@@ -72,7 +72,7 @@ namespace SabreTools.DatItems
var disk = new Disk();
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.SHA1Key, chd.InternalSHA1.ToHexString());
@@ -118,7 +118,7 @@ namespace SabreTools.DatItems
var media = new Media();
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.SHA1Key, aif.InternalSHA1.ToHexString());
@@ -171,10 +171,15 @@ namespace SabreTools.DatItems
/// <returns>BaseFile containing original Disk information</returns>
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()
{
Filename = disk.GetName(),
Parent = disk.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
Parent = machineName,
MD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
InternalMD5 = disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key).FromHexString(),
SHA1 = disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key).FromHexString(),
@@ -189,9 +194,14 @@ namespace SabreTools.DatItems
/// <returns>BaseFile containing original File information</returns>
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()
{
Parent = file.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
Parent = machineName,
CRC = file.CRC.FromHexString(),
MD5 = file.MD5.FromHexString(),
SHA1 = file.SHA1.FromHexString(),
@@ -206,10 +216,15 @@ namespace SabreTools.DatItems
/// <returns>BaseFile containing original Media information</returns>
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()
{
Filename = media.GetName(),
Parent = media.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
Parent = machineName,
MD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
InternalMD5 = media.GetStringFieldValue(Models.Metadata.Media.MD5Key).FromHexString(),
SHA1 = media.GetStringFieldValue(Models.Metadata.Media.SHA1Key).FromHexString(),
@@ -228,11 +243,16 @@ namespace SabreTools.DatItems
/// <returns>BaseFile containing original Rom information</returns>
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);
return new BaseFile()
{
Filename = rom.GetName(),
Parent = rom.GetFieldValue<Machine>(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey),
Parent = machineName,
Date = rom.GetStringFieldValue(Models.Metadata.Rom.DateKey),
Size = NumberHelper.ConvertToInt64(rom.GetStringFieldValue(Models.Metadata.Rom.SizeKey)),
CRC = rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey).FromHexString(),

View File

@@ -1,29 +1,11 @@
using SabreTools.Core.Tools;
using SabreTools.DatItems;
using SabreTools.DatItems.Formats;
using SabreTools.FileTypes;
using SabreTools.FileTypes.Aaru;
using SabreTools.FileTypes.Archives;
using SabreTools.FileTypes.CHD;
using Xunit;
namespace SabreTools.Test.DatItems
{
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]
public void DuplicateStatusUnequalTest()
{
@@ -133,36 +115,8 @@ namespace SabreTools.Test.DatItems
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 ResolveNames
// 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(),
};
}
}
}

View File

@@ -32,6 +32,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Core.Test", "Sab
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.FileTypes.Test", "SabreTools.FileTypes.Test\SabreTools.FileTypes.Test.csproj", "{76805ADC-1917-4892-BB07-7305825A72A5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatItems.Test", "SabreTools.DatItems.Test\SabreTools.DatItems.Test.csproj", "{5BB75FB7-D9D0-493D-AF31-A371882A44A4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
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|x64.ActiveCfg = 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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE