diff --git a/SabreTools.DatFiles.Test/FormatsTests.cs b/SabreTools.DatFiles.Test/FormatsTests.cs
index a9fbc68e..84aa1986 100644
--- a/SabreTools.DatFiles.Test/FormatsTests.cs
+++ b/SabreTools.DatFiles.Test/FormatsTests.cs
@@ -2,6 +2,7 @@ using System;
using System.Linq;
using SabreTools.DatFiles.Formats;
using SabreTools.DatItems;
+using SabreTools.DatItems.Formats;
using Xunit;
namespace SabreTools.DatFiles.Test
@@ -27,29 +28,43 @@ namespace SabreTools.DatFiles.Test
{
var datFile = new ArchiveDotOrg(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
}
#endregion
#region AttractMode
- // TODO: Write AttractMode format tests
-
[Fact]
public void AttractMode_SupportedTypes()
{
var datFile = new AttractMode(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void AttractMode_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new AttractMode(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ ]));
}
#endregion
#region ClrMamePro
- // TODO: Write ClrMamePro format tests
-
[Fact]
public void ClrMamePro_SupportedTypes()
{
@@ -72,76 +87,324 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Release()
+ {
+ var datItem = new Release();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Release.NameKey,
+ Models.Metadata.Release.RegionKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_BiosSet()
+ {
+ var datItem = new BiosSet();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.BiosSet.NameKey,
+ Models.Metadata.BiosSet.DescriptionKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Sample()
+ {
+ var datItem = new Sample();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Sample.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Archive()
+ {
+ var datItem = new Archive();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Archive.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Chip()
+ {
+ var datItem = new Chip();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Chip.ChipTypeKey,
+ Models.Metadata.Chip.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Display()
+ {
+ var datItem = new Display();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Display.DisplayTypeKey,
+ Models.Metadata.Display.RotateKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Sound()
+ {
+ var datItem = new Sound();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Sound.ChannelsKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Input()
+ {
+ var datItem = new Input();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Input.PlayersKey,
+ Models.Metadata.Input.ControlKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_DipSwitch()
+ {
+ var datItem = new DipSwitch();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.DipSwitch.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void ClrMamePro_GetMissingRequiredFields_Driver()
+ {
+ var datItem = new Driver();
+ var datFile = new ClrMamePro(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Driver.StatusKey,
+ Models.Metadata.Driver.EmulationKey,
+ ]));
+ }
+
#endregion
#region DosCenter
- // TODO: Write DosCenter format tests
-
[Fact]
public void DosCenter_SupportedTypes()
{
var datFile = new DosCenter(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void DosCenter_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new DosCenter(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.CRCKey,
+ ]));
}
#endregion
#region EverdriveSMDB
- // TODO: Write EverdriveSMDB format tests
-
[Fact]
public void EverdriveSMDB_SupportedTypes()
{
var datFile = new EverdriveSMDB(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void EverdriveSMDB_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new EverdriveSMDB(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA256Key,
+ Models.Metadata.Rom.SHA1Key,
+ Models.Metadata.Rom.MD5Key,
+ Models.Metadata.Rom.CRCKey,
+ ]));
}
#endregion
#region Hashfile
- // TODO: Write Hashfile format tests
-
[Fact]
public void SfvFile_SupportedTypes()
{
var datFile = new SfvFile(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
- ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void SfvFile_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new SfvFile(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.CRCKey,
+ ]));
+ }
+
[Fact]
public void Md2File_SupportedTypes()
{
var datFile = new Md2File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
- ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void Md2File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Md2File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.MD2Key,
+ ]));
+ }
+
[Fact]
public void Md4File_SupportedTypes()
{
var datFile = new Md4File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
- ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void Md4File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Md4File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.MD4Key,
+ ]));
+ }
+
[Fact]
public void Md5File_SupportedTypes()
{
@@ -154,6 +417,51 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void Md5File_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Md5File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.MD5Key,
+ ]));
+ }
+
+ [Fact]
+ public void Md5File_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new Md5File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.MD5Key,
+ ]));
+ }
+
+ [Fact]
+ public void Md5File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Md5File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.MD5Key,
+ ]));
+ }
+
[Fact]
public void Sha1File_SupportedTypes()
{
@@ -166,60 +474,187 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void Sha1File_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Sha1File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Sha1File_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new Sha1File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Sha1File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Sha1File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
[Fact]
public void Sha256File_SupportedTypes()
{
var datFile = new Sha256File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void Sha256File_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new Sha256File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA256Key,
+ ]));
+ }
+
+ [Fact]
+ public void Sha256File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Sha256File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA256Key,
+ ]));
+ }
+
[Fact]
public void Sha384File_SupportedTypes()
{
var datFile = new Sha384File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
- ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void Sha384File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Sha384File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA384Key,
+ ]));
+ }
+
[Fact]
public void Sha512File_SupportedTypes()
{
var datFile = new Sha512File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
- ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void Sha512File_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Sha512File(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA512Key,
+ ]));
+ }
+
[Fact]
public void SpamSumFile_SupportedTypes()
{
var datFile = new SpamSumFile(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
- ItemType.Disk,
ItemType.Media,
ItemType.Rom,
]));
}
+ [Fact]
+ public void SpamSumFile_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new SpamSumFile(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SpamSumKey,
+ ]));
+ }
+
+ [Fact]
+ public void SpamSumFile_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new SpamSumFile(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SpamSumKey,
+ ]));
+ }
+
#endregion
#region Listrom
- // TODO: Write Listrom format tests
-
[Fact]
public void Listrom_SupportedTypes()
{
@@ -231,12 +666,42 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void Listrom_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Listrom(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Listrom_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Listrom(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.CRCKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
#endregion
#region Listxml
- // TODO: Write Listxml format tests
-
[Fact]
public void Listxml_SupportedTypes()
{
@@ -266,12 +731,289 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_BiosSet()
+ {
+ var datItem = new BiosSet();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.BiosSet.NameKey,
+ Models.Metadata.BiosSet.DescriptionKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_DeviceRef()
+ {
+ var datItem = new DeviceRef();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.DeviceRef.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Sample()
+ {
+ var datItem = new Sample();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Sample.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Chip()
+ {
+ var datItem = new Chip();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Chip.NameKey,
+ Models.Metadata.Chip.ChipTypeKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Display()
+ {
+ var datItem = new Display();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Display.DisplayTypeKey,
+ Models.Metadata.Display.RefreshKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Sound()
+ {
+ var datItem = new Sound();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Sound.ChannelsKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Input()
+ {
+ var datItem = new Input();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Input.PlayersKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_DipSwitch()
+ {
+ var datItem = new DipSwitch();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.DipSwitch.NameKey,
+ Models.Metadata.DipSwitch.TagKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Configuration()
+ {
+ var datItem = new Configuration();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Configuration.NameKey,
+ Models.Metadata.Configuration.TagKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Port()
+ {
+ var datItem = new Port();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Port.TagKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Adjuster()
+ {
+ var datItem = new Adjuster();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Adjuster.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Driver()
+ {
+ var datItem = new Driver();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Driver.StatusKey,
+ Models.Metadata.Driver.EmulationKey,
+ Models.Metadata.Driver.CocktailKey,
+ Models.Metadata.Driver.SaveStateKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Feature()
+ {
+ var datItem = new Feature();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Feature.FeatureTypeKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Device()
+ {
+ var datItem = new Device();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Device.DeviceTypeKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_Slot()
+ {
+ var datItem = new Slot();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Slot.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_SoftwareList()
+ {
+ var datItem = new DatItems.Formats.SoftwareList();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.SoftwareList.TagKey,
+ Models.Metadata.SoftwareList.NameKey,
+ Models.Metadata.SoftwareList.StatusKey,
+ ]));
+ }
+
+ [Fact]
+ public void Listxml_GetMissingRequiredFields_RamOption()
+ {
+ var datItem = new RamOption();
+ var datFile = new Listxml(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.RamOption.NameKey,
+ ]));
+ }
+
#endregion
#region Logiqx
- // TODO: Write Logiqx format tests
-
[Fact]
public void Logiqx_SupportedTypes()
{
@@ -280,11 +1022,165 @@ namespace SabreTools.DatFiles.Test
Assert.True(actual.SequenceEqual([
ItemType.Archive,
ItemType.BiosSet,
+ ItemType.DeviceRef,
ItemType.Disk,
+ ItemType.Driver,
ItemType.Media,
ItemType.Release,
ItemType.Rom,
ItemType.Sample,
+ ItemType.SoftwareList,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Release()
+ {
+ var datItem = new Release();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Release.NameKey,
+ Models.Metadata.Release.RegionKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_BiosSet()
+ {
+ var datItem = new BiosSet();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.BiosSet.NameKey,
+ Models.Metadata.BiosSet.DescriptionKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_DeviceRef()
+ {
+ var datItem = new DeviceRef();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.DeviceRef.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Sample()
+ {
+ var datItem = new Sample();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Sample.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Archive()
+ {
+ var datItem = new Archive();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Archive.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_Driver()
+ {
+ var datItem = new Driver();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Driver.StatusKey,
+ Models.Metadata.Driver.EmulationKey,
+ Models.Metadata.Driver.CocktailKey,
+ Models.Metadata.Driver.SaveStateKey,
+ ]));
+ }
+
+ [Fact]
+ public void Logiqx_GetMissingRequiredFields_SoftwareList()
+ {
+ var datItem = new DatItems.Formats.SoftwareList();
+ var datFile = new Logiqx(null, false);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.SoftwareList.TagKey,
+ Models.Metadata.SoftwareList.NameKey,
+ Models.Metadata.SoftwareList.StatusKey,
]));
}
@@ -292,8 +1188,6 @@ namespace SabreTools.DatFiles.Test
#region Missfile
- // TODO: Write Missfile format tests
-
[Fact]
public void Missfile_SupportedTypes()
{
@@ -306,50 +1200,94 @@ namespace SabreTools.DatFiles.Test
#region OfflineList
- // TODO: Write OfflineList format tests
-
[Fact]
public void OfflineList_SupportedTypes()
{
var datFile = new OfflineList(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void OfflineList_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new OfflineList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.CRCKey,
+ ]));
}
#endregion
#region OpenMSX
- // TODO: Write OpenMSX format tests
-
[Fact]
public void OpenMSX_SupportedTypes()
{
var datFile = new OpenMSX(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void OpenMSX_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new OpenMSX(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
}
#endregion
#region RomCenter
- // TODO: Write RomCenter format tests
-
[Fact]
public void RomCenter_SupportedTypes()
{
var datFile = new RomCenter(null);
var actual = datFile.SupportedTypes;
- Assert.True(actual.SequenceEqual([ItemType.Rom]));
+ Assert.True(actual.SequenceEqual([
+ ItemType.Rom,
+ ]));
+ }
+
+ [Fact]
+ public void RomCenter_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new RomCenter(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.CRCKey,
+ Models.Metadata.Rom.SizeKey,
+ ]));
}
#endregion
#region SabreJSON
- // TODO: Write SabreJSON format tests
-
[Fact]
public void SabreJSON_SupportedTypes()
{
@@ -362,8 +1300,6 @@ namespace SabreTools.DatFiles.Test
#region SabreXML
- // TODO: Write SabreXML format tests
-
[Fact]
public void SabreXML_SupportedTypes()
{
@@ -376,8 +1312,6 @@ namespace SabreTools.DatFiles.Test
#region SeparatedValue
- // TODO: Write SeparatedValue format tests
-
[Fact]
public void CommaSeparatedValue_SupportedTypes()
{
@@ -390,6 +1324,52 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void CommaSeparatedValue_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new CommaSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void CommaSeparatedValue_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new CommaSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void CommaSeparatedValue_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new CommaSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
[Fact]
public void SemicolonSeparatedValue_SupportedTypes()
{
@@ -402,6 +1382,52 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void SemicolonSeparatedValue_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new SemicolonSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void SemicolonSeparatedValue_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new SemicolonSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void SemicolonSeparatedValue_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new SemicolonSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
[Fact]
public void TabSeparatedValue_SupportedTypes()
{
@@ -414,16 +1440,60 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void TabSeparatedValue_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new TabSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Disk.NameKey,
+ Models.Metadata.Disk.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void TabSeparatedValue_GetMissingRequiredFields_Media()
+ {
+ var datItem = new Media();
+ var datFile = new TabSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Media.NameKey,
+ Models.Metadata.Media.SHA1Key,
+ ]));
+ }
+
+ [Fact]
+ public void TabSeparatedValue_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new TabSeparatedValue(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Rom.NameKey,
+ Models.Metadata.Rom.SizeKey,
+ Models.Metadata.Rom.SHA1Key,
+ ]));
+ }
+
#endregion
#region SoftwareList
- // TODO: Write SoftwareList format tests
-
[Fact]
public void SoftwareList_SupportedTypes()
{
- var datFile = new SoftwareList(null);
+ var datFile = new Formats.SoftwareList(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
ItemType.DipSwitch,
@@ -435,6 +1505,86 @@ namespace SabreTools.DatFiles.Test
]));
}
+ [Fact]
+ public void SoftwareList_GetMissingRequiredFields_DipSwitch()
+ {
+ var datItem = new DipSwitch();
+ var datFile = new Formats.SoftwareList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Part.NameKey,
+ Models.Metadata.Part.InterfaceKey,
+ Models.Metadata.DipSwitch.NameKey,
+ Models.Metadata.DipSwitch.TagKey,
+ Models.Metadata.DipSwitch.MaskKey,
+ ]));
+ }
+
+ [Fact]
+ public void SoftwareList_GetMissingRequiredFields_Disk()
+ {
+ var datItem = new Disk();
+ var datFile = new Formats.SoftwareList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Part.NameKey,
+ Models.Metadata.Part.InterfaceKey,
+ Models.Metadata.DiskArea.NameKey,
+ Models.Metadata.Disk.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void SoftwareList_GetMissingRequiredFields_Info()
+ {
+ var datItem = new Info();
+ var datFile = new Formats.SoftwareList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Info.NameKey,
+ ]));
+ }
+
+ [Fact]
+ public void SoftwareList_GetMissingRequiredFields_Rom()
+ {
+ var datItem = new Rom();
+ var datFile = new Formats.SoftwareList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.Part.NameKey,
+ Models.Metadata.Part.InterfaceKey,
+ Models.Metadata.DataArea.NameKey,
+ Models.Metadata.DataArea.SizeKey,
+ ]));
+ }
+
+ [Fact]
+ public void SoftwareList_GetMissingRequiredFields_SharedFeat()
+ {
+ var datItem = new SharedFeat();
+ var datFile = new Formats.SoftwareList(null);
+
+ var actual = datFile.GetMissingRequiredFields(datItem);
+
+ Assert.NotNull(actual);
+ Assert.True(actual.SequenceEqual([
+ Models.Metadata.SharedFeat.NameKey,
+ ]));
+ }
+
#endregion
}
}
\ No newline at end of file
diff --git a/SabreTools.DatFiles/Formats/Hashfile.cs b/SabreTools.DatFiles/Formats/Hashfile.cs
index 00b7a370..33010261 100644
--- a/SabreTools.DatFiles/Formats/Hashfile.cs
+++ b/SabreTools.DatFiles/Formats/Hashfile.cs
@@ -13,14 +13,6 @@ namespace SabreTools.DatFiles.Formats
{
#region Fields
- ///
- public override ItemType[] SupportedTypes
- => [
- ItemType.Disk,
- ItemType.Media,
- ItemType.Rom,
- ];
-
// Private instance variables specific to Hashfile DATs
protected HashType _hash;
@@ -53,167 +45,6 @@ namespace SabreTools.DatFiles.Formats
}
}
- ///
- protected internal override List? GetMissingRequiredFields(DatItem datItem)
- {
- List missingFields = [];
-
- // Check item name
- if (string.IsNullOrEmpty(datItem.GetName()))
- missingFields.Add(Models.Metadata.Rom.NameKey);
-
- // Check hash linked to specific Hashfile type
- switch (_hash)
- {
- case HashType.CRC32:
- case HashType.CRC32_AIXM:
- case HashType.CRC32_AUTOSAR:
- case HashType.CRC32_BASE91D:
- case HashType.CRC32_BZIP2:
- case HashType.CRC32_CDROMEDC:
- case HashType.CRC32_CKSUM:
- case HashType.CRC32_ISCSI:
- case HashType.CRC32_ISOHDLC:
- case HashType.CRC32_JAMCRC:
- case HashType.CRC32_MEF:
- case HashType.CRC32_MPEG2:
- case HashType.CRC32_XFER:
- switch (datItem)
- {
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
- missingFields.Add(Models.Metadata.Rom.CRCKey);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.CRCKey);
- break;
- }
- break;
- case HashType.MD2:
- switch (datItem)
- {
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
- missingFields.Add(Models.Metadata.Rom.MD2Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.MD2Key);
- break;
- }
- break;
- case HashType.MD4:
- switch (datItem)
- {
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
- missingFields.Add(Models.Metadata.Rom.MD4Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.MD4Key);
- break;
- }
- break;
- case HashType.MD5:
- switch (datItem)
- {
- case Disk disk:
- if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)))
- missingFields.Add(Models.Metadata.Disk.MD5Key);
- break;
- case Media medium:
- if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.MD5Key)))
- missingFields.Add(Models.Metadata.Media.MD5Key);
- break;
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
- missingFields.Add(Models.Metadata.Rom.MD5Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.MD5Key);
- break;
- }
- break;
- case HashType.SHA1:
- switch (datItem)
- {
- case Disk disk:
- if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
- missingFields.Add(Models.Metadata.Disk.SHA1Key);
- break;
- case Media medium:
- if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
- missingFields.Add(Models.Metadata.Media.SHA1Key);
- break;
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
- missingFields.Add(Models.Metadata.Rom.SHA1Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.SHA1Key);
- break;
- }
- break;
- case HashType.SHA256:
- switch (datItem)
- {
- case Media medium:
- if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA256Key)))
- missingFields.Add(Models.Metadata.Media.SHA256Key);
- break;
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)))
- missingFields.Add(Models.Metadata.Rom.SHA256Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.SHA256Key);
- break;
- }
- break;
- case HashType.SHA384:
- switch (datItem)
- {
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)))
- missingFields.Add(Models.Metadata.Rom.SHA384Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.SHA384Key);
- break;
- }
- break;
- case HashType.SHA512:
- switch (datItem)
- {
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)))
- missingFields.Add(Models.Metadata.Rom.SHA512Key);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.SHA512Key);
- break;
- }
- break;
- case HashType.SpamSum:
- switch (datItem)
- {
- case Media medium:
- if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)))
- missingFields.Add(Models.Metadata.Media.SpamSumKey);
- break;
- case Rom rom:
- if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)))
- missingFields.Add(Models.Metadata.Rom.SpamSumKey);
- break;
- default:
- missingFields.Add(Models.Metadata.Rom.SpamSumKey);
- break;
- }
- break;
- }
-
- return missingFields;
- }
-
///
public override bool WriteToFile(string outfile, bool ignoreblanks = false, bool throwOnError = false)
{
@@ -224,7 +55,7 @@ namespace SabreTools.DatFiles.Formats
// Serialize the input file
var metadata = ConvertToMetadata(ignoreblanks);
var hashfile = new Serialization.CrossModel.Hashfile().Deserialize(metadata, _hash);
- if (!(Serialization.Serializers.Hashfile.SerializeFile(hashfile, outfile, _hash)))
+ if (!Serialization.Serializers.Hashfile.SerializeFile(hashfile, outfile, _hash))
{
_logger.Warning($"File '{outfile}' could not be written! See the log for more details.");
return false;
@@ -246,6 +77,12 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class SfvFile : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -254,6 +91,26 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.CRC32;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.CRCKey)))
+ missingFields.Add(Models.Metadata.Rom.CRCKey);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -261,6 +118,12 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Md2File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -269,6 +132,26 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.MD2;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD2Key)))
+ missingFields.Add(Models.Metadata.Rom.MD2Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -276,6 +159,12 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Md4File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -284,6 +173,26 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.MD4;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD4Key)))
+ missingFields.Add(Models.Metadata.Rom.MD4Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -291,6 +200,14 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Md5File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Disk,
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -299,6 +216,36 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.MD5;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Disk disk:
+ if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.MD5Key)))
+ missingFields.Add(Models.Metadata.Disk.MD5Key);
+ break;
+
+ case Media medium:
+ if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.MD5Key)))
+ missingFields.Add(Models.Metadata.Media.MD5Key);
+ break;
+
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.MD5Key)))
+ missingFields.Add(Models.Metadata.Rom.MD5Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -306,6 +253,14 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Sha1File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Disk,
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -314,6 +269,36 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.SHA1;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Disk disk:
+ if (string.IsNullOrEmpty(disk.GetStringFieldValue(Models.Metadata.Disk.SHA1Key)))
+ missingFields.Add(Models.Metadata.Disk.SHA1Key);
+ break;
+
+ case Media medium:
+ if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA1Key)))
+ missingFields.Add(Models.Metadata.Media.SHA1Key);
+ break;
+
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA1Key)))
+ missingFields.Add(Models.Metadata.Rom.SHA1Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -321,6 +306,13 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Sha256File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -329,6 +321,31 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.SHA256;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Media medium:
+ if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SHA256Key)))
+ missingFields.Add(Models.Metadata.Media.SHA256Key);
+ break;
+
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA256Key)))
+ missingFields.Add(Models.Metadata.Rom.SHA256Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -336,6 +353,12 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Sha384File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -344,6 +367,26 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.SHA384;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA384Key)))
+ missingFields.Add(Models.Metadata.Rom.SHA384Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -351,6 +394,12 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class Sha512File : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -359,6 +408,26 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.SHA512;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SHA512Key)))
+ missingFields.Add(Models.Metadata.Rom.SHA512Key);
+ break;
+ }
+
+ return missingFields;
+ }
}
///
@@ -366,6 +435,13 @@ namespace SabreTools.DatFiles.Formats
///
public sealed class SpamSumFile : Hashfile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -374,5 +450,30 @@ namespace SabreTools.DatFiles.Formats
{
_hash = HashType.SpamSum;
}
+
+ ///
+ protected internal override List? GetMissingRequiredFields(DatItem datItem)
+ {
+ List missingFields = [];
+
+ // Check item name
+ if (string.IsNullOrEmpty(datItem.GetName()))
+ missingFields.Add(Models.Metadata.Rom.NameKey);
+
+ switch (datItem)
+ {
+ case Media medium:
+ if (string.IsNullOrEmpty(medium.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)))
+ missingFields.Add(Models.Metadata.Media.SpamSumKey);
+ break;
+
+ case Rom rom:
+ if (string.IsNullOrEmpty(rom.GetStringFieldValue(Models.Metadata.Rom.SpamSumKey)))
+ missingFields.Add(Models.Metadata.Rom.SpamSumKey);
+ break;
+ }
+
+ return missingFields;
+ }
}
}
diff --git a/SabreTools.DatFiles/Formats/Listrom.cs b/SabreTools.DatFiles/Formats/Listrom.cs
index fc92b6e5..4971cd5e 100644
--- a/SabreTools.DatFiles/Formats/Listrom.cs
+++ b/SabreTools.DatFiles/Formats/Listrom.cs
@@ -53,7 +53,7 @@ namespace SabreTools.DatFiles.Formats
break;
}
- return null;
+ return missingFields;
}
}
}
diff --git a/SabreTools.DatFiles/Formats/Listxml.cs b/SabreTools.DatFiles/Formats/Listxml.cs
index 179247e4..16082356 100644
--- a/SabreTools.DatFiles/Formats/Listxml.cs
+++ b/SabreTools.DatFiles/Formats/Listxml.cs
@@ -356,7 +356,7 @@ namespace SabreTools.DatFiles.Formats
break;
case Device device:
- if (device.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue() != DeviceType.NULL)
+ if (device.GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue() == DeviceType.NULL)
missingFields.Add(Models.Metadata.Device.DeviceTypeKey);
break;
diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs
index 8c2e04b1..2d3d96e4 100644
--- a/SabreTools.DatFiles/Formats/Logiqx.cs
+++ b/SabreTools.DatFiles/Formats/Logiqx.cs
@@ -228,11 +228,14 @@ namespace SabreTools.DatFiles.Formats
=> [
ItemType.Archive,
ItemType.BiosSet,
+ ItemType.DeviceRef,
ItemType.Disk,
+ ItemType.Driver,
ItemType.Media,
ItemType.Release,
ItemType.Rom,
ItemType.Sample,
+ ItemType.SoftwareList,
];
///
diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.cs b/SabreTools.DatFiles/Formats/SeparatedValue.cs
index 63aa6aa9..2af34e61 100644
--- a/SabreTools.DatFiles/Formats/SeparatedValue.cs
+++ b/SabreTools.DatFiles/Formats/SeparatedValue.cs
@@ -73,6 +73,16 @@ namespace SabreTools.DatFiles.Formats
}
break;
+ case Media media:
+ if (string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.MD5Key))
+ && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA1Key))
+ && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SHA256Key))
+ && string.IsNullOrEmpty(media.GetStringFieldValue(Models.Metadata.Media.SpamSumKey)))
+ {
+ missingFields.Add(Models.Metadata.Media.SHA1Key);
+ }
+ break;
+
case Rom rom:
if (rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) == null || rom.GetInt64FieldValue(Models.Metadata.Rom.SizeKey) < 0)
missingFields.Add(Models.Metadata.Rom.SizeKey);
@@ -102,7 +112,7 @@ namespace SabreTools.DatFiles.Formats
// Serialize the input file
var metadata = ConvertToMetadata(ignoreblanks);
var metadataFile = new Serialization.CrossModel.SeparatedValue().Deserialize(metadata);
- if (!(Serialization.Serializers.SeparatedValue.SerializeFile(metadataFile, outfile, _delim)))
+ if (!Serialization.Serializers.SeparatedValue.SerializeFile(metadataFile, outfile, _delim))
{
_logger.Warning($"File '{outfile}' could not be written! See the log for more details.");
return false;
diff --git a/SabreTools.DatFiles/Formats/SoftwareList.cs b/SabreTools.DatFiles/Formats/SoftwareList.cs
index 7e8a97e3..e18c12b5 100644
--- a/SabreTools.DatFiles/Formats/SoftwareList.cs
+++ b/SabreTools.DatFiles/Formats/SoftwareList.cs
@@ -197,9 +197,6 @@ namespace SabreTools.DatFiles.Formats
if (string.IsNullOrEmpty(sharedFeat.GetName()))
missingFields.Add(Models.Metadata.SharedFeat.NameKey);
break;
- default:
- // Unsupported ItemTypes should be caught already
- return null;
}
return missingFields;