mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 11:14:23 +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
|
||||
#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(),
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user