Finish writing ConvertToMetadata and making fixes related

This commit is contained in:
Matt Nadareski
2025-01-11 23:03:32 -05:00
parent 1763796f9f
commit 41ab9826a3
4 changed files with 294 additions and 237 deletions

View File

@@ -453,7 +453,7 @@ namespace SabreTools.DatFiles.Test
[Models.Metadata.Device.FixedImageKey] = "fixedimage", [Models.Metadata.Device.FixedImageKey] = "fixedimage",
[Models.Metadata.Device.InstanceKey] = CreateMetadataInstance(), [Models.Metadata.Device.InstanceKey] = CreateMetadataInstance(),
[Models.Metadata.Device.InterfaceKey] = "interface", [Models.Metadata.Device.InterfaceKey] = "interface",
[Models.Metadata.Device.MandatoryKey] = 1, [Models.Metadata.Device.MandatoryKey] = 1L,
[Models.Metadata.Device.TagKey] = "tag", [Models.Metadata.Device.TagKey] = "tag",
[Models.Metadata.Device.DeviceTypeKey] = "punchtape", [Models.Metadata.Device.DeviceTypeKey] = "punchtape",
}; };

View File

@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using SabreTools.Core;
using SabreTools.DatItems; using SabreTools.DatItems;
using SabreTools.DatItems.Formats; using SabreTools.DatItems.Formats;
using SabreTools.Hashing; using SabreTools.Hashing;
@@ -79,7 +81,7 @@ namespace SabreTools.DatFiles.Test
Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata(); Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata();
Assert.NotNull(actual); Assert.NotNull(actual);
Models.Metadata.Machine[]? machines = actual.Read<Models.Metadata.Machine[]>(Models.Metadata.MetadataFile.MachineKey); Models.Metadata.Machine[]? machines = actual.ReadItemArray<Models.Metadata.Machine>(Models.Metadata.MetadataFile.MachineKey);
Assert.NotNull(machines); Assert.NotNull(machines);
Models.Metadata.Machine actualMachine = Assert.Single(machines); Models.Metadata.Machine actualMachine = Assert.Single(machines);
ValidateMetadataMachine(actualMachine); ValidateMetadataMachine(actualMachine);
@@ -418,7 +420,6 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("version", header.ReadString(Models.Metadata.Header.VersionKey)); Assert.Equal("version", header.ReadString(Models.Metadata.Header.VersionKey));
} }
// TODO: Add reading all item types here
private static void ValidateMetadataMachine(Models.Metadata.Machine machine) private static void ValidateMetadataMachine(Models.Metadata.Machine machine)
{ {
Assert.Equal("board", machine.ReadString(Models.Metadata.Machine.BoardKey)); Assert.Equal("board", machine.ReadString(Models.Metadata.Machine.BoardKey));
@@ -471,105 +472,149 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("tags", machine.ReadString(Models.Metadata.Machine.TagsKey)); Assert.Equal("tags", machine.ReadString(Models.Metadata.Machine.TagsKey));
Assert.Equal("year", machine.ReadString(Models.Metadata.Machine.YearKey)); Assert.Equal("year", machine.ReadString(Models.Metadata.Machine.YearKey));
Models.Metadata.Adjuster[]? adjusters = machine.Read<Models.Metadata.Adjuster[]>(Models.Metadata.Machine.AdjusterKey); Models.Metadata.Adjuster[]? adjusters = machine.ReadItemArray<Models.Metadata.Adjuster>(Models.Metadata.Machine.AdjusterKey);
Assert.NotNull(adjusters); Assert.NotNull(adjusters);
Models.Metadata.Adjuster adjuster = Assert.Single(adjusters); Models.Metadata.Adjuster adjuster = Assert.Single(adjusters);
ValidateMetadataAdjuster(adjuster); ValidateMetadataAdjuster(adjuster);
Models.Metadata.Archive[]? archives = machine.Read<Models.Metadata.Archive[]>(Models.Metadata.Machine.ArchiveKey); Models.Metadata.Archive[]? archives = machine.ReadItemArray<Models.Metadata.Archive>(Models.Metadata.Machine.ArchiveKey);
Assert.NotNull(archives); Assert.NotNull(archives);
Models.Metadata.Archive archive = Assert.Single(archives); Models.Metadata.Archive archive = Assert.Single(archives);
ValidateMetadataArchive(archive); ValidateMetadataArchive(archive);
Models.Metadata.BiosSet[]? biosSets = machine.Read<Models.Metadata.BiosSet[]>(Models.Metadata.Machine.BiosSetKey); Models.Metadata.BiosSet[]? biosSets = machine.ReadItemArray<Models.Metadata.BiosSet>(Models.Metadata.Machine.BiosSetKey);
Assert.NotNull(biosSets); Assert.NotNull(biosSets);
Models.Metadata.BiosSet biosSet = Assert.Single(biosSets); Models.Metadata.BiosSet biosSet = Assert.Single(biosSets);
ValidateMetadataBiosSet(biosSet); ValidateMetadataBiosSet(biosSet);
Models.Metadata.Chip[]? chips = machine.Read<Models.Metadata.Chip[]>(Models.Metadata.Machine.ChipKey); Models.Metadata.Chip[]? chips = machine.ReadItemArray<Models.Metadata.Chip>(Models.Metadata.Machine.ChipKey);
Assert.NotNull(chips); Assert.NotNull(chips);
Models.Metadata.Chip chip = Assert.Single(chips); Models.Metadata.Chip chip = Assert.Single(chips);
ValidateMetadataChip(chip); ValidateMetadataChip(chip);
Models.Metadata.Configuration[]? configurations = machine.Read<Models.Metadata.Configuration[]>(Models.Metadata.Machine.ConfigurationKey); Models.Metadata.Configuration[]? configurations = machine.ReadItemArray<Models.Metadata.Configuration>(Models.Metadata.Machine.ConfigurationKey);
Assert.NotNull(configurations); Assert.NotNull(configurations);
Models.Metadata.Configuration configuration = Assert.Single(configurations); Models.Metadata.Configuration configuration = Assert.Single(configurations);
ValidateMetadataConfiguration(configuration); ValidateMetadataConfiguration(configuration);
Models.Metadata.Device[]? devices = machine.Read<Models.Metadata.Device[]>(Models.Metadata.Machine.DeviceKey); Models.Metadata.Device[]? devices = machine.ReadItemArray<Models.Metadata.Device>(Models.Metadata.Machine.DeviceKey);
Assert.NotNull(devices); Assert.NotNull(devices);
Models.Metadata.Device device = Assert.Single(devices); Models.Metadata.Device device = Assert.Single(devices);
ValidateMetadataDevice(device); ValidateMetadataDevice(device);
Models.Metadata.DeviceRef[]? deviceRefs = machine.Read<Models.Metadata.DeviceRef[]>(Models.Metadata.Machine.DeviceRefKey); Models.Metadata.DeviceRef[]? deviceRefs = machine.ReadItemArray<Models.Metadata.DeviceRef>(Models.Metadata.Machine.DeviceRefKey);
Assert.NotNull(deviceRefs); Assert.NotNull(deviceRefs);
Models.Metadata.DeviceRef deviceRef = Assert.Single(deviceRefs); Models.Metadata.DeviceRef deviceRef = Assert.Single(deviceRefs);
ValidateMetadataDeviceRef(deviceRef); ValidateMetadataDeviceRef(deviceRef);
Models.Metadata.DipSwitch[]? dipSwitches = machine.Read<Models.Metadata.DipSwitch[]>(Models.Metadata.Machine.DipSwitchKey); Models.Metadata.DipSwitch[]? dipSwitches = machine.ReadItemArray<Models.Metadata.DipSwitch>(Models.Metadata.Machine.DipSwitchKey);
Assert.NotNull(dipSwitches); Assert.NotNull(dipSwitches);
Models.Metadata.DipSwitch dipSwitch = Assert.Single(dipSwitches); Assert.Equal(2, dipSwitches.Length);
Models.Metadata.DipSwitch dipSwitch = dipSwitches[0];
ValidateMetadataDipSwitch(dipSwitch); ValidateMetadataDipSwitch(dipSwitch);
Models.Metadata.Disk[]? disks = machine.Read<Models.Metadata.Disk[]>(Models.Metadata.Machine.DiskKey); Models.Metadata.Disk[]? disks = machine.ReadItemArray<Models.Metadata.Disk>(Models.Metadata.Machine.DiskKey);
Assert.NotNull(disks); Assert.NotNull(disks);
Models.Metadata.Disk disk = Assert.Single(disks); Assert.Equal(2, disks.Length);
Models.Metadata.Disk disk = disks[0];
ValidateMetadataDisk(disk); ValidateMetadataDisk(disk);
Models.Metadata.Display[]? displays = machine.Read<Models.Metadata.Display[]>(Models.Metadata.Machine.DisplayKey); Models.Metadata.Display[]? displays = machine.ReadItemArray<Models.Metadata.Display>(Models.Metadata.Machine.DisplayKey);
Assert.NotNull(displays); Assert.NotNull(displays);
Models.Metadata.Display display = Assert.Single(displays); Assert.Equal(2, displays.Length);
Models.Metadata.Display? display = Array.Find(displays, d => !d.ContainsKey(Models.Metadata.Video.AspectXKey));
ValidateMetadataDisplay(display); ValidateMetadataDisplay(display);
Models.Metadata.Driver? driver = machine.Read<Models.Metadata.Driver>(Models.Metadata.Machine.DriverKey); Models.Metadata.Driver[]? drivers = machine.ReadItemArray<Models.Metadata.Driver>(Models.Metadata.Machine.DriverKey);
Assert.NotNull(drivers);
Models.Metadata.Driver driver = Assert.Single(drivers);
ValidateMetadataDriver(driver); ValidateMetadataDriver(driver);
// TODO: Implement this validation // TODO: Implement this validation
// Models.Metadata.Dump[]? dumps = machine.Read<Models.Metadata.Dump[]>(Models.Metadata.Machine.DumpKey); // Models.Metadata.Dump[]? dumps = machine.ReadItemArray<Models.Metadata.Dump>(Models.Metadata.Machine.DumpKey);
// Assert.NotNull(dumps); // Assert.NotNull(dumps);
// Models.Metadata.Dump dump = Assert.Single(dumps); // Models.Metadata.Dump dump = Assert.Single(dumps);
// ValidateMetadataDump(dump); // ValidateMetadataDump(dump);
Models.Metadata.Feature[]? features = machine.Read<Models.Metadata.Feature[]>(Models.Metadata.Machine.FeatureKey); Models.Metadata.Feature[]? features = machine.ReadItemArray<Models.Metadata.Feature>(Models.Metadata.Machine.FeatureKey);
Assert.NotNull(features); Assert.NotNull(features);
Models.Metadata.Feature feature = Assert.Single(features); Assert.Equal(2, features.Length);
Models.Metadata.Feature feature = features[0];
ValidateMetadataFeature(feature); ValidateMetadataFeature(feature);
Models.Metadata.Info[]? infos = machine.Read<Models.Metadata.Info[]>(Models.Metadata.Machine.InfoKey); Models.Metadata.Info[]? infos = machine.ReadItemArray<Models.Metadata.Info>(Models.Metadata.Machine.InfoKey);
Assert.NotNull(infos); Assert.NotNull(infos);
Models.Metadata.Info info = Assert.Single(infos); Models.Metadata.Info info = Assert.Single(infos);
ValidateMetadataInfo(info); ValidateMetadataInfo(info);
Models.Metadata.Input? input = machine.Read<Models.Metadata.Input>(Models.Metadata.Machine.InputKey); Models.Metadata.Input[]? inputs = machine.ReadItemArray<Models.Metadata.Input>(Models.Metadata.Machine.InputKey);
Assert.NotNull(inputs);
Models.Metadata.Input input = Assert.Single(inputs);
ValidateMetadataInput(input); ValidateMetadataInput(input);
Models.Metadata.Media[]? media = machine.Read<Models.Metadata.Media[]>(Models.Metadata.Machine.MediaKey); Models.Metadata.Media[]? media = machine.ReadItemArray<Models.Metadata.Media>(Models.Metadata.Machine.MediaKey);
Assert.NotNull(media); Assert.NotNull(media);
Models.Metadata.Media medium = Assert.Single(media); Models.Metadata.Media medium = Assert.Single(media);
ValidateMetadataMedia(medium); ValidateMetadataMedia(medium);
Models.Metadata.Part[]? parts = machine.Read<Models.Metadata.Part[]>(Models.Metadata.Machine.PartKey); Models.Metadata.Part[]? parts = machine.ReadItemArray<Models.Metadata.Part>(Models.Metadata.Machine.PartKey);
Assert.NotNull(parts); Assert.NotNull(parts);
Models.Metadata.Part part = Assert.Single(parts); Models.Metadata.Part part = Assert.Single(parts);
ValidateMetadataPart(part); ValidateMetadataPart(part);
Models.Metadata.Port[]? ports = machine.Read<Models.Metadata.Port[]>(Models.Metadata.Machine.PortKey); Models.Metadata.Port[]? ports = machine.ReadItemArray<Models.Metadata.Port>(Models.Metadata.Machine.PortKey);
Assert.NotNull(ports); Assert.NotNull(ports);
Models.Metadata.Port port = Assert.Single(ports); Models.Metadata.Port port = Assert.Single(ports);
ValidateMetadataPort(port); ValidateMetadataPort(port);
Models.Metadata.RamOption[]? ramOptions = machine.Read<Models.Metadata.RamOption[]>(Models.Metadata.Machine.RamOptionKey); Models.Metadata.RamOption[]? ramOptions = machine.ReadItemArray<Models.Metadata.RamOption>(Models.Metadata.Machine.RamOptionKey);
Assert.NotNull(ramOptions); Assert.NotNull(ramOptions);
Models.Metadata.RamOption ramOption = Assert.Single(ramOptions); Models.Metadata.RamOption ramOption = Assert.Single(ramOptions);
ValidateMetadataRamOption(ramOption); ValidateMetadataRamOption(ramOption);
Models.Metadata.Release[]? releases = machine.Read<Models.Metadata.Release[]>(Models.Metadata.Machine.ReleaseKey); Models.Metadata.Release[]? releases = machine.ReadItemArray<Models.Metadata.Release>(Models.Metadata.Machine.ReleaseKey);
Assert.NotNull(releases); Assert.NotNull(releases);
Models.Metadata.Release release = Assert.Single(releases); Models.Metadata.Release release = Assert.Single(releases);
ValidateMetadataRelease(release); ValidateMetadataRelease(release);
Models.Metadata.Rom[]? roms = machine.ReadItemArray<Models.Metadata.Rom>(Models.Metadata.Machine.RomKey);
Assert.NotNull(roms);
Assert.Equal(2, roms.Length);
Models.Metadata.Rom rom = roms[0];
ValidateMetadataRom(rom);
Models.Metadata.Sample[]? samples = machine.ReadItemArray<Models.Metadata.Sample>(Models.Metadata.Machine.SampleKey);
Assert.NotNull(samples);
Models.Metadata.Sample sample = Assert.Single(samples);
ValidateMetadataSample(sample);
Models.Metadata.SharedFeat[]? sharedFeats = machine.ReadItemArray<Models.Metadata.SharedFeat>(Models.Metadata.Machine.SharedFeatKey);
Assert.NotNull(sharedFeats);
Models.Metadata.SharedFeat sharedFeat = Assert.Single(sharedFeats);
ValidateMetadataSharedFeat(sharedFeat);
Models.Metadata.Slot[]? slots = machine.ReadItemArray<Models.Metadata.Slot>(Models.Metadata.Machine.SlotKey);
Assert.NotNull(slots);
Models.Metadata.Slot slot = Assert.Single(slots);
ValidateMetadataSlot(slot);
Models.Metadata.SoftwareList[]? softwareLists = machine.ReadItemArray<Models.Metadata.SoftwareList>(Models.Metadata.Machine.SoftwareListKey);
Assert.NotNull(softwareLists);
Models.Metadata.SoftwareList softwareList = Assert.Single(softwareLists);
ValidateMetadataSoftwareList(softwareList);
Models.Metadata.Sound[]? sounds = machine.ReadItemArray<Models.Metadata.Sound>(Models.Metadata.Machine.SoundKey);
Assert.NotNull(sounds);
Models.Metadata.Sound sound = Assert.Single(sounds);
ValidateMetadataSound(sound);
Models.Logiqx.Trurip? trurip = machine.Read<Models.Logiqx.Trurip>(Models.Metadata.Machine.TruripKey); Models.Logiqx.Trurip? trurip = machine.Read<Models.Logiqx.Trurip>(Models.Metadata.Machine.TruripKey);
ValidateMetadataTrurip(trurip); ValidateMetadataTrurip(trurip);
Models.Metadata.Video[]? videos = machine.ReadItemArray<Models.Metadata.Video>(Models.Metadata.Machine.VideoKey);
Assert.NotNull(videos);
Models.Metadata.Video video = Assert.Single(videos);
ValidateMetadataVideo(video);
} }
private static void ValidateMetadataAdjuster(Models.Metadata.Adjuster? adjuster) private static void ValidateMetadataAdjuster(Models.Metadata.Adjuster? adjuster)
@@ -632,12 +677,12 @@ namespace SabreTools.DatFiles.Test
Models.Metadata.Condition? condition = configuration.Read<Models.Metadata.Condition>(Models.Metadata.Configuration.ConditionKey); Models.Metadata.Condition? condition = configuration.Read<Models.Metadata.Condition>(Models.Metadata.Configuration.ConditionKey);
ValidateMetadataCondition(condition); ValidateMetadataCondition(condition);
Models.Metadata.ConfLocation[]? confLocations = configuration.Read<Models.Metadata.ConfLocation[]>(Models.Metadata.Configuration.ConfLocationKey); Models.Metadata.ConfLocation[]? confLocations = configuration.ReadItemArray<Models.Metadata.ConfLocation>(Models.Metadata.Configuration.ConfLocationKey);
Assert.NotNull(confLocations); Assert.NotNull(confLocations);
Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations); Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations);
ValidateMetadataConfLocation(confLocation); ValidateMetadataConfLocation(confLocation);
Models.Metadata.ConfSetting[]? confSettings = configuration.Read<Models.Metadata.ConfSetting[]>(Models.Metadata.Configuration.ConfSettingKey); Models.Metadata.ConfSetting[]? confSettings = configuration.ReadItemArray<Models.Metadata.ConfSetting>(Models.Metadata.Configuration.ConfSettingKey);
Assert.NotNull(confSettings); Assert.NotNull(confSettings);
Models.Metadata.ConfSetting? confSetting = Assert.Single(confSettings); Models.Metadata.ConfSetting? confSetting = Assert.Single(confSettings);
ValidateMetadataConfSetting(confSetting); ValidateMetadataConfSetting(confSetting);
@@ -679,14 +724,19 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("ways3", control.ReadString(Models.Metadata.Control.Ways3Key)); Assert.Equal("ways3", control.ReadString(Models.Metadata.Control.Ways3Key));
} }
// private static void ValidateMetadataDataArea(DataArea? dataArea) private static void ValidateMetadataDataArea(Models.Metadata.DataArea? dataArea)
// { {
// Assert.NotNull(dataArea); Assert.NotNull(dataArea);
// Assert.Equal("big", dataArea.ReadString(Models.Metadata.DataArea.EndiannessKey)); Assert.Equal("big", dataArea.ReadString(Models.Metadata.DataArea.EndiannessKey));
// Assert.Equal("name", dataArea.ReadString(Models.Metadata.DataArea.NameKey)); Assert.Equal("name", dataArea.ReadString(Models.Metadata.DataArea.NameKey));
// Assert.Equal(12345, dataArea.ReadLong(Models.Metadata.DataArea.SizeKey)); Assert.Equal(12345, dataArea.ReadLong(Models.Metadata.DataArea.SizeKey));
// Assert.Equal(64, dataArea.ReadLong(Models.Metadata.DataArea.WidthKey)); Assert.Equal(64, dataArea.ReadLong(Models.Metadata.DataArea.WidthKey));
// }
Models.Metadata.Rom[]? roms = dataArea.ReadItemArray<Models.Metadata.Rom>(Models.Metadata.DataArea.RomKey);
Assert.NotNull(roms);
Models.Metadata.Rom? rom = Assert.Single(roms);
ValidateMetadataRom(rom);
}
private static void ValidateMetadataDevice(Models.Metadata.Device? device) private static void ValidateMetadataDevice(Models.Metadata.Device? device)
{ {
@@ -697,7 +747,7 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("tag", device.ReadString(Models.Metadata.Device.TagKey)); Assert.Equal("tag", device.ReadString(Models.Metadata.Device.TagKey));
Assert.Equal("punchtape", device.ReadString(Models.Metadata.Device.DeviceTypeKey)); Assert.Equal("punchtape", device.ReadString(Models.Metadata.Device.DeviceTypeKey));
Models.Metadata.Extension[]? extensions = device.Read<Models.Metadata.Extension[]>(Models.Metadata.Device.ExtensionKey); Models.Metadata.Extension[]? extensions = device.ReadItemArray<Models.Metadata.Extension>(Models.Metadata.Device.ExtensionKey);
Assert.NotNull(extensions); Assert.NotNull(extensions);
Models.Metadata.Extension? extension = Assert.Single(extensions); Models.Metadata.Extension? extension = Assert.Single(extensions);
ValidateMetadataExtension(extension); ValidateMetadataExtension(extension);
@@ -731,12 +781,12 @@ namespace SabreTools.DatFiles.Test
Models.Metadata.Condition? condition = dipSwitch.Read<Models.Metadata.Condition>(Models.Metadata.DipSwitch.ConditionKey); Models.Metadata.Condition? condition = dipSwitch.Read<Models.Metadata.Condition>(Models.Metadata.DipSwitch.ConditionKey);
ValidateMetadataCondition(condition); ValidateMetadataCondition(condition);
Models.Metadata.DipLocation[]? dipLocations = dipSwitch.Read<Models.Metadata.DipLocation[]>(Models.Metadata.DipSwitch.DipLocationKey); Models.Metadata.DipLocation[]? dipLocations = dipSwitch.ReadItemArray<Models.Metadata.DipLocation>(Models.Metadata.DipSwitch.DipLocationKey);
Assert.NotNull(dipLocations); Assert.NotNull(dipLocations);
Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations); Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations);
ValidateMetadataDipLocation(dipLocation); ValidateMetadataDipLocation(dipLocation);
Models.Metadata.DipValue[]? dipValues = dipSwitch.Read<Models.Metadata.DipValue[]>(Models.Metadata.DipSwitch.DipValueKey); Models.Metadata.DipValue[]? dipValues = dipSwitch.ReadItemArray<Models.Metadata.DipValue>(Models.Metadata.DipSwitch.DipValueKey);
Assert.NotNull(dipValues); Assert.NotNull(dipValues);
Models.Metadata.DipValue? dipValue = Assert.Single(dipValues); Models.Metadata.DipValue? dipValue = Assert.Single(dipValues);
ValidateMetadataDipValue(dipValue); ValidateMetadataDipValue(dipValue);
@@ -772,11 +822,16 @@ namespace SabreTools.DatFiles.Test
Assert.True(disk.ReadBool(Models.Metadata.Disk.WritableKey)); Assert.True(disk.ReadBool(Models.Metadata.Disk.WritableKey));
} }
// private static void ValidateMetadataDiskArea(Models.Metadata.DiskArea? diskArea) private static void ValidateMetadataDiskArea(Models.Metadata.DiskArea? diskArea)
// { {
// Assert.NotNull(diskArea); Assert.NotNull(diskArea);
// Assert.Equal("name", diskArea.ReadString(Models.Metadata.DiskArea.NameKey)); Assert.Equal("name", diskArea.ReadString(Models.Metadata.DiskArea.NameKey));
// }
Models.Metadata.Disk[]? disks = diskArea.ReadItemArray<Models.Metadata.Disk>(Models.Metadata.DiskArea.DiskKey);
Assert.NotNull(disks);
Models.Metadata.Disk? disk = Assert.Single(disks);
ValidateMetadataDisk(disk);
}
private static void ValidateMetadataDisplay(Models.Metadata.Display? display) private static void ValidateMetadataDisplay(Models.Metadata.Display? display)
{ {
@@ -846,7 +901,7 @@ namespace SabreTools.DatFiles.Test
Assert.True(input.ReadBool(Models.Metadata.Input.ServiceKey)); Assert.True(input.ReadBool(Models.Metadata.Input.ServiceKey));
Assert.True(input.ReadBool(Models.Metadata.Input.TiltKey)); Assert.True(input.ReadBool(Models.Metadata.Input.TiltKey));
Models.Metadata.Control[]? controls = input.Read<Models.Metadata.Control[]>(Models.Metadata.Input.ControlKey); Models.Metadata.Control[]? controls = input.ReadItemArray<Models.Metadata.Control>(Models.Metadata.Input.ControlKey);
Assert.NotNull(controls); Assert.NotNull(controls);
Models.Metadata.Control? control = Assert.Single(controls); Models.Metadata.Control? control = Assert.Single(controls);
ValidateMetadataControl(control); ValidateMetadataControl(control);
@@ -869,33 +924,39 @@ namespace SabreTools.DatFiles.Test
Assert.Equal(ZeroHash.SpamSumStr, media.ReadString(Models.Metadata.Media.SpamSumKey)); Assert.Equal(ZeroHash.SpamSumStr, media.ReadString(Models.Metadata.Media.SpamSumKey));
} }
// TODO: Ensure type arrays are validated
private static void ValidateMetadataPart(Models.Metadata.Part? part) private static void ValidateMetadataPart(Models.Metadata.Part? part)
{ {
Assert.NotNull(part); Assert.NotNull(part);
Assert.Equal("interface", part.ReadString(Models.Metadata.Part.InterfaceKey)); Assert.Equal("interface", part.ReadString(Models.Metadata.Part.InterfaceKey));
Assert.Equal("name", part.ReadString(Models.Metadata.Part.NameKey)); Assert.Equal("name", part.ReadString(Models.Metadata.Part.NameKey));
Models.Metadata.DataArea[]? dataAreas = part.ReadItemArray<Models.Metadata.DataArea>(Models.Metadata.Part.DataAreaKey);
Assert.NotNull(dataAreas);
Models.Metadata.DataArea? dataArea = Assert.Single(dataAreas);
ValidateMetadataDataArea(dataArea);
Models.Metadata.DiskArea[]? diskAreas = part.ReadItemArray<Models.Metadata.DiskArea>(Models.Metadata.Part.DiskAreaKey);
Assert.NotNull(diskAreas);
Models.Metadata.DiskArea? diskArea = Assert.Single(diskAreas);
ValidateMetadataDiskArea(diskArea);
Models.Metadata.DipSwitch[]? dipSwitches = part.ReadItemArray<Models.Metadata.DipSwitch>(Models.Metadata.Part.DipSwitchKey);
Assert.NotNull(dipSwitches);
Models.Metadata.DipSwitch? dipSwitch = Assert.Single(dipSwitches);
ValidateMetadataDipSwitch(dipSwitch);
Models.Metadata.Feature[]? features = part.ReadItemArray<Models.Metadata.Feature>(Models.Metadata.Part.FeatureKey);
Assert.NotNull(features);
Models.Metadata.Feature? feature = Assert.Single(features);
ValidateMetadataFeature(feature);
} }
// private static void ValidateMetadataPartFeature(Models.Metadata.PartFeature? partFeature)
// {
// Assert.NotNull(partFeature);
// Assert.Equal("name", partFeature.ReadString(Models.Metadata.Feature.NameKey));
// Assert.Equal("imperfect", partFeature.ReadString(Models.Metadata.Feature.OverallKey));
// Assert.Equal("imperfect", partFeature.ReadString(Models.Metadata.Feature.StatusKey));
// Assert.Equal("protection", partFeature.ReadString(Models.Metadata.Feature.FeatureTypeKey));
// Assert.Equal("value", partFeature.ReadString(Models.Metadata.Feature.ValueKey));
// Part? part = partFeature.Read<Part>(PartFeature.PartKey);
// ValidateMetadataPart(part);
// }
private static void ValidateMetadataPort(Models.Metadata.Port? port) private static void ValidateMetadataPort(Models.Metadata.Port? port)
{ {
Assert.NotNull(port); Assert.NotNull(port);
Assert.Equal("tag", port.ReadString(Models.Metadata.Port.TagKey)); Assert.Equal("tag", port.ReadString(Models.Metadata.Port.TagKey));
Models.Metadata.Analog[]? dipValues = port.Read<Models.Metadata.Analog[]>(Models.Metadata.Port.AnalogKey); Models.Metadata.Analog[]? dipValues = port.ReadItemArray<Models.Metadata.Analog>(Models.Metadata.Port.AnalogKey);
Assert.NotNull(dipValues); Assert.NotNull(dipValues);
Models.Metadata.Analog? dipValue = Assert.Single(dipValues); Models.Metadata.Analog? dipValue = Assert.Single(dipValues);
ValidateMetadataAnalog(dipValue); ValidateMetadataAnalog(dipValue);
@@ -919,152 +980,153 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("region", release.ReadString(Models.Metadata.Release.RegionKey)); Assert.Equal("region", release.ReadString(Models.Metadata.Release.RegionKey));
} }
// private static void ValidateMetadataRom(Models.Metadata.Rom? rom) private static void ValidateMetadataRom(Models.Metadata.Rom? rom)
// { {
// Assert.NotNull(rom); Assert.NotNull(rom);
// Assert.Equal("album", rom.ReadString(Models.Metadata.Rom.AlbumKey)); Assert.Equal("album", rom.ReadString(Models.Metadata.Rom.AlbumKey));
// Assert.Equal("alt_romname", rom.ReadString(Models.Metadata.Rom.AltRomnameKey)); Assert.Equal("alt_romname", rom.ReadString(Models.Metadata.Rom.AltRomnameKey));
// Assert.Equal("alt_title", rom.ReadString(Models.Metadata.Rom.AltTitleKey)); Assert.Equal("alt_title", rom.ReadString(Models.Metadata.Rom.AltTitleKey));
// Assert.Equal("artist", rom.ReadString(Models.Metadata.Rom.ArtistKey)); Assert.Equal("artist", rom.ReadString(Models.Metadata.Rom.ArtistKey));
// Assert.Equal("asr_detected_lang", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangKey)); Assert.Equal("asr_detected_lang", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangKey));
// Assert.Equal("asr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangConfKey)); Assert.Equal("asr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangConfKey));
// Assert.Equal("asr_transcribed_lang", rom.ReadString(Models.Metadata.Rom.ASRTranscribedLangKey)); Assert.Equal("asr_transcribed_lang", rom.ReadString(Models.Metadata.Rom.ASRTranscribedLangKey));
// Assert.Equal("bios", rom.ReadString(Models.Metadata.Rom.BiosKey)); Assert.Equal("bios", rom.ReadString(Models.Metadata.Rom.BiosKey));
// Assert.Equal("bitrate", rom.ReadString(Models.Metadata.Rom.BitrateKey)); Assert.Equal("bitrate", rom.ReadString(Models.Metadata.Rom.BitrateKey));
// Assert.Equal("btih", rom.ReadString(Models.Metadata.Rom.BitTorrentMagnetHashKey)); Assert.Equal("btih", rom.ReadString(Models.Metadata.Rom.BitTorrentMagnetHashKey));
// Assert.Equal("cloth_cover_detection_module_version", rom.ReadString(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey)); Assert.Equal("cloth_cover_detection_module_version", rom.ReadString(Models.Metadata.Rom.ClothCoverDetectionModuleVersionKey));
// Assert.Equal("collection-catalog-number", rom.ReadString(Models.Metadata.Rom.CollectionCatalogNumberKey)); Assert.Equal("collection-catalog-number", rom.ReadString(Models.Metadata.Rom.CollectionCatalogNumberKey));
// Assert.Equal("comment", rom.ReadString(Models.Metadata.Rom.CommentKey)); Assert.Equal("comment", rom.ReadString(Models.Metadata.Rom.CommentKey));
// Assert.Equal(ZeroHash.CRC32Str, rom.ReadString(Models.Metadata.Rom.CRCKey)); Assert.Equal(ZeroHash.CRC32Str, rom.ReadString(Models.Metadata.Rom.CRCKey));
// Assert.Equal("creator", rom.ReadString(Models.Metadata.Rom.CreatorKey)); Assert.Equal("creator", rom.ReadString(Models.Metadata.Rom.CreatorKey));
// Assert.Equal("date", rom.ReadString(Models.Metadata.Rom.DateKey)); Assert.Equal("date", rom.ReadString(Models.Metadata.Rom.DateKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.DisposeKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.DisposeKey));
// Assert.Equal("extension", rom.ReadString(Models.Metadata.Rom.ExtensionKey)); Assert.Equal("extension", rom.ReadString(Models.Metadata.Rom.ExtensionKey));
// Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.FileCountKey)); Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.FileCountKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.FileIsAvailableKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.FileIsAvailableKey));
// Assert.Equal("flags", rom.ReadString(Models.Metadata.Rom.FlagsKey)); Assert.Equal("flags", rom.ReadString(Models.Metadata.Rom.FlagsKey));
// Assert.Equal("format", rom.ReadString(Models.Metadata.Rom.FormatKey)); Assert.Equal("format", rom.ReadString(Models.Metadata.Rom.FormatKey));
// Assert.Equal("header", rom.ReadString(Models.Metadata.Rom.HeaderKey)); Assert.Equal("header", rom.ReadString(Models.Metadata.Rom.HeaderKey));
// Assert.Equal("height", rom.ReadString(Models.Metadata.Rom.HeightKey)); Assert.Equal("height", rom.ReadString(Models.Metadata.Rom.HeightKey));
// Assert.Equal("hocr_char_to_word_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey)); Assert.Equal("hocr_char_to_word_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordhOCRVersionKey));
// Assert.Equal("hocr_char_to_word_module_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey)); Assert.Equal("hocr_char_to_word_module_version", rom.ReadString(Models.Metadata.Rom.hOCRCharToWordModuleVersionKey));
// Assert.Equal("hocr_fts_text_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey)); Assert.Equal("hocr_fts_text_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTexthOCRVersionKey));
// Assert.Equal("hocr_fts_text_module_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey)); Assert.Equal("hocr_fts_text_module_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey));
// Assert.Equal("hocr_pageindex_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey)); Assert.Equal("hocr_pageindex_hocr_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexhOCRVersionKey));
// Assert.Equal("hocr_pageindex_module_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey)); Assert.Equal("hocr_pageindex_module_version", rom.ReadString(Models.Metadata.Rom.hOCRPageIndexModuleVersionKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.InvertedKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.InvertedKey));
// Assert.Equal("mtime", rom.ReadString(Models.Metadata.Rom.LastModifiedTimeKey)); Assert.Equal("mtime", rom.ReadString(Models.Metadata.Rom.LastModifiedTimeKey));
// Assert.Equal("length", rom.ReadString(Models.Metadata.Rom.LengthKey)); Assert.Equal("length", rom.ReadString(Models.Metadata.Rom.LengthKey));
// Assert.Equal("load16_byte", rom.ReadString(Models.Metadata.Rom.LoadFlagKey)); Assert.Equal("load16_byte", rom.ReadString(Models.Metadata.Rom.LoadFlagKey));
// Assert.Equal("matrix_number", rom.ReadString(Models.Metadata.Rom.MatrixNumberKey)); Assert.Equal("matrix_number", rom.ReadString(Models.Metadata.Rom.MatrixNumberKey));
// Assert.Equal(ZeroHash.GetString(HashType.MD2), rom.ReadString(Models.Metadata.Rom.MD2Key)); Assert.Equal(ZeroHash.GetString(HashType.MD2), rom.ReadString(Models.Metadata.Rom.MD2Key));
// Assert.Equal(ZeroHash.GetString(HashType.MD4), rom.ReadString(Models.Metadata.Rom.MD4Key)); Assert.Equal(ZeroHash.GetString(HashType.MD4), rom.ReadString(Models.Metadata.Rom.MD4Key));
// Assert.Equal(ZeroHash.MD5Str, rom.ReadString(Models.Metadata.Rom.MD5Key)); Assert.Equal(ZeroHash.MD5Str, rom.ReadString(Models.Metadata.Rom.MD5Key));
// Assert.Null(rom.ReadString(Models.Metadata.Rom.OpenMSXMediaType)); // Omit due to other test Assert.Null(rom.ReadString(Models.Metadata.Rom.OpenMSXMediaType)); // Omit due to other test
// Assert.Equal("merge", rom.ReadString(Models.Metadata.Rom.MergeKey)); Assert.Equal("merge", rom.ReadString(Models.Metadata.Rom.MergeKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.MIAKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.MIAKey));
// Assert.Equal("name", rom.ReadString(Models.Metadata.Rom.NameKey)); Assert.Equal("name", rom.ReadString(Models.Metadata.Rom.NameKey));
// Assert.Equal("ocr", rom.ReadString(Models.Metadata.Rom.TesseractOCRKey)); Assert.Equal("ocr", rom.ReadString(Models.Metadata.Rom.TesseractOCRKey));
// Assert.Equal("ocr_converted", rom.ReadString(Models.Metadata.Rom.TesseractOCRConvertedKey)); Assert.Equal("ocr_converted", rom.ReadString(Models.Metadata.Rom.TesseractOCRConvertedKey));
// Assert.Equal("ocr_detected_lang", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangKey)); Assert.Equal("ocr_detected_lang", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangKey));
// Assert.Equal("ocr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey)); Assert.Equal("ocr_detected_lang_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey));
// Assert.Equal("ocr_detected_script", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptKey)); Assert.Equal("ocr_detected_script", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptKey));
// Assert.Equal("ocr_detected_script_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey)); Assert.Equal("ocr_detected_script_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedScriptConfKey));
// Assert.Equal("ocr_module_version", rom.ReadString(Models.Metadata.Rom.TesseractOCRModuleVersionKey)); Assert.Equal("ocr_module_version", rom.ReadString(Models.Metadata.Rom.TesseractOCRModuleVersionKey));
// Assert.Equal("ocr_parameters", rom.ReadString(Models.Metadata.Rom.TesseractOCRParametersKey)); Assert.Equal("ocr_parameters", rom.ReadString(Models.Metadata.Rom.TesseractOCRParametersKey));
// Assert.Equal("offset", rom.ReadString(Models.Metadata.Rom.OffsetKey)); Assert.Equal("offset", rom.ReadString(Models.Metadata.Rom.OffsetKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.OptionalKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.OptionalKey));
// Assert.Equal("original", rom.ReadString(Models.Metadata.Rom.OriginalKey)); Assert.Equal("original", rom.ReadString(Models.Metadata.Rom.OriginalKey));
// Assert.Equal("pdf_module_version", rom.ReadString(Models.Metadata.Rom.PDFModuleVersionKey)); Assert.Equal("pdf_module_version", rom.ReadString(Models.Metadata.Rom.PDFModuleVersionKey));
// Assert.Equal("preview-image", rom.ReadString(Models.Metadata.Rom.PreviewImageKey)); Assert.Equal("preview-image", rom.ReadString(Models.Metadata.Rom.PreviewImageKey));
// Assert.Equal("publisher", rom.ReadString(Models.Metadata.Rom.PublisherKey)); Assert.Equal("publisher", rom.ReadString(Models.Metadata.Rom.PublisherKey));
// Assert.Equal("region", rom.ReadString(Models.Metadata.Rom.RegionKey)); Assert.Equal("region", rom.ReadString(Models.Metadata.Rom.RegionKey));
// Assert.Equal("remark", rom.ReadString(Models.Metadata.Rom.RemarkKey)); Assert.Equal("remark", rom.ReadString(Models.Metadata.Rom.RemarkKey));
// Assert.Equal("rotation", rom.ReadString(Models.Metadata.Rom.RotationKey)); Assert.Equal("rotation", rom.ReadString(Models.Metadata.Rom.RotationKey));
// Assert.Equal("serial", rom.ReadString(Models.Metadata.Rom.SerialKey)); Assert.Equal("serial", rom.ReadString(Models.Metadata.Rom.SerialKey));
// Assert.Equal(ZeroHash.SHA1Str, rom.ReadString(Models.Metadata.Rom.SHA1Key)); Assert.Equal(ZeroHash.SHA1Str, rom.ReadString(Models.Metadata.Rom.SHA1Key));
// Assert.Equal(ZeroHash.SHA256Str, rom.ReadString(Models.Metadata.Rom.SHA256Key)); Assert.Equal(ZeroHash.SHA256Str, rom.ReadString(Models.Metadata.Rom.SHA256Key));
// Assert.Equal(ZeroHash.SHA384Str, rom.ReadString(Models.Metadata.Rom.SHA384Key)); Assert.Equal(ZeroHash.SHA384Str, rom.ReadString(Models.Metadata.Rom.SHA384Key));
// Assert.Equal(ZeroHash.SHA512Str, rom.ReadString(Models.Metadata.Rom.SHA512Key)); Assert.Equal(ZeroHash.SHA512Str, rom.ReadString(Models.Metadata.Rom.SHA512Key));
// Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.SizeKey)); Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.SizeKey));
// Assert.True(rom.ReadBool(Models.Metadata.Rom.SoundOnlyKey)); Assert.True(rom.ReadBool(Models.Metadata.Rom.SoundOnlyKey));
// Assert.Equal("source", rom.ReadString(Models.Metadata.Rom.SourceKey)); Assert.Equal("source", rom.ReadString(Models.Metadata.Rom.SourceKey));
// Assert.Equal(ZeroHash.SpamSumStr, rom.ReadString(Models.Metadata.Rom.SpamSumKey)); Assert.Equal(ZeroHash.SpamSumStr, rom.ReadString(Models.Metadata.Rom.SpamSumKey));
// Assert.Equal("start", rom.ReadString(Models.Metadata.Rom.StartKey)); Assert.Equal("start", rom.ReadString(Models.Metadata.Rom.StartKey));
// Assert.Equal("good", rom.ReadString(Models.Metadata.Rom.StatusKey)); Assert.Equal("good", rom.ReadString(Models.Metadata.Rom.StatusKey));
// Assert.Equal("summation", rom.ReadString(Models.Metadata.Rom.SummationKey)); Assert.Equal("summation", rom.ReadString(Models.Metadata.Rom.SummationKey));
// Assert.Equal("title", rom.ReadString(Models.Metadata.Rom.TitleKey)); Assert.Equal("title", rom.ReadString(Models.Metadata.Rom.TitleKey));
// Assert.Equal("track", rom.ReadString(Models.Metadata.Rom.TrackKey)); Assert.Equal("track", rom.ReadString(Models.Metadata.Rom.TrackKey));
// Assert.Equal("type", rom.ReadString(Models.Metadata.Rom.OpenMSXType)); Assert.Equal("type", rom.ReadString(Models.Metadata.Rom.OpenMSXType));
// Assert.Equal("value", rom.ReadString(Models.Metadata.Rom.ValueKey)); Assert.Equal("value", rom.ReadString(Models.Metadata.Rom.ValueKey));
// Assert.Equal("whisper_asr_module_version", rom.ReadString(Models.Metadata.Rom.WhisperASRModuleVersionKey)); Assert.Equal("whisper_asr_module_version", rom.ReadString(Models.Metadata.Rom.WhisperASRModuleVersionKey));
// Assert.Equal("whisper_model_hash", rom.ReadString(Models.Metadata.Rom.WhisperModelHashKey)); Assert.Equal("whisper_model_hash", rom.ReadString(Models.Metadata.Rom.WhisperModelHashKey));
// Assert.Equal("whisper_model_name", rom.ReadString(Models.Metadata.Rom.WhisperModelNameKey)); Assert.Equal("whisper_model_name", rom.ReadString(Models.Metadata.Rom.WhisperModelNameKey));
// Assert.Equal("whisper_version", rom.ReadString(Models.Metadata.Rom.WhisperVersionKey)); Assert.Equal("whisper_version", rom.ReadString(Models.Metadata.Rom.WhisperVersionKey));
// Assert.Equal("width", rom.ReadString(Models.Metadata.Rom.WidthKey)); Assert.Equal("width", rom.ReadString(Models.Metadata.Rom.WidthKey));
// Assert.Equal("word_conf_0_10", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval0To10Key)); Assert.Equal("word_conf_0_10", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval0To10Key));
// Assert.Equal("word_conf_11_20", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval11To20Key)); Assert.Equal("word_conf_11_20", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval11To20Key));
// Assert.Equal("word_conf_21_30", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval21To30Key)); Assert.Equal("word_conf_21_30", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval21To30Key));
// Assert.Equal("word_conf_31_40", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval31To40Key)); Assert.Equal("word_conf_31_40", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval31To40Key));
// Assert.Equal("word_conf_41_50", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval41To50Key)); Assert.Equal("word_conf_41_50", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval41To50Key));
// Assert.Equal("word_conf_51_60", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval51To60Key)); Assert.Equal("word_conf_51_60", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval51To60Key));
// Assert.Equal("word_conf_61_70", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval61To70Key)); Assert.Equal("word_conf_61_70", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval61To70Key));
// Assert.Equal("word_conf_71_80", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval71To80Key)); Assert.Equal("word_conf_71_80", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval71To80Key));
// Assert.Equal("word_conf_81_90", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval81To90Key)); Assert.Equal("word_conf_81_90", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval81To90Key));
// Assert.Equal("word_conf_91_100", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval91To100Key)); Assert.Equal("word_conf_91_100", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval91To100Key));
// Assert.Equal(ZeroHash.GetString(HashType.XxHash3), rom.ReadString(Models.Metadata.Rom.xxHash364Key)); Assert.Equal(ZeroHash.GetString(HashType.XxHash3), rom.ReadString(Models.Metadata.Rom.xxHash364Key));
// Assert.Equal(ZeroHash.GetString(HashType.XxHash128), rom.ReadString(Models.Metadata.Rom.xxHash3128Key)); Assert.Equal(ZeroHash.GetString(HashType.XxHash128), rom.ReadString(Models.Metadata.Rom.xxHash3128Key));
// } }
// private static void ValidateMetadataSample(Models.Metadata.Sample? sample) private static void ValidateMetadataSample(Models.Metadata.Sample? sample)
// { {
// Assert.NotNull(sample); Assert.NotNull(sample);
// Assert.Equal("name", sample.ReadString(Models.Metadata.Sample.NameKey)); Assert.Equal("name", sample.ReadString(Models.Metadata.Sample.NameKey));
// } }
// private static void ValidateMetadataSharedFeat(Models.Metadata.SharedFeat? sharedFeat) private static void ValidateMetadataSharedFeat(Models.Metadata.SharedFeat? sharedFeat)
// { {
// Assert.NotNull(sharedFeat); Assert.NotNull(sharedFeat);
// Assert.Equal("name", sharedFeat.ReadString(Models.Metadata.SharedFeat.NameKey)); Assert.Equal("name", sharedFeat.ReadString(Models.Metadata.SharedFeat.NameKey));
// Assert.Equal("value", sharedFeat.ReadString(Models.Metadata.SharedFeat.ValueKey)); Assert.Equal("value", sharedFeat.ReadString(Models.Metadata.SharedFeat.ValueKey));
// } }
// private static void ValidateMetadataSlot(Models.Metadata.Slot? slot) private static void ValidateMetadataSlot(Models.Metadata.Slot? slot)
// { {
// Assert.NotNull(slot); Assert.NotNull(slot);
// Assert.Equal("name", slot.ReadString(Models.Metadata.Slot.NameKey)); Assert.Equal("name", slot.ReadString(Models.Metadata.Slot.NameKey));
// SlotOption[]? slotOptions = slot.Read<SlotOption[]>(Models.Metadata.Slot.SlotOptionKey); Models.Metadata.SlotOption[]? slotOptions = slot.ReadItemArray<Models.Metadata.SlotOption>(Models.Metadata.Slot.SlotOptionKey);
// Assert.NotNull(slotOptions); Assert.NotNull(slotOptions);
// SlotOption? slotOption = Assert.Single(slotOptions); Models.Metadata.SlotOption? slotOption = Assert.Single(slotOptions);
// ValidateMetadataSlotOption(slotOption); ValidateMetadataSlotOption(slotOption);
// } }
// private static void ValidateMetadataSlotOption(Models.Metadata.SlotOption? slotOption) private static void ValidateMetadataSlotOption(Models.Metadata.SlotOption? slotOption)
// { {
// Assert.NotNull(slotOption); Assert.NotNull(slotOption);
// Assert.True(slotOption.ReadBool(Models.Metadata.SlotOption.DefaultKey)); Assert.True(slotOption.ReadBool(Models.Metadata.SlotOption.DefaultKey));
// Assert.Equal("devname", slotOption.ReadString(Models.Metadata.SlotOption.DevNameKey)); Assert.Equal("devname", slotOption.ReadString(Models.Metadata.SlotOption.DevNameKey));
// Assert.Equal("name", slotOption.ReadString(Models.Metadata.SlotOption.NameKey)); Assert.Equal("name", slotOption.ReadString(Models.Metadata.SlotOption.NameKey));
// } }
// private static void ValidateMetadataSoftwareList(Models.Metadata.SoftwareList? softwareList) private static void ValidateMetadataSoftwareList(Models.Metadata.SoftwareList? softwareList)
// { {
// Assert.NotNull(softwareList); Assert.NotNull(softwareList);
// Assert.Equal("description", softwareList.ReadString(Models.Metadata.SoftwareList.DescriptionKey)); Assert.Equal("description", softwareList.ReadString(Models.Metadata.SoftwareList.DescriptionKey));
// Assert.Equal("filter", softwareList.ReadString(Models.Metadata.SoftwareList.FilterKey)); Assert.Equal("filter", softwareList.ReadString(Models.Metadata.SoftwareList.FilterKey));
// Assert.Equal("name", softwareList.ReadString(Models.Metadata.SoftwareList.NameKey)); Assert.Equal("name", softwareList.ReadString(Models.Metadata.SoftwareList.NameKey));
// Assert.Equal("notes", softwareList.ReadString(Models.Metadata.SoftwareList.NotesKey)); Assert.Equal("notes", softwareList.ReadString(Models.Metadata.SoftwareList.NotesKey));
// // TODO: Figure out why Models.Metadata.SoftwareList.SoftwareKey doesn't get processed Assert.Equal("original", softwareList.ReadString(Models.Metadata.SoftwareList.StatusKey));
// Assert.Equal("original", softwareList.ReadString(Models.Metadata.SoftwareList.StatusKey)); Assert.Equal("tag", softwareList.ReadString(Models.Metadata.SoftwareList.TagKey));
// Assert.Equal("tag", softwareList.ReadString(Models.Metadata.SoftwareList.TagKey));
// }
// private static void ValidateMetadataSound(Models.Metadata.Sound? sound) // TODO: Figure out why Models.Metadata.SoftwareList.SoftwareKey doesn't get processed
// { }
// Assert.NotNull(sound);
// Assert.Equal(12345, sound.ReadLong(Models.Metadata.Sound.ChannelsKey)); private static void ValidateMetadataSound(Models.Metadata.Sound? sound)
// } {
Assert.NotNull(sound);
Assert.Equal(12345, sound.ReadLong(Models.Metadata.Sound.ChannelsKey));
}
private static void ValidateMetadataTrurip(Models.Logiqx.Trurip? trurip) private static void ValidateMetadataTrurip(Models.Logiqx.Trurip? trurip)
{ {
@@ -1079,23 +1141,23 @@ namespace SabreTools.DatFiles.Test
Assert.Equal("score", trurip.Score); Assert.Equal("score", trurip.Score);
Assert.Equal("players", trurip.Players); Assert.Equal("players", trurip.Players);
Assert.Equal("enabled", trurip.Enabled); Assert.Equal("enabled", trurip.Enabled);
Assert.Equal("True", trurip.CRC); Assert.Equal("yes", trurip.CRC);
Assert.Equal("source", trurip.Source); Assert.Equal("sourcefile", trurip.Source);
Assert.Equal("cloneof", trurip.CloneOf); Assert.Equal("cloneof", trurip.CloneOf);
Assert.Equal("relatedto", trurip.RelatedTo); Assert.Equal("relatedto", trurip.RelatedTo);
} }
// private static void ValidateMetadataVideo(Models.Metadata.Video? video) private static void ValidateMetadataVideo(Models.Metadata.Video? video)
// { {
// Assert.NotNull(video); Assert.NotNull(video);
// Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectXKey)); Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectXKey));
// Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectYKey)); Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectYKey));
// Assert.Equal("vector", video.ReadString(Models.Metadata.Video.DisplayTypeKey)); Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.HeightKey));
// Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.HeightKey)); Assert.Equal("vertical", video.ReadString(Models.Metadata.Video.OrientationKey));
// Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.RefreshKey)); Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.RefreshKey));
// Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.WidthKey)); Assert.Equal("vector", video.ReadString(Models.Metadata.Video.ScreenKey));
// Assert.Equal(90, video.ReadLong(Models.Metadata.Video.RotateKey)); Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.WidthKey));
// } }
#endregion #endregion
} }

View File

@@ -1076,6 +1076,18 @@ namespace SabreTools.DatFiles
videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue<DisplayType>().AsStringValue(); videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue<DisplayType>().AsStringValue();
videoItem[Models.Metadata.Video.WidthKey] = displayItem.ReadLong(Models.Metadata.Display.WidthKey).ToString(); videoItem[Models.Metadata.Video.WidthKey] = displayItem.ReadLong(Models.Metadata.Display.WidthKey).ToString();
switch (displayItem.ReadLong(Models.Metadata.Display.RotateKey))
{
case 0:
case 180:
videoItem[Models.Metadata.Video.OrientationKey] = "horizontal";
break;
case 90:
case 270:
videoItem[Models.Metadata.Video.OrientationKey] = "vertical";
break;
}
EnsureMachineKey<Models.Metadata.Video?>(machine, Models.Metadata.Machine.VideoKey); EnsureMachineKey<Models.Metadata.Video?>(machine, Models.Metadata.Machine.VideoKey);
AppendToMachineKey(machine, Models.Metadata.Machine.VideoKey, videoItem); AppendToMachineKey(machine, Models.Metadata.Machine.VideoKey, videoItem);
} }
@@ -1094,14 +1106,8 @@ namespace SabreTools.DatFiles
var controls = item.GetFieldValue<DatItems.Formats.Control[]?>(Models.Metadata.Input.ControlKey); var controls = item.GetFieldValue<DatItems.Formats.Control[]?>(Models.Metadata.Input.ControlKey);
if (controls != null) if (controls != null)
{ {
List<Models.Metadata.Control> controlItems = []; Models.Metadata.Control[] controlItems = Array.ConvertAll(controls, control => control.GetInternalClone());
foreach (var control in controls) inputItem[Models.Metadata.Input.ControlKey] = controlItems;
{
var controlItem = control.GetInternalClone();
controlItems.Add(controlItem);
}
inputItem[Models.Metadata.Input.ControlKey] = controlItems.ToArray();
} }
return inputItem; return inputItem;
@@ -1118,14 +1124,8 @@ namespace SabreTools.DatFiles
var analogs = item.GetFieldValue<DatItems.Formats.Analog[]?>(Models.Metadata.Port.AnalogKey); var analogs = item.GetFieldValue<DatItems.Formats.Analog[]?>(Models.Metadata.Port.AnalogKey);
if (analogs != null) if (analogs != null)
{ {
List<Models.Metadata.Analog> analogItems = []; Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone());
foreach (var analog in analogs) slotItem[Models.Metadata.Port.AnalogKey] = analogItems;
{
var extensionItem = analog.GetInternalClone();
analogItems.Add(extensionItem);
}
slotItem[Models.Metadata.Port.AnalogKey] = analogItems.ToArray();
} }
return slotItem; return slotItem;
@@ -1242,14 +1242,8 @@ namespace SabreTools.DatFiles
var slotOptions = item.GetFieldValue<DatItems.Formats.SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey); var slotOptions = item.GetFieldValue<DatItems.Formats.SlotOption[]?>(Models.Metadata.Slot.SlotOptionKey);
if (slotOptions != null) if (slotOptions != null)
{ {
List<Models.Metadata.SlotOption> slotOptionItems = []; Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone());
foreach (var slotOption in slotOptions) slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems;
{
var extensionItem = slotOption.GetInternalClone();
slotOptionItems.Add(extensionItem);
}
slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems.ToArray();
} }
return slotItem; return slotItem;

View File

@@ -608,6 +608,7 @@ namespace SabreTools.DatItems
/// <summary> /// <summary>
/// Get a clone of the current internal model /// Get a clone of the current internal model
/// </summary> /// </summary>
/// TODO: Make virtual so individuals can handle conversion
public T GetInternalClone() => (_internal.Clone() as T)!; public T GetInternalClone() => (_internal.Clone() as T)!;
#endregion #endregion