2026-03-24 18:03:01 -04:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using SabreTools.Hashing;
|
|
|
|
|
using SabreTools.Metadata.DatItems;
|
|
|
|
|
using SabreTools.Metadata.DatItems.Formats;
|
|
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
namespace SabreTools.Metadata.DatFiles.Test
|
|
|
|
|
{
|
|
|
|
|
public partial class DatFileTests
|
|
|
|
|
{
|
|
|
|
|
#region ConvertToMetadata
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void ConvertToMetadata_Empty()
|
|
|
|
|
{
|
|
|
|
|
DatFile datFile = new Formats.Logiqx(null, useGame: false);
|
|
|
|
|
|
|
|
|
|
Data.Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
|
|
|
|
|
Assert.Null(actual);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void ConvertToMetadata_FilledHeader()
|
|
|
|
|
{
|
|
|
|
|
DatHeader header = CreateHeader();
|
|
|
|
|
|
|
|
|
|
DatFile datFile = new Formats.Logiqx(null, useGame: false);
|
|
|
|
|
datFile.SetHeader(header);
|
|
|
|
|
datFile.AddItem(new Rom(), statsOnly: false);
|
|
|
|
|
|
|
|
|
|
Data.Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
|
|
|
|
|
Assert.NotNull(actual);
|
|
|
|
|
|
2026-04-04 21:17:28 -04:00
|
|
|
Data.Models.Metadata.Header? actualHeader = actual.Header;
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataHeader(actualHeader);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void ConvertToMetadata_FilledMachine()
|
|
|
|
|
{
|
|
|
|
|
Machine machine = CreateMachine();
|
|
|
|
|
|
|
|
|
|
List<DatItem> datItems =
|
|
|
|
|
[
|
|
|
|
|
CreateAdjuster(machine),
|
|
|
|
|
CreateArchive(machine),
|
|
|
|
|
CreateBiosSet(machine),
|
|
|
|
|
CreateChip(machine),
|
|
|
|
|
CreateConfiguration(machine),
|
|
|
|
|
CreateDevice(machine),
|
|
|
|
|
CreateDeviceRef(machine),
|
|
|
|
|
CreateDipSwitch(machine),
|
|
|
|
|
CreateDipSwitchWithPart(machine),
|
|
|
|
|
CreateDisk(machine),
|
|
|
|
|
CreateDiskWithDiskAreaPart(machine),
|
|
|
|
|
CreateDisplay(machine),
|
|
|
|
|
CreateDriver(machine),
|
|
|
|
|
CreateFeature(machine),
|
|
|
|
|
CreateInfo(machine),
|
|
|
|
|
CreateInput(machine),
|
|
|
|
|
CreateMedia(machine),
|
|
|
|
|
CreatePartFeature(machine),
|
|
|
|
|
CreatePort(machine),
|
|
|
|
|
CreateRamOption(machine),
|
|
|
|
|
CreateRelease(machine),
|
|
|
|
|
CreateRom(machine),
|
|
|
|
|
CreateRomWithDiskAreaPart(machine),
|
|
|
|
|
CreateSample(machine),
|
|
|
|
|
CreateSharedFeat(machine),
|
|
|
|
|
CreateSlot(machine),
|
|
|
|
|
CreateSoftwareList(machine),
|
|
|
|
|
CreateSound(machine),
|
|
|
|
|
CreateVideo(machine),
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
DatFile datFile = new Formats.SabreJSON(null);
|
|
|
|
|
datItems.ForEach(item => datFile.AddItem(item, statsOnly: false));
|
|
|
|
|
|
|
|
|
|
Data.Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
|
|
|
|
|
Assert.NotNull(actual);
|
|
|
|
|
|
2026-04-04 21:17:28 -04:00
|
|
|
Data.Models.Metadata.Machine[]? machines = actual.Machine;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(machines);
|
|
|
|
|
Data.Models.Metadata.Machine actualMachine = Assert.Single(machines);
|
|
|
|
|
ValidateMetadataMachine(actualMachine);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Creation Helpers
|
|
|
|
|
|
|
|
|
|
private static DatHeader CreateHeader()
|
|
|
|
|
{
|
2026-04-04 18:24:58 -04:00
|
|
|
DatHeader item = new DatHeader(CreateMetadataHeader())
|
|
|
|
|
{
|
|
|
|
|
CanOpen = new Data.Models.OfflineList.CanOpen { Extension = ["ext"] },
|
|
|
|
|
Images = new Data.Models.OfflineList.Images() { Height = "height" },
|
|
|
|
|
Infos = new Data.Models.OfflineList.Infos() { Comment = new Data.Models.OfflineList.Comment() },
|
|
|
|
|
NewDat = new Data.Models.OfflineList.NewDat() { DatUrl = new Data.Models.OfflineList.DatUrl() },
|
|
|
|
|
Search = new Data.Models.OfflineList.Search() { To = [] },
|
|
|
|
|
};
|
2026-03-24 18:03:01 -04:00
|
|
|
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Machine CreateMachine()
|
|
|
|
|
{
|
|
|
|
|
Machine item = new Machine(CreateMetadataMachine());
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Adjuster CreateAdjuster(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Adjuster item = new Adjuster(CreateMetadataAdjuster());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Archive CreateArchive(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Archive item = new Archive(CreateMetadataArchive());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static BiosSet CreateBiosSet(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
BiosSet item = new BiosSet(CreateMetadataBiosSet());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Chip CreateChip(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Chip item = new Chip(CreateMetadataChip());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Configuration CreateConfiguration(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Configuration item = new Configuration(CreateMetadataConfiguration());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Device CreateDevice(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Device item = new Device(CreateMetadataDevice());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static DataArea CreateDataArea(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
DataArea item = new DataArea(CreateMetadataDataArea());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static DeviceRef CreateDeviceRef(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
DeviceRef item = new DeviceRef(CreateMetadataDeviceRef());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static DipSwitch CreateDipSwitch(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
DipSwitch item = new DipSwitch(CreateMetadataDipSwitch());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static DipSwitch CreateDipSwitchWithPart(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
DipSwitch item = new DipSwitch(CreateMetadataDipSwitch());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
2026-04-04 00:08:56 -04:00
|
|
|
item.Part = CreatePart(machine);
|
2026-03-24 18:03:01 -04:00
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Disk CreateDisk(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Disk item = new Disk(CreateMetadataDisk());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Disk CreateDiskWithDiskAreaPart(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Disk item = new Disk(CreateMetadataDisk());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
2026-04-04 01:15:40 -04:00
|
|
|
item.DiskArea = CreateDiskArea(machine);
|
|
|
|
|
item.Part = CreatePart(machine);
|
2026-03-24 18:03:01 -04:00
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static DiskArea CreateDiskArea(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
DiskArea item = new DiskArea(CreateMetadataDiskArea());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Display CreateDisplay(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Display item = new Display(CreateMetadataDisplay());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Driver CreateDriver(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Driver item = new Driver(CreateMetadataDriver());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Feature CreateFeature(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Feature item = new Feature(CreateMetadataFeature());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Info CreateInfo(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Info item = new Info(CreateMetadataInfo());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Input CreateInput(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Input item = new Input(CreateMetadataInput());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Media CreateMedia(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Media item = new Media(CreateMetadataMedia());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Part CreatePart(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Part item = new Part(CreateMetadataPart());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static PartFeature CreatePartFeature(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
PartFeature item = new PartFeature(CreateMetadataFeature());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
2026-04-04 11:40:48 -04:00
|
|
|
item.Part = CreatePart(machine);
|
2026-03-24 18:03:01 -04:00
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Port CreatePort(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Port item = new Port(CreateMetadataPort());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static RamOption CreateRamOption(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
RamOption item = new RamOption(CreateMetadataRamOption());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Release CreateRelease(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Release item = new Release(CreateMetadataRelease());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: Create variant that results in a Dump
|
|
|
|
|
private static Rom CreateRom(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Rom item = new Rom(CreateMetadataRom());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Rom CreateRomWithDiskAreaPart(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Rom item = new Rom(CreateMetadataRom());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
2026-04-04 11:40:48 -04:00
|
|
|
item.DataArea = CreateDataArea(machine);
|
|
|
|
|
item.Part = CreatePart(machine);
|
2026-03-24 18:03:01 -04:00
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Sample CreateSample(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Sample item = new Sample(CreateMetadataSample());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static SharedFeat CreateSharedFeat(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
SharedFeat item = new SharedFeat(CreateMetadataSharedFeat());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Slot CreateSlot(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Slot item = new Slot(CreateMetadataSlot());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static SoftwareList CreateSoftwareList(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
SoftwareList item = new SoftwareList(CreateMetadataSoftwareList());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Sound CreateSound(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Sound item = new Sound(CreateMetadataSound());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Display CreateVideo(Machine machine)
|
|
|
|
|
{
|
|
|
|
|
Display item = new Display(CreateMetadataVideo());
|
|
|
|
|
item.CopyMachineInformation(machine);
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Validation Helpers
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataHeader(Data.Models.Metadata.Header? header)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(header);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("author", header.Author);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.BiosMode);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("build", header.Build);
|
2026-04-04 18:24:58 -04:00
|
|
|
Assert.NotNull(header.CanOpen);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("category", header.Category);
|
|
|
|
|
Assert.Equal("comment", header.Comment);
|
|
|
|
|
Assert.Equal("date", header.Date);
|
|
|
|
|
Assert.Equal("datversion", header.DatVersion);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(header.Debug);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("description", header.Description);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("email", header.Email);
|
|
|
|
|
Assert.Equal("emulatorversion", header.EmulatorVersion);
|
2026-04-04 23:13:36 -04:00
|
|
|
Assert.Equal("filename", header.FileName);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.ForceMerging);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.NodumpFlag.Required, header.ForceNodump);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.PackingFlag.Zip, header.ForcePacking);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(header.ForceZipping);
|
2026-04-04 17:58:09 -04:00
|
|
|
Assert.Equal("header", header.HeaderSkipper);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("homepage", header.Homepage);
|
|
|
|
|
Assert.Equal("id", header.Id);
|
2026-04-04 18:24:58 -04:00
|
|
|
Assert.NotNull(header.Images);
|
|
|
|
|
Assert.Equal("imfolder", header.ImFolder);
|
|
|
|
|
Assert.NotNull(header.Infos);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(header.LockBiosMode);
|
|
|
|
|
Assert.True(header.LockRomMode);
|
|
|
|
|
Assert.True(header.LockSampleMode);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("mameconfig", header.MameConfig);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", header.Name);
|
2026-04-04 18:24:58 -04:00
|
|
|
Assert.NotNull(header.NewDat);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("notes", header.Notes);
|
|
|
|
|
Assert.Equal("plugin", header.Plugin);
|
|
|
|
|
Assert.Equal("refname", header.RefName);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.RomMode);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("romtitle", header.RomTitle);
|
|
|
|
|
Assert.Equal("rootdir", header.RootDir);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.MergingFlag.Merged, header.SampleMode);
|
2026-04-04 18:46:35 -04:00
|
|
|
Assert.Equal("schemalocation", header.SchemaLocation);
|
2026-04-04 16:34:13 -04:00
|
|
|
Assert.Equal("screenshotsheight", header.ScreenshotsHeight);
|
|
|
|
|
Assert.Equal("screenshotsWidth", header.ScreenshotsWidth);
|
2026-04-04 18:24:58 -04:00
|
|
|
Assert.NotNull(header.Search);
|
2026-04-02 22:01:42 -04:00
|
|
|
Assert.Equal("system", header.System);
|
|
|
|
|
Assert.Equal("timestamp", header.Timestamp);
|
|
|
|
|
Assert.Equal("type", header.Type);
|
|
|
|
|
Assert.Equal("url", header.Url);
|
|
|
|
|
Assert.Equal("version", header.Version);
|
2026-04-04 17:58:09 -04:00
|
|
|
|
|
|
|
|
string[]? headerRowTitles = header.HeaderRow;
|
|
|
|
|
Assert.NotNull(headerRowTitles);
|
|
|
|
|
string? headerRowTitle = Assert.Single(headerRowTitles);
|
|
|
|
|
Assert.Equal("header", headerRowTitle);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataMachine(Data.Models.Metadata.Machine machine)
|
|
|
|
|
{
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("board", machine.Board);
|
|
|
|
|
Assert.Equal("buttons", machine.Buttons);
|
|
|
|
|
Assert.Equal("cloneof", machine.CloneOf);
|
|
|
|
|
Assert.Equal("cloneofid", machine.CloneOfId);
|
|
|
|
|
Assert.Equal("company", machine.Company);
|
|
|
|
|
Assert.Equal("control", machine.Control);
|
|
|
|
|
Assert.Equal("country", machine.Country);
|
2026-04-08 21:04:11 -04:00
|
|
|
Assert.Equal("crc32", machine.CRC);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("description", machine.Description);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("developer", machine.Developer);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("dirname", machine.DirName);
|
|
|
|
|
Assert.Equal("displaycount", machine.DisplayCount);
|
|
|
|
|
Assert.Equal("displaytype", machine.DisplayType);
|
|
|
|
|
Assert.Equal("duplicateid", machine.DuplicateID);
|
|
|
|
|
Assert.Equal("emulator", machine.Emulator);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("enabled", machine.Enabled);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("extra", machine.Extra);
|
|
|
|
|
Assert.Equal("favorite", machine.Favorite);
|
|
|
|
|
Assert.Equal("genmsxid", machine.GenMSXID);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("genre", machine.Genre);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("history", machine.History);
|
|
|
|
|
Assert.Equal("id", machine.Id);
|
|
|
|
|
Assert.Equal(HashType.CRC32.ZeroString, machine.Im1CRC);
|
|
|
|
|
Assert.Equal(HashType.CRC32.ZeroString, machine.Im2CRC);
|
|
|
|
|
Assert.Equal("imagenumber", machine.ImageNumber);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.Equal(true, machine.IsBios);
|
|
|
|
|
Assert.Equal(true, machine.IsDevice);
|
|
|
|
|
Assert.Equal(true, machine.IsMechanical);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("language", machine.Language);
|
|
|
|
|
Assert.Equal("location", machine.Location);
|
|
|
|
|
Assert.Equal("manufacturer", machine.Manufacturer);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", machine.Name);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("notes", machine.Notes);
|
|
|
|
|
Assert.Equal("playedcount", machine.PlayedCount);
|
|
|
|
|
Assert.Equal("playedtime", machine.PlayedTime);
|
|
|
|
|
Assert.Equal("players", machine.Players);
|
|
|
|
|
Assert.Equal("publisher", machine.Publisher);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("ratings", machine.Ratings);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("rebuildto", machine.RebuildTo);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("relatedto", machine.RelatedTo);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("releasenumber", machine.ReleaseNumber);
|
|
|
|
|
Assert.Equal("romof", machine.RomOf);
|
|
|
|
|
Assert.Equal("rotation", machine.Rotation);
|
2026-04-01 22:06:24 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Runnable.Yes, machine.Runnable);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("sampleof", machine.SampleOf);
|
|
|
|
|
Assert.Equal("savetype", machine.SaveType);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("score", machine.Score);
|
|
|
|
|
Assert.Equal("source", machine.Source);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("sourcefile", machine.SourceFile);
|
|
|
|
|
Assert.Equal("sourcerom", machine.SourceRom);
|
|
|
|
|
Assert.Equal("status", machine.Status);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("subgenre", machine.Subgenre);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Supported.Yes, machine.Supported);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("system", machine.System);
|
|
|
|
|
Assert.Equal("tags", machine.Tags);
|
2026-04-04 15:17:58 -04:00
|
|
|
Assert.Equal("titleid", machine.TitleID);
|
2026-04-03 22:17:31 -04:00
|
|
|
Assert.Equal("year", machine.Year);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Adjuster[]? adjusters = machine.Adjuster;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(adjusters);
|
|
|
|
|
Data.Models.Metadata.Adjuster adjuster = Assert.Single(adjusters);
|
|
|
|
|
ValidateMetadataAdjuster(adjuster);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Archive[]? archives = machine.Archive;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(archives);
|
|
|
|
|
Data.Models.Metadata.Archive archive = Assert.Single(archives);
|
|
|
|
|
ValidateMetadataArchive(archive);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.BiosSet[]? biosSets = machine.BiosSet;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(biosSets);
|
|
|
|
|
Data.Models.Metadata.BiosSet biosSet = Assert.Single(biosSets);
|
|
|
|
|
ValidateMetadataBiosSet(biosSet);
|
|
|
|
|
|
2026-04-04 16:06:07 -04:00
|
|
|
string[]? categories = machine.Category;
|
|
|
|
|
Assert.NotNull(categories);
|
|
|
|
|
string? category = Assert.Single(categories);
|
|
|
|
|
Assert.Equal("category", category);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Chip[]? chips = machine.Chip;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(chips);
|
|
|
|
|
Data.Models.Metadata.Chip chip = Assert.Single(chips);
|
|
|
|
|
ValidateMetadataChip(chip);
|
|
|
|
|
|
2026-04-04 16:06:07 -04:00
|
|
|
string[]? comments = machine.Comment;
|
|
|
|
|
Assert.NotNull(comments);
|
|
|
|
|
string? comment = Assert.Single(comments);
|
|
|
|
|
Assert.Equal("comment", comment);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Configuration[]? configurations = machine.Configuration;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(configurations);
|
|
|
|
|
Data.Models.Metadata.Configuration configuration = Assert.Single(configurations);
|
|
|
|
|
ValidateMetadataConfiguration(configuration);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Device[]? devices = machine.Device;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(devices);
|
|
|
|
|
Data.Models.Metadata.Device device = Assert.Single(devices);
|
|
|
|
|
ValidateMetadataDevice(device);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.DeviceRef[]? deviceRefs = machine.DeviceRef;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(deviceRefs);
|
|
|
|
|
Data.Models.Metadata.DeviceRef deviceRef = Assert.Single(deviceRefs);
|
|
|
|
|
ValidateMetadataDeviceRef(deviceRef);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.DipSwitch[]? dipSwitches = machine.DipSwitch;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dipSwitches);
|
|
|
|
|
Assert.Equal(2, dipSwitches.Length);
|
|
|
|
|
Data.Models.Metadata.DipSwitch dipSwitch = dipSwitches[0];
|
|
|
|
|
ValidateMetadataDipSwitch(dipSwitch);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Disk[]? disks = machine.Disk;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(disks);
|
|
|
|
|
Assert.Equal(2, disks.Length);
|
|
|
|
|
Data.Models.Metadata.Disk disk = disks[0];
|
|
|
|
|
ValidateMetadataDisk(disk);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Display[]? displays = machine.Display;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(displays);
|
|
|
|
|
Assert.Equal(2, displays.Length);
|
2026-04-03 12:31:24 -04:00
|
|
|
Data.Models.Metadata.Display? display = Array.Find(displays, d => d.AspectX == null);
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataDisplay(display);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Driver? driver = machine.Driver;
|
|
|
|
|
Assert.NotNull(driver);
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataDriver(driver);
|
|
|
|
|
|
|
|
|
|
// TODO: Implement this validation
|
2026-04-04 12:21:09 -04:00
|
|
|
// Data.Models.Metadata.Dump[]? dumps = machine.Dump;
|
2026-03-24 18:03:01 -04:00
|
|
|
// Assert.NotNull(dumps);
|
|
|
|
|
// Data.Models.Metadata.Dump dump = Assert.Single(dumps);
|
|
|
|
|
// ValidateMetadataDump(dump);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Feature[]? features = machine.Feature;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(features);
|
|
|
|
|
Assert.Equal(2, features.Length);
|
|
|
|
|
Data.Models.Metadata.Feature feature = features[0];
|
|
|
|
|
ValidateMetadataFeature(feature);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Info[]? infos = machine.Info;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(infos);
|
|
|
|
|
Data.Models.Metadata.Info info = Assert.Single(infos);
|
|
|
|
|
ValidateMetadataInfo(info);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Input? input = machine.Input;
|
|
|
|
|
Assert.NotNull(input);
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataInput(input);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Media[]? media = machine.Media;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(media);
|
|
|
|
|
Data.Models.Metadata.Media medium = Assert.Single(media);
|
|
|
|
|
ValidateMetadataMedia(medium);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Part[]? parts = machine.Part;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(parts);
|
|
|
|
|
Data.Models.Metadata.Part part = Assert.Single(parts);
|
|
|
|
|
ValidateMetadataPart(part);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Port[]? ports = machine.Port;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(ports);
|
|
|
|
|
Data.Models.Metadata.Port port = Assert.Single(ports);
|
|
|
|
|
ValidateMetadataPort(port);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.RamOption[]? ramOptions = machine.RamOption;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(ramOptions);
|
|
|
|
|
Data.Models.Metadata.RamOption ramOption = Assert.Single(ramOptions);
|
|
|
|
|
ValidateMetadataRamOption(ramOption);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Release[]? releases = machine.Release;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(releases);
|
|
|
|
|
Data.Models.Metadata.Release release = Assert.Single(releases);
|
|
|
|
|
ValidateMetadataRelease(release);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Rom[]? roms = machine.Rom;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(roms);
|
|
|
|
|
Assert.Equal(2, roms.Length);
|
|
|
|
|
Data.Models.Metadata.Rom rom = roms[0];
|
|
|
|
|
ValidateMetadataRom(rom);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Sample[]? samples = machine.Sample;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(samples);
|
|
|
|
|
Data.Models.Metadata.Sample sample = Assert.Single(samples);
|
|
|
|
|
ValidateMetadataSample(sample);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.SharedFeat[]? sharedFeats = machine.SharedFeat;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(sharedFeats);
|
|
|
|
|
Data.Models.Metadata.SharedFeat sharedFeat = Assert.Single(sharedFeats);
|
|
|
|
|
ValidateMetadataSharedFeat(sharedFeat);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Slot[]? slots = machine.Slot;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(slots);
|
|
|
|
|
Data.Models.Metadata.Slot slot = Assert.Single(slots);
|
|
|
|
|
ValidateMetadataSlot(slot);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.SoftwareList[]? softwareLists = machine.SoftwareList;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(softwareLists);
|
|
|
|
|
Data.Models.Metadata.SoftwareList softwareList = Assert.Single(softwareLists);
|
|
|
|
|
ValidateMetadataSoftwareList(softwareList);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Sound? sound = machine.Sound;
|
|
|
|
|
Assert.NotNull(sound);
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataSound(sound);
|
|
|
|
|
|
2026-04-04 12:21:09 -04:00
|
|
|
Data.Models.Metadata.Video[]? videos = machine.Video;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(videos);
|
|
|
|
|
Data.Models.Metadata.Video video = Assert.Single(videos);
|
|
|
|
|
ValidateMetadataVideo(video);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataAdjuster(Data.Models.Metadata.Adjuster? adjuster)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(adjuster);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(adjuster.Default);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", adjuster.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-03 23:33:11 -04:00
|
|
|
Data.Models.Metadata.Condition? condition = adjuster.Condition;
|
2026-03-24 18:03:01 -04:00
|
|
|
ValidateMetadataCondition(condition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataAnalog(Data.Models.Metadata.Analog? analog)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(analog);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("mask", analog.Mask);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataArchive(Data.Models.Metadata.Archive? archive)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(archive);
|
2026-04-04 02:18:55 -04:00
|
|
|
Assert.Equal("number", archive.Number);
|
|
|
|
|
Assert.Equal("clone", archive.CloneTag);
|
|
|
|
|
Assert.Equal("regparent", archive.RegParent);
|
|
|
|
|
Assert.Equal("mergeof", archive.MergeOf);
|
|
|
|
|
Assert.Equal("mergename", archive.MergeName);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", archive.Name);
|
2026-04-04 02:18:55 -04:00
|
|
|
Assert.Equal("name_alt", archive.NameAlt);
|
|
|
|
|
Assert.Equal("region", archive.Region);
|
|
|
|
|
Assert.Equal("languages", archive.Languages);
|
|
|
|
|
Assert.Equal(true, archive.ShowLang);
|
|
|
|
|
Assert.Equal("langchecked", archive.LangChecked);
|
|
|
|
|
Assert.Equal("version1", archive.Version1);
|
|
|
|
|
Assert.Equal("version2", archive.Version2);
|
|
|
|
|
Assert.Equal("devstatus", archive.DevStatus);
|
|
|
|
|
Assert.Equal("additional", archive.Additional);
|
|
|
|
|
Assert.Equal("special1", archive.Special1);
|
|
|
|
|
Assert.Equal("special2", archive.Special2);
|
|
|
|
|
Assert.Equal(true, archive.Alt);
|
|
|
|
|
Assert.Equal("gameid1", archive.GameId1);
|
|
|
|
|
Assert.Equal("gameid2", archive.GameId2);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("description", archive.Description);
|
2026-04-04 02:18:55 -04:00
|
|
|
Assert.Equal(true, archive.Bios);
|
|
|
|
|
Assert.Equal(true, archive.Licensed);
|
|
|
|
|
Assert.Equal(true, archive.Pirate);
|
|
|
|
|
Assert.Equal(true, archive.Physical);
|
|
|
|
|
Assert.Equal(true, archive.Complete);
|
|
|
|
|
Assert.Equal(true, archive.Adult);
|
|
|
|
|
Assert.Equal(true, archive.Dat);
|
|
|
|
|
Assert.Equal(true, archive.Listed);
|
|
|
|
|
Assert.Equal(true, archive.Private);
|
|
|
|
|
Assert.Equal("stickynote", archive.StickyNote);
|
|
|
|
|
Assert.Equal("datternote", archive.DatterNote);
|
|
|
|
|
Assert.Equal("categories", archive.Categories);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataBiosSet(Data.Models.Metadata.BiosSet? biosSet)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(biosSet);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(biosSet.Default);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("description", biosSet.Description);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", biosSet.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataChip(Data.Models.Metadata.Chip? chip)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(chip);
|
2026-04-03 10:26:20 -04:00
|
|
|
Assert.Equal(12345, chip.Clock);
|
|
|
|
|
Assert.Equal("flags", chip.Flags);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", chip.Name);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(chip.SoundOnly);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", chip.Tag);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.ChipType);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataCondition(Data.Models.Metadata.Condition? condition)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(condition);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", condition.Value);
|
|
|
|
|
Assert.Equal("mask", condition.Mask);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", condition.Tag);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataConfiguration(Data.Models.Metadata.Configuration? configuration)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(configuration);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("mask", configuration.Mask);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", configuration.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", configuration.Tag);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-03 23:33:11 -04:00
|
|
|
ValidateMetadataCondition(configuration.Condition);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 00:08:56 -04:00
|
|
|
Data.Models.Metadata.ConfLocation[]? confLocations = configuration.ConfLocation;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(confLocations);
|
|
|
|
|
Data.Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations);
|
|
|
|
|
ValidateMetadataConfLocation(confLocation);
|
|
|
|
|
|
2026-04-04 00:08:56 -04:00
|
|
|
Data.Models.Metadata.ConfSetting[]? confSettings = configuration.ConfSetting;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(confSettings);
|
|
|
|
|
Data.Models.Metadata.ConfSetting? confSetting = Assert.Single(confSettings);
|
|
|
|
|
ValidateMetadataConfSetting(confSetting);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataConfLocation(Data.Models.Metadata.ConfLocation? confLocation)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(confLocation);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(confLocation.Inverted);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", confLocation.Name);
|
2026-04-03 10:59:04 -04:00
|
|
|
Assert.Equal(12345, confLocation.Number);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataConfSetting(Data.Models.Metadata.ConfSetting? confSetting)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(confSetting);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(confSetting.Default);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", confSetting.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", confSetting.Value);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-03 23:33:11 -04:00
|
|
|
ValidateMetadataCondition(confSetting.Condition);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataControl(Data.Models.Metadata.Control? control)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(control);
|
2026-04-03 09:46:10 -04:00
|
|
|
Assert.Equal(12345, control.Buttons);
|
|
|
|
|
Assert.Equal(12345, control.KeyDelta);
|
|
|
|
|
Assert.Equal(12345, control.Maximum);
|
|
|
|
|
Assert.Equal(12345, control.Minimum);
|
|
|
|
|
Assert.Equal(12345, control.Player);
|
|
|
|
|
Assert.Equal(12345, control.ReqButtons);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(control.Reverse);
|
2026-04-03 09:46:10 -04:00
|
|
|
Assert.Equal(12345, control.Sensitivity);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.ControlType.Lightgun, control.ControlType);
|
2026-04-03 09:46:10 -04:00
|
|
|
Assert.Equal("ways", control.Ways);
|
|
|
|
|
Assert.Equal("ways2", control.Ways2);
|
|
|
|
|
Assert.Equal("ways3", control.Ways3);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDataArea(Data.Models.Metadata.DataArea? dataArea)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(dataArea);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Endianness.Big, dataArea.Endianness);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", dataArea.Name);
|
2026-04-02 23:45:17 -04:00
|
|
|
Assert.Equal(12345, dataArea.Size);
|
2026-04-03 17:41:36 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Width.Long, dataArea.Width);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.Rom[]? roms = dataArea.Rom;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(roms);
|
|
|
|
|
Data.Models.Metadata.Rom? rom = Assert.Single(roms);
|
|
|
|
|
ValidateMetadataRom(rom);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDevice(Data.Models.Metadata.Device? device)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(device);
|
2026-04-02 14:28:46 -04:00
|
|
|
Assert.Equal("fixedimage", device.FixedImage);
|
|
|
|
|
Assert.Equal("interface", device.Interface);
|
2026-04-02 02:43:29 -04:00
|
|
|
Assert.Equal(true, device.Mandatory);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", device.Tag);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.DeviceType.PunchTape, device.DeviceType);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 00:25:50 -04:00
|
|
|
Data.Models.Metadata.Extension[]? extensions = device.Extension;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(extensions);
|
|
|
|
|
Data.Models.Metadata.Extension? extension = Assert.Single(extensions);
|
|
|
|
|
ValidateMetadataExtension(extension);
|
|
|
|
|
|
2026-04-04 00:25:50 -04:00
|
|
|
ValidateMetadataInstance(device.Instance);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDeviceRef(Data.Models.Metadata.DeviceRef? deviceRef)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(deviceRef);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", deviceRef.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDipLocation(Data.Models.Metadata.DipLocation? dipLocation)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(dipLocation);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(dipLocation.Inverted);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", dipLocation.Name);
|
2026-04-03 11:15:57 -04:00
|
|
|
Assert.Equal(12345, dipLocation.Number);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDipSwitch(Data.Models.Metadata.DipSwitch? dipSwitch)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(dipSwitch);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(dipSwitch.Default);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("mask", dipSwitch.Mask);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", dipSwitch.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", dipSwitch.Tag);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-03 23:33:11 -04:00
|
|
|
ValidateMetadataCondition(dipSwitch.Condition);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 00:08:56 -04:00
|
|
|
Data.Models.Metadata.DipLocation[]? dipLocations = dipSwitch.DipLocation;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dipLocations);
|
|
|
|
|
Data.Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations);
|
|
|
|
|
ValidateMetadataDipLocation(dipLocation);
|
|
|
|
|
|
2026-04-04 00:08:56 -04:00
|
|
|
Data.Models.Metadata.DipValue[]? dipValues = dipSwitch.DipValue;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dipValues);
|
|
|
|
|
Data.Models.Metadata.DipValue? dipValue = Assert.Single(dipValues);
|
|
|
|
|
ValidateMetadataDipValue(dipValue);
|
|
|
|
|
|
2026-04-04 00:08:56 -04:00
|
|
|
string[]? entries = dipSwitch.Entry;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(entries);
|
|
|
|
|
string entry = Assert.Single(entries);
|
|
|
|
|
Assert.Equal("entry", entry);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDipValue(Data.Models.Metadata.DipValue? dipValue)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(dipValue);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(dipValue.Default);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", dipValue.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", dipValue.Value);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-03 23:33:11 -04:00
|
|
|
ValidateMetadataCondition(dipValue.Condition);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDisk(Data.Models.Metadata.Disk? disk)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(disk);
|
2026-04-04 01:15:40 -04:00
|
|
|
Assert.Equal("flags", disk.Flags);
|
|
|
|
|
Assert.Equal(12345, disk.Index);
|
|
|
|
|
Assert.Equal(HashType.MD5.ZeroString, disk.MD5);
|
|
|
|
|
Assert.Equal("merge", disk.Merge);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", disk.Name);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(disk.Optional);
|
2026-04-04 01:15:40 -04:00
|
|
|
Assert.Equal("region", disk.Region);
|
|
|
|
|
Assert.Equal(HashType.SHA1.ZeroString, disk.SHA1);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(disk.Writable);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDiskArea(Data.Models.Metadata.DiskArea? diskArea)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(diskArea);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", diskArea.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.Disk[]? disks = diskArea.Disk;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(disks);
|
|
|
|
|
Data.Models.Metadata.Disk? disk = Assert.Single(disks);
|
|
|
|
|
ValidateMetadataDisk(disk);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDisplay(Data.Models.Metadata.Display? display)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(display);
|
2026-04-03 12:31:24 -04:00
|
|
|
Assert.Null(display.AspectX);
|
|
|
|
|
Assert.Null(display.AspectY);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(display.FlipX);
|
2026-04-03 11:57:30 -04:00
|
|
|
Assert.Equal(12345, display.HBEnd);
|
|
|
|
|
Assert.Equal(12345, display.HBStart);
|
|
|
|
|
Assert.Equal(12345, display.Height);
|
|
|
|
|
Assert.Equal(12345, display.HTotal);
|
|
|
|
|
Assert.Equal(12345, display.PixClock);
|
2026-04-03 00:04:11 -04:00
|
|
|
Assert.Equal(123.45, display.Refresh);
|
2026-04-03 13:08:36 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Rotation.East, display.Rotate);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", display.Tag);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.DisplayType.Vector, display.DisplayType);
|
2026-04-03 11:57:30 -04:00
|
|
|
Assert.Equal(12345, display.VBEnd);
|
|
|
|
|
Assert.Equal(12345, display.VBStart);
|
|
|
|
|
Assert.Equal(12345, display.VTotal);
|
|
|
|
|
Assert.Equal(12345, display.Width);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataDriver(Data.Models.Metadata.Driver? driver)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(driver);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Blit.Plain, driver.Blit);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Cocktail);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Color);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Emulation);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(driver.Incomplete);
|
|
|
|
|
Assert.True(driver.NoSoundHardware);
|
2026-04-03 13:38:26 -04:00
|
|
|
Assert.Equal("palettesize", driver.PaletteSize);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(driver.RequiresArtwork);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Supported.Yes, driver.SaveState);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Sound);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.SupportStatus.Good, driver.Status);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(driver.Unofficial);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataExtension(Data.Models.Metadata.Extension? extension)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(extension);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", extension.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataFeature(Data.Models.Metadata.Feature? feature)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(feature);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", feature.Name);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Overall);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, feature.Status);
|
|
|
|
|
Assert.Equal(Data.Models.Metadata.FeatureType.Protection, feature.FeatureType);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", feature.Value);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataInfo(Data.Models.Metadata.Info? info)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(info);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", info.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", info.Value);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataInput(Data.Models.Metadata.Input? input)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(input);
|
2026-04-03 13:38:26 -04:00
|
|
|
Assert.Equal(12345, input.Buttons);
|
|
|
|
|
Assert.Equal(12345, input.Coins);
|
2026-04-03 22:31:10 -04:00
|
|
|
Assert.Equal("controlattr", input.ControlAttr);
|
2026-04-03 13:38:26 -04:00
|
|
|
Assert.Equal(12345, input.Players);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(input.Service);
|
|
|
|
|
Assert.True(input.Tilt);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 01:28:17 -04:00
|
|
|
Data.Models.Metadata.Control[]? controls = input.Control;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(controls);
|
|
|
|
|
Data.Models.Metadata.Control? control = Assert.Single(controls);
|
|
|
|
|
ValidateMetadataControl(control);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataInstance(Data.Models.Metadata.Instance? instance)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(instance);
|
2026-04-02 14:28:46 -04:00
|
|
|
Assert.Equal("briefname", instance.BriefName);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", instance.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataMedia(Data.Models.Metadata.Media? media)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(media);
|
2026-04-03 19:47:58 -04:00
|
|
|
Assert.Equal(HashType.MD5.ZeroString, media.MD5);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", media.Name);
|
2026-04-03 19:47:58 -04:00
|
|
|
Assert.Equal(HashType.SHA1.ZeroString, media.SHA1);
|
|
|
|
|
Assert.Equal(HashType.SHA256.ZeroString, media.SHA256);
|
|
|
|
|
Assert.Equal(HashType.SpamSum.ZeroString, media.SpamSum);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataPart(Data.Models.Metadata.Part? part)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(part);
|
2026-04-02 14:28:46 -04:00
|
|
|
Assert.Equal("interface", part.Interface);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", part.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.DataArea[]? dataAreas = part.DataArea;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dataAreas);
|
|
|
|
|
Data.Models.Metadata.DataArea? dataArea = Assert.Single(dataAreas);
|
|
|
|
|
ValidateMetadataDataArea(dataArea);
|
|
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.DiskArea[]? diskAreas = part.DiskArea;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(diskAreas);
|
|
|
|
|
Data.Models.Metadata.DiskArea? diskArea = Assert.Single(diskAreas);
|
|
|
|
|
ValidateMetadataDiskArea(diskArea);
|
|
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.DipSwitch[]? dipSwitches = part.DipSwitch;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dipSwitches);
|
|
|
|
|
Data.Models.Metadata.DipSwitch? dipSwitch = Assert.Single(dipSwitches);
|
|
|
|
|
ValidateMetadataDipSwitch(dipSwitch);
|
|
|
|
|
|
2026-04-04 11:40:48 -04:00
|
|
|
Data.Models.Metadata.Feature[]? features = part.Feature;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(features);
|
|
|
|
|
Data.Models.Metadata.Feature? feature = Assert.Single(features);
|
|
|
|
|
ValidateMetadataFeature(feature);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataPort(Data.Models.Metadata.Port? port)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(port);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", port.Tag);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 01:36:42 -04:00
|
|
|
Data.Models.Metadata.Analog[]? dipValues = port.Analog;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(dipValues);
|
|
|
|
|
Data.Models.Metadata.Analog? dipValue = Assert.Single(dipValues);
|
|
|
|
|
ValidateMetadataAnalog(dipValue);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataRamOption(Data.Models.Metadata.RamOption? ramOption)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(ramOption);
|
2026-04-02 14:28:46 -04:00
|
|
|
Assert.Equal("content", ramOption.Content);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(ramOption.Default);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", ramOption.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataRelease(Data.Models.Metadata.Release? release)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(release);
|
2026-04-03 14:02:03 -04:00
|
|
|
Assert.Equal("date", release.Date);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(release.Default);
|
2026-04-03 14:02:03 -04:00
|
|
|
Assert.Equal("language", release.Language);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", release.Name);
|
2026-04-03 14:02:03 -04:00
|
|
|
Assert.Equal("region", release.Region);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
2026-04-01 10:37:25 -04:00
|
|
|
private static void ValidateMetadataReleaseDetails(Data.Models.Metadata.ReleaseDetails? releaseDetails)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(releaseDetails);
|
2026-04-03 19:11:55 -04:00
|
|
|
Assert.Equal("id", releaseDetails.Id);
|
|
|
|
|
Assert.Equal("appendtonumber", releaseDetails.AppendToNumber);
|
|
|
|
|
Assert.Equal("date", releaseDetails.Date);
|
|
|
|
|
Assert.Equal("originalformat", releaseDetails.OriginalFormat);
|
|
|
|
|
Assert.Equal("group", releaseDetails.Group);
|
|
|
|
|
Assert.Equal("dirname", releaseDetails.DirName);
|
|
|
|
|
Assert.Equal("nfoname", releaseDetails.NfoName);
|
|
|
|
|
Assert.Equal("nfosize", releaseDetails.NfoSize);
|
|
|
|
|
Assert.Equal("nfocrc", releaseDetails.NfoCRC);
|
|
|
|
|
Assert.Equal("archivename", releaseDetails.ArchiveName);
|
|
|
|
|
Assert.Equal("rominfo", releaseDetails.RomInfo);
|
|
|
|
|
Assert.Equal("category", releaseDetails.Category);
|
|
|
|
|
Assert.Equal("comment", releaseDetails.Comment);
|
|
|
|
|
Assert.Equal("tool", releaseDetails.Tool);
|
|
|
|
|
Assert.Equal("region", releaseDetails.Region);
|
|
|
|
|
Assert.Equal("origin", releaseDetails.Origin);
|
2026-04-01 10:37:25 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-24 18:03:01 -04:00
|
|
|
private static void ValidateMetadataRom(Data.Models.Metadata.Rom? rom)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(rom);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("album", rom.Album);
|
|
|
|
|
Assert.Equal("alt_romname", rom.AltRomname);
|
|
|
|
|
Assert.Equal("alt_title", rom.AltTitle);
|
|
|
|
|
Assert.Equal("artist", rom.Artist);
|
|
|
|
|
Assert.Equal("asr_detected_lang", rom.ASRDetectedLang);
|
|
|
|
|
Assert.Equal("asr_detected_lang_conf", rom.ASRDetectedLangConf);
|
|
|
|
|
Assert.Equal("asr_transcribed_lang", rom.ASRTranscribedLang);
|
|
|
|
|
Assert.Equal("bios", rom.Bios);
|
|
|
|
|
Assert.Equal("bitrate", rom.Bitrate);
|
|
|
|
|
Assert.Equal("btih", rom.BitTorrentMagnetHash);
|
|
|
|
|
Assert.Equal("cloth_cover_detection_module_version", rom.ClothCoverDetectionModuleVersion);
|
|
|
|
|
Assert.Equal("collection-catalog-number", rom.CollectionCatalogNumber);
|
|
|
|
|
Assert.Equal("comment", rom.Comment);
|
|
|
|
|
Assert.Equal(HashType.CRC16.ZeroString, rom.CRC16);
|
2026-04-06 07:44:19 -04:00
|
|
|
Assert.Equal(HashType.CRC32.ZeroString, rom.CRC32);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal(HashType.CRC64.ZeroString, rom.CRC64);
|
|
|
|
|
Assert.Equal("creator", rom.Creator);
|
|
|
|
|
Assert.Equal("date", rom.Date);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.Dispose);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("extension", rom.Extension);
|
2026-04-03 17:49:45 -04:00
|
|
|
Assert.Equal(12345, rom.FileCount);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.FileIsAvailable);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("flags", rom.Flags);
|
|
|
|
|
Assert.Equal("format", rom.Format);
|
|
|
|
|
Assert.Equal("header", rom.Header);
|
|
|
|
|
Assert.Equal("height", rom.Height);
|
|
|
|
|
Assert.Equal("hocr_char_to_word_hocr_version", rom.hOCRCharToWordhOCRVersion);
|
|
|
|
|
Assert.Equal("hocr_char_to_word_module_version", rom.hOCRCharToWordModuleVersion);
|
|
|
|
|
Assert.Equal("hocr_fts_text_hocr_version", rom.hOCRFtsTexthOCRVersion);
|
|
|
|
|
Assert.Equal("hocr_fts_text_module_version", rom.hOCRFtsTextModuleVersion);
|
|
|
|
|
Assert.Equal("hocr_pageindex_hocr_version", rom.hOCRPageIndexhOCRVersion);
|
|
|
|
|
Assert.Equal("hocr_pageindex_module_version", rom.hOCRPageIndexModuleVersion);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.Inverted);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("mtime", rom.LastModifiedTime);
|
|
|
|
|
Assert.Equal("length", rom.Length);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.LoadFlag.Load16Byte, rom.LoadFlag);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("matrix_number", rom.MatrixNumber);
|
|
|
|
|
Assert.Equal(HashType.MD2.ZeroString, rom.MD2);
|
|
|
|
|
Assert.Equal(HashType.MD4.ZeroString, rom.MD4);
|
|
|
|
|
Assert.Equal(HashType.MD5.ZeroString, rom.MD5);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Null(rom.OpenMSXMediaType); // Omit due to other test
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("type", rom.OpenMSXType);
|
|
|
|
|
Assert.Equal("merge", rom.Merge);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.MIA);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", rom.Name);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("offset", rom.Offset);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.Optional);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("original", rom.Original);
|
|
|
|
|
Assert.Equal("pdf_module_version", rom.PDFModuleVersion);
|
|
|
|
|
Assert.Equal("preview-image", rom.PreviewImage);
|
|
|
|
|
Assert.Equal("publisher", rom.Publisher);
|
|
|
|
|
Assert.Equal("region", rom.Region);
|
|
|
|
|
Assert.Equal("remark", rom.Remark);
|
|
|
|
|
Assert.Equal(HashType.RIPEMD128.ZeroString, rom.RIPEMD128);
|
|
|
|
|
Assert.Equal(HashType.RIPEMD160.ZeroString, rom.RIPEMD160);
|
|
|
|
|
Assert.Equal("rotation", rom.Rotation);
|
|
|
|
|
Assert.Equal("serial", rom.Serial);
|
|
|
|
|
Assert.Equal(HashType.SHA1.ZeroString, rom.SHA1);
|
|
|
|
|
Assert.Equal(HashType.SHA256.ZeroString, rom.SHA256);
|
|
|
|
|
Assert.Equal(HashType.SHA384.ZeroString, rom.SHA384);
|
|
|
|
|
Assert.Equal(HashType.SHA512.ZeroString, rom.SHA512);
|
2026-04-02 23:45:17 -04:00
|
|
|
Assert.Equal(12345, rom.Size);
|
2026-04-01 21:59:16 -04:00
|
|
|
Assert.True(rom.SoundOnly);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("source", rom.Source);
|
|
|
|
|
Assert.Equal(HashType.SpamSum.ZeroString, rom.SpamSum);
|
|
|
|
|
Assert.Equal("start", rom.Start);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("summation", rom.Summation);
|
|
|
|
|
Assert.Equal("ocr", rom.TesseractOCR);
|
|
|
|
|
Assert.Equal("ocr_converted", rom.TesseractOCRConverted);
|
|
|
|
|
Assert.Equal("ocr_detected_lang", rom.TesseractOCRDetectedLang);
|
|
|
|
|
Assert.Equal("ocr_detected_lang_conf", rom.TesseractOCRDetectedLangConf);
|
|
|
|
|
Assert.Equal("ocr_detected_script", rom.TesseractOCRDetectedScript);
|
|
|
|
|
Assert.Equal("ocr_detected_script_conf", rom.TesseractOCRDetectedScriptConf);
|
|
|
|
|
Assert.Equal("ocr_module_version", rom.TesseractOCRModuleVersion);
|
|
|
|
|
Assert.Equal("ocr_parameters", rom.TesseractOCRParameters);
|
|
|
|
|
Assert.Equal("title", rom.Title);
|
|
|
|
|
Assert.Equal("track", rom.Track);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", rom.Value);
|
2026-04-04 22:31:23 -04:00
|
|
|
Assert.Equal("whisper_asr_module_version", rom.WhisperASRModuleVersion);
|
|
|
|
|
Assert.Equal("whisper_model_hash", rom.WhisperModelHash);
|
|
|
|
|
Assert.Equal("whisper_model_name", rom.WhisperModelName);
|
|
|
|
|
Assert.Equal("whisper_version", rom.WhisperVersion);
|
|
|
|
|
Assert.Equal("width", rom.Width);
|
|
|
|
|
Assert.Equal("word_conf_0_10", rom.WordConfidenceInterval0To10);
|
|
|
|
|
Assert.Equal("word_conf_11_20", rom.WordConfidenceInterval11To20);
|
|
|
|
|
Assert.Equal("word_conf_21_30", rom.WordConfidenceInterval21To30);
|
|
|
|
|
Assert.Equal("word_conf_31_40", rom.WordConfidenceInterval31To40);
|
|
|
|
|
Assert.Equal("word_conf_41_50", rom.WordConfidenceInterval41To50);
|
|
|
|
|
Assert.Equal("word_conf_51_60", rom.WordConfidenceInterval51To60);
|
|
|
|
|
Assert.Equal("word_conf_61_70", rom.WordConfidenceInterval61To70);
|
|
|
|
|
Assert.Equal("word_conf_71_80", rom.WordConfidenceInterval71To80);
|
|
|
|
|
Assert.Equal("word_conf_81_90", rom.WordConfidenceInterval81To90);
|
|
|
|
|
Assert.Equal("word_conf_91_100", rom.WordConfidenceInterval91To100);
|
|
|
|
|
Assert.Equal(HashType.XxHash3.ZeroString, rom.xxHash364);
|
|
|
|
|
Assert.Equal(HashType.XxHash128.ZeroString, rom.xxHash3128);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataSample(Data.Models.Metadata.Sample? sample)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(sample);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", sample.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
2026-04-01 10:37:25 -04:00
|
|
|
private static void ValidateMetadataSerials(Data.Models.Metadata.Serials? serials)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(serials);
|
2026-04-03 18:50:04 -04:00
|
|
|
Assert.Equal("boxbarcode", serials.BoxBarcode);
|
|
|
|
|
Assert.Equal("boxserial", serials.BoxSerial);
|
|
|
|
|
Assert.Equal("chipserial", serials.ChipSerial);
|
|
|
|
|
Assert.Equal("digitalserial1", serials.DigitalSerial1);
|
|
|
|
|
Assert.Equal("digitalserial2", serials.DigitalSerial2);
|
|
|
|
|
Assert.Equal("lockoutserial", serials.LockoutSerial);
|
|
|
|
|
Assert.Equal("mediaserial1", serials.MediaSerial1);
|
|
|
|
|
Assert.Equal("mediaserial2", serials.MediaSerial2);
|
|
|
|
|
Assert.Equal("mediaserial3", serials.MediaSerial3);
|
|
|
|
|
Assert.Equal("mediastamp", serials.MediaStamp);
|
|
|
|
|
Assert.Equal("pcbserial", serials.PCBSerial);
|
|
|
|
|
Assert.Equal("romchipserial1", serials.RomChipSerial1);
|
|
|
|
|
Assert.Equal("romchipserial2", serials.RomChipSerial2);
|
|
|
|
|
Assert.Equal("savechipserial", serials.SaveChipSerial);
|
2026-04-01 10:37:25 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-24 18:03:01 -04:00
|
|
|
private static void ValidateMetadataSharedFeat(Data.Models.Metadata.SharedFeat? sharedFeat)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(sharedFeat);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", sharedFeat.Name);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("value", sharedFeat.Value);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataSlot(Data.Models.Metadata.Slot? slot)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(slot);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", slot.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
|
2026-04-04 01:46:00 -04:00
|
|
|
Data.Models.Metadata.SlotOption[]? slotOptions = slot.SlotOption;
|
2026-03-24 18:03:01 -04:00
|
|
|
Assert.NotNull(slotOptions);
|
|
|
|
|
Data.Models.Metadata.SlotOption? slotOption = Assert.Single(slotOptions);
|
|
|
|
|
ValidateMetadataSlotOption(slotOption);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataSlotOption(Data.Models.Metadata.SlotOption? slotOption)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(slotOption);
|
2026-04-01 16:52:55 -04:00
|
|
|
Assert.True(slotOption.Default);
|
2026-04-02 14:28:46 -04:00
|
|
|
Assert.Equal("devname", slotOption.DevName);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", slotOption.Name);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataSoftwareList(Data.Models.Metadata.SoftwareList? softwareList)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(softwareList);
|
2026-04-03 16:02:44 -04:00
|
|
|
Assert.Equal("filter", softwareList.Filter);
|
2026-04-01 13:18:45 -04:00
|
|
|
Assert.Equal("name", softwareList.Name);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.SoftwareListStatus.Original, softwareList.Status);
|
2026-04-02 11:18:49 -04:00
|
|
|
Assert.Equal("tag", softwareList.Tag);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void ValidateMetadataSound(Data.Models.Metadata.Sound? sound)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(sound);
|
2026-04-02 22:45:33 -04:00
|
|
|
Assert.Equal(12345, sound.Channels);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
2026-04-01 10:37:25 -04:00
|
|
|
private static void ValidateMetadataSourceDetails(Data.Models.Metadata.SourceDetails? sourceDetails)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(sourceDetails);
|
2026-04-03 18:31:31 -04:00
|
|
|
Assert.Equal("appendtonumber", sourceDetails.AppendToNumber);
|
|
|
|
|
Assert.Equal("comment1", sourceDetails.Comment1);
|
|
|
|
|
Assert.Equal("comment2", sourceDetails.Comment2);
|
|
|
|
|
Assert.Equal("dumpdate", sourceDetails.DumpDate);
|
|
|
|
|
Assert.Equal(true, sourceDetails.DumpDateInfo);
|
|
|
|
|
Assert.Equal("dumper", sourceDetails.Dumper);
|
|
|
|
|
Assert.Equal("id", sourceDetails.Id);
|
|
|
|
|
Assert.Equal("link1", sourceDetails.Link1);
|
|
|
|
|
Assert.Equal(true, sourceDetails.Link1Public);
|
|
|
|
|
Assert.Equal("link2", sourceDetails.Link2);
|
|
|
|
|
Assert.Equal(true, sourceDetails.Link2Public);
|
|
|
|
|
Assert.Equal("link3", sourceDetails.Link3);
|
|
|
|
|
Assert.Equal(true, sourceDetails.Link3Public);
|
|
|
|
|
Assert.Equal("mediatitle", sourceDetails.MediaTitle);
|
|
|
|
|
Assert.Equal(true, sourceDetails.Nodump);
|
|
|
|
|
Assert.Equal("origin", sourceDetails.Origin);
|
|
|
|
|
Assert.Equal("originalformat", sourceDetails.OriginalFormat);
|
|
|
|
|
Assert.Equal("project", sourceDetails.Project);
|
|
|
|
|
Assert.Equal("region", sourceDetails.Region);
|
|
|
|
|
Assert.Equal("releasedate", sourceDetails.ReleaseDate);
|
|
|
|
|
Assert.Equal(true, sourceDetails.ReleaseDateInfo);
|
|
|
|
|
Assert.Equal("rominfo", sourceDetails.RomInfo);
|
|
|
|
|
Assert.Equal("section", sourceDetails.Section);
|
|
|
|
|
Assert.Equal("tool", sourceDetails.Tool);
|
2026-04-01 10:37:25 -04:00
|
|
|
}
|
|
|
|
|
|
2026-03-24 18:03:01 -04:00
|
|
|
private static void ValidateMetadataVideo(Data.Models.Metadata.Video? video)
|
|
|
|
|
{
|
|
|
|
|
Assert.NotNull(video);
|
2026-04-03 12:31:24 -04:00
|
|
|
Assert.Equal(12345, video.AspectX);
|
|
|
|
|
Assert.Equal(12345, video.AspectY);
|
|
|
|
|
Assert.Equal(12345, video.Height);
|
2026-04-03 13:08:36 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.Rotation.East, video.Orientation);
|
2026-04-03 00:04:11 -04:00
|
|
|
Assert.Equal(123.45, video.Refresh);
|
2026-04-02 02:18:08 -04:00
|
|
|
Assert.Equal(Data.Models.Metadata.DisplayType.Vector, video.Screen);
|
2026-04-03 12:31:24 -04:00
|
|
|
Assert.Equal(12345, video.Width);
|
2026-03-24 18:03:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|