diff --git a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs index 1506093e..4cf2465a 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -453,7 +453,7 @@ namespace SabreTools.DatFiles.Test [Models.Metadata.Device.FixedImageKey] = "fixedimage", [Models.Metadata.Device.InstanceKey] = CreateMetadataInstance(), [Models.Metadata.Device.InterfaceKey] = "interface", - [Models.Metadata.Device.MandatoryKey] = 1, + [Models.Metadata.Device.MandatoryKey] = 1L, [Models.Metadata.Device.TagKey] = "tag", [Models.Metadata.Device.DeviceTypeKey] = "punchtape", }; diff --git a/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs index 6330a81e..9e42942a 100644 --- a/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using SabreTools.Core; using SabreTools.DatItems; using SabreTools.DatItems.Formats; using SabreTools.Hashing; @@ -79,7 +81,7 @@ namespace SabreTools.DatFiles.Test Models.Metadata.MetadataFile? actual = datFile.ConvertToMetadata(); Assert.NotNull(actual); - Models.Metadata.Machine[]? machines = actual.Read(Models.Metadata.MetadataFile.MachineKey); + Models.Metadata.Machine[]? machines = actual.ReadItemArray(Models.Metadata.MetadataFile.MachineKey); Assert.NotNull(machines); Models.Metadata.Machine actualMachine = Assert.Single(machines); ValidateMetadataMachine(actualMachine); @@ -418,7 +420,6 @@ namespace SabreTools.DatFiles.Test Assert.Equal("version", header.ReadString(Models.Metadata.Header.VersionKey)); } - // TODO: Add reading all item types here private static void ValidateMetadataMachine(Models.Metadata.Machine machine) { 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("year", machine.ReadString(Models.Metadata.Machine.YearKey)); - Models.Metadata.Adjuster[]? adjusters = machine.Read(Models.Metadata.Machine.AdjusterKey); + Models.Metadata.Adjuster[]? adjusters = machine.ReadItemArray(Models.Metadata.Machine.AdjusterKey); Assert.NotNull(adjusters); Models.Metadata.Adjuster adjuster = Assert.Single(adjusters); ValidateMetadataAdjuster(adjuster); - Models.Metadata.Archive[]? archives = machine.Read(Models.Metadata.Machine.ArchiveKey); + Models.Metadata.Archive[]? archives = machine.ReadItemArray(Models.Metadata.Machine.ArchiveKey); Assert.NotNull(archives); Models.Metadata.Archive archive = Assert.Single(archives); ValidateMetadataArchive(archive); - Models.Metadata.BiosSet[]? biosSets = machine.Read(Models.Metadata.Machine.BiosSetKey); + Models.Metadata.BiosSet[]? biosSets = machine.ReadItemArray(Models.Metadata.Machine.BiosSetKey); Assert.NotNull(biosSets); Models.Metadata.BiosSet biosSet = Assert.Single(biosSets); ValidateMetadataBiosSet(biosSet); - Models.Metadata.Chip[]? chips = machine.Read(Models.Metadata.Machine.ChipKey); + Models.Metadata.Chip[]? chips = machine.ReadItemArray(Models.Metadata.Machine.ChipKey); Assert.NotNull(chips); Models.Metadata.Chip chip = Assert.Single(chips); ValidateMetadataChip(chip); - Models.Metadata.Configuration[]? configurations = machine.Read(Models.Metadata.Machine.ConfigurationKey); + Models.Metadata.Configuration[]? configurations = machine.ReadItemArray(Models.Metadata.Machine.ConfigurationKey); Assert.NotNull(configurations); Models.Metadata.Configuration configuration = Assert.Single(configurations); ValidateMetadataConfiguration(configuration); - Models.Metadata.Device[]? devices = machine.Read(Models.Metadata.Machine.DeviceKey); + Models.Metadata.Device[]? devices = machine.ReadItemArray(Models.Metadata.Machine.DeviceKey); Assert.NotNull(devices); Models.Metadata.Device device = Assert.Single(devices); ValidateMetadataDevice(device); - Models.Metadata.DeviceRef[]? deviceRefs = machine.Read(Models.Metadata.Machine.DeviceRefKey); + Models.Metadata.DeviceRef[]? deviceRefs = machine.ReadItemArray(Models.Metadata.Machine.DeviceRefKey); Assert.NotNull(deviceRefs); Models.Metadata.DeviceRef deviceRef = Assert.Single(deviceRefs); ValidateMetadataDeviceRef(deviceRef); - Models.Metadata.DipSwitch[]? dipSwitches = machine.Read(Models.Metadata.Machine.DipSwitchKey); + Models.Metadata.DipSwitch[]? dipSwitches = machine.ReadItemArray(Models.Metadata.Machine.DipSwitchKey); Assert.NotNull(dipSwitches); - Models.Metadata.DipSwitch dipSwitch = Assert.Single(dipSwitches); + Assert.Equal(2, dipSwitches.Length); + Models.Metadata.DipSwitch dipSwitch = dipSwitches[0]; ValidateMetadataDipSwitch(dipSwitch); - Models.Metadata.Disk[]? disks = machine.Read(Models.Metadata.Machine.DiskKey); + Models.Metadata.Disk[]? disks = machine.ReadItemArray(Models.Metadata.Machine.DiskKey); Assert.NotNull(disks); - Models.Metadata.Disk disk = Assert.Single(disks); + Assert.Equal(2, disks.Length); + Models.Metadata.Disk disk = disks[0]; ValidateMetadataDisk(disk); - Models.Metadata.Display[]? displays = machine.Read(Models.Metadata.Machine.DisplayKey); + Models.Metadata.Display[]? displays = machine.ReadItemArray(Models.Metadata.Machine.DisplayKey); 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); - Models.Metadata.Driver? driver = machine.Read(Models.Metadata.Machine.DriverKey); + Models.Metadata.Driver[]? drivers = machine.ReadItemArray(Models.Metadata.Machine.DriverKey); + Assert.NotNull(drivers); + Models.Metadata.Driver driver = Assert.Single(drivers); ValidateMetadataDriver(driver); // TODO: Implement this validation - // Models.Metadata.Dump[]? dumps = machine.Read(Models.Metadata.Machine.DumpKey); + // Models.Metadata.Dump[]? dumps = machine.ReadItemArray(Models.Metadata.Machine.DumpKey); // Assert.NotNull(dumps); // Models.Metadata.Dump dump = Assert.Single(dumps); // ValidateMetadataDump(dump); - Models.Metadata.Feature[]? features = machine.Read(Models.Metadata.Machine.FeatureKey); + Models.Metadata.Feature[]? features = machine.ReadItemArray(Models.Metadata.Machine.FeatureKey); Assert.NotNull(features); - Models.Metadata.Feature feature = Assert.Single(features); + Assert.Equal(2, features.Length); + Models.Metadata.Feature feature = features[0]; ValidateMetadataFeature(feature); - Models.Metadata.Info[]? infos = machine.Read(Models.Metadata.Machine.InfoKey); + Models.Metadata.Info[]? infos = machine.ReadItemArray(Models.Metadata.Machine.InfoKey); Assert.NotNull(infos); Models.Metadata.Info info = Assert.Single(infos); ValidateMetadataInfo(info); - Models.Metadata.Input? input = machine.Read(Models.Metadata.Machine.InputKey); + Models.Metadata.Input[]? inputs = machine.ReadItemArray(Models.Metadata.Machine.InputKey); + Assert.NotNull(inputs); + Models.Metadata.Input input = Assert.Single(inputs); ValidateMetadataInput(input); - Models.Metadata.Media[]? media = machine.Read(Models.Metadata.Machine.MediaKey); + Models.Metadata.Media[]? media = machine.ReadItemArray(Models.Metadata.Machine.MediaKey); Assert.NotNull(media); Models.Metadata.Media medium = Assert.Single(media); ValidateMetadataMedia(medium); - Models.Metadata.Part[]? parts = machine.Read(Models.Metadata.Machine.PartKey); + Models.Metadata.Part[]? parts = machine.ReadItemArray(Models.Metadata.Machine.PartKey); Assert.NotNull(parts); Models.Metadata.Part part = Assert.Single(parts); ValidateMetadataPart(part); - Models.Metadata.Port[]? ports = machine.Read(Models.Metadata.Machine.PortKey); + Models.Metadata.Port[]? ports = machine.ReadItemArray(Models.Metadata.Machine.PortKey); Assert.NotNull(ports); Models.Metadata.Port port = Assert.Single(ports); ValidateMetadataPort(port); - Models.Metadata.RamOption[]? ramOptions = machine.Read(Models.Metadata.Machine.RamOptionKey); + Models.Metadata.RamOption[]? ramOptions = machine.ReadItemArray(Models.Metadata.Machine.RamOptionKey); Assert.NotNull(ramOptions); Models.Metadata.RamOption ramOption = Assert.Single(ramOptions); ValidateMetadataRamOption(ramOption); - Models.Metadata.Release[]? releases = machine.Read(Models.Metadata.Machine.ReleaseKey); + Models.Metadata.Release[]? releases = machine.ReadItemArray(Models.Metadata.Machine.ReleaseKey); Assert.NotNull(releases); Models.Metadata.Release release = Assert.Single(releases); ValidateMetadataRelease(release); + Models.Metadata.Rom[]? roms = machine.ReadItemArray(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.Machine.SampleKey); + Assert.NotNull(samples); + Models.Metadata.Sample sample = Assert.Single(samples); + ValidateMetadataSample(sample); + + Models.Metadata.SharedFeat[]? sharedFeats = machine.ReadItemArray(Models.Metadata.Machine.SharedFeatKey); + Assert.NotNull(sharedFeats); + Models.Metadata.SharedFeat sharedFeat = Assert.Single(sharedFeats); + ValidateMetadataSharedFeat(sharedFeat); + + Models.Metadata.Slot[]? slots = machine.ReadItemArray(Models.Metadata.Machine.SlotKey); + Assert.NotNull(slots); + Models.Metadata.Slot slot = Assert.Single(slots); + ValidateMetadataSlot(slot); + + Models.Metadata.SoftwareList[]? softwareLists = machine.ReadItemArray(Models.Metadata.Machine.SoftwareListKey); + Assert.NotNull(softwareLists); + Models.Metadata.SoftwareList softwareList = Assert.Single(softwareLists); + ValidateMetadataSoftwareList(softwareList); + + Models.Metadata.Sound[]? sounds = machine.ReadItemArray(Models.Metadata.Machine.SoundKey); + Assert.NotNull(sounds); + Models.Metadata.Sound sound = Assert.Single(sounds); + ValidateMetadataSound(sound); + Models.Logiqx.Trurip? trurip = machine.Read(Models.Metadata.Machine.TruripKey); ValidateMetadataTrurip(trurip); + + Models.Metadata.Video[]? videos = machine.ReadItemArray(Models.Metadata.Machine.VideoKey); + Assert.NotNull(videos); + Models.Metadata.Video video = Assert.Single(videos); + ValidateMetadataVideo(video); } private static void ValidateMetadataAdjuster(Models.Metadata.Adjuster? adjuster) @@ -632,12 +677,12 @@ namespace SabreTools.DatFiles.Test Models.Metadata.Condition? condition = configuration.Read(Models.Metadata.Configuration.ConditionKey); ValidateMetadataCondition(condition); - Models.Metadata.ConfLocation[]? confLocations = configuration.Read(Models.Metadata.Configuration.ConfLocationKey); + Models.Metadata.ConfLocation[]? confLocations = configuration.ReadItemArray(Models.Metadata.Configuration.ConfLocationKey); Assert.NotNull(confLocations); Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations); ValidateMetadataConfLocation(confLocation); - Models.Metadata.ConfSetting[]? confSettings = configuration.Read(Models.Metadata.Configuration.ConfSettingKey); + Models.Metadata.ConfSetting[]? confSettings = configuration.ReadItemArray(Models.Metadata.Configuration.ConfSettingKey); Assert.NotNull(confSettings); Models.Metadata.ConfSetting? confSetting = Assert.Single(confSettings); ValidateMetadataConfSetting(confSetting); @@ -679,14 +724,19 @@ namespace SabreTools.DatFiles.Test Assert.Equal("ways3", control.ReadString(Models.Metadata.Control.Ways3Key)); } - // private static void ValidateMetadataDataArea(DataArea? dataArea) - // { - // Assert.NotNull(dataArea); - // Assert.Equal("big", dataArea.ReadString(Models.Metadata.DataArea.EndiannessKey)); - // Assert.Equal("name", dataArea.ReadString(Models.Metadata.DataArea.NameKey)); - // Assert.Equal(12345, dataArea.ReadLong(Models.Metadata.DataArea.SizeKey)); - // Assert.Equal(64, dataArea.ReadLong(Models.Metadata.DataArea.WidthKey)); - // } + private static void ValidateMetadataDataArea(Models.Metadata.DataArea? dataArea) + { + Assert.NotNull(dataArea); + Assert.Equal("big", dataArea.ReadString(Models.Metadata.DataArea.EndiannessKey)); + Assert.Equal("name", dataArea.ReadString(Models.Metadata.DataArea.NameKey)); + Assert.Equal(12345, dataArea.ReadLong(Models.Metadata.DataArea.SizeKey)); + Assert.Equal(64, dataArea.ReadLong(Models.Metadata.DataArea.WidthKey)); + + Models.Metadata.Rom[]? roms = dataArea.ReadItemArray(Models.Metadata.DataArea.RomKey); + Assert.NotNull(roms); + Models.Metadata.Rom? rom = Assert.Single(roms); + ValidateMetadataRom(rom); + } 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("punchtape", device.ReadString(Models.Metadata.Device.DeviceTypeKey)); - Models.Metadata.Extension[]? extensions = device.Read(Models.Metadata.Device.ExtensionKey); + Models.Metadata.Extension[]? extensions = device.ReadItemArray(Models.Metadata.Device.ExtensionKey); Assert.NotNull(extensions); Models.Metadata.Extension? extension = Assert.Single(extensions); ValidateMetadataExtension(extension); @@ -731,12 +781,12 @@ namespace SabreTools.DatFiles.Test Models.Metadata.Condition? condition = dipSwitch.Read(Models.Metadata.DipSwitch.ConditionKey); ValidateMetadataCondition(condition); - Models.Metadata.DipLocation[]? dipLocations = dipSwitch.Read(Models.Metadata.DipSwitch.DipLocationKey); + Models.Metadata.DipLocation[]? dipLocations = dipSwitch.ReadItemArray(Models.Metadata.DipSwitch.DipLocationKey); Assert.NotNull(dipLocations); Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations); ValidateMetadataDipLocation(dipLocation); - Models.Metadata.DipValue[]? dipValues = dipSwitch.Read(Models.Metadata.DipSwitch.DipValueKey); + Models.Metadata.DipValue[]? dipValues = dipSwitch.ReadItemArray(Models.Metadata.DipSwitch.DipValueKey); Assert.NotNull(dipValues); Models.Metadata.DipValue? dipValue = Assert.Single(dipValues); ValidateMetadataDipValue(dipValue); @@ -772,11 +822,16 @@ namespace SabreTools.DatFiles.Test Assert.True(disk.ReadBool(Models.Metadata.Disk.WritableKey)); } - // private static void ValidateMetadataDiskArea(Models.Metadata.DiskArea? diskArea) - // { - // Assert.NotNull(diskArea); - // Assert.Equal("name", diskArea.ReadString(Models.Metadata.DiskArea.NameKey)); - // } + private static void ValidateMetadataDiskArea(Models.Metadata.DiskArea? diskArea) + { + Assert.NotNull(diskArea); + Assert.Equal("name", diskArea.ReadString(Models.Metadata.DiskArea.NameKey)); + + Models.Metadata.Disk[]? disks = diskArea.ReadItemArray(Models.Metadata.DiskArea.DiskKey); + Assert.NotNull(disks); + Models.Metadata.Disk? disk = Assert.Single(disks); + ValidateMetadataDisk(disk); + } 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.TiltKey)); - Models.Metadata.Control[]? controls = input.Read(Models.Metadata.Input.ControlKey); + Models.Metadata.Control[]? controls = input.ReadItemArray(Models.Metadata.Input.ControlKey); Assert.NotNull(controls); Models.Metadata.Control? control = Assert.Single(controls); ValidateMetadataControl(control); @@ -869,33 +924,39 @@ namespace SabreTools.DatFiles.Test Assert.Equal(ZeroHash.SpamSumStr, media.ReadString(Models.Metadata.Media.SpamSumKey)); } - // TODO: Ensure type arrays are validated private static void ValidateMetadataPart(Models.Metadata.Part? part) { Assert.NotNull(part); Assert.Equal("interface", part.ReadString(Models.Metadata.Part.InterfaceKey)); Assert.Equal("name", part.ReadString(Models.Metadata.Part.NameKey)); + + Models.Metadata.DataArea[]? dataAreas = part.ReadItemArray(Models.Metadata.Part.DataAreaKey); + Assert.NotNull(dataAreas); + Models.Metadata.DataArea? dataArea = Assert.Single(dataAreas); + ValidateMetadataDataArea(dataArea); + + Models.Metadata.DiskArea[]? diskAreas = part.ReadItemArray(Models.Metadata.Part.DiskAreaKey); + Assert.NotNull(diskAreas); + Models.Metadata.DiskArea? diskArea = Assert.Single(diskAreas); + ValidateMetadataDiskArea(diskArea); + + Models.Metadata.DipSwitch[]? dipSwitches = part.ReadItemArray(Models.Metadata.Part.DipSwitchKey); + Assert.NotNull(dipSwitches); + Models.Metadata.DipSwitch? dipSwitch = Assert.Single(dipSwitches); + ValidateMetadataDipSwitch(dipSwitch); + + Models.Metadata.Feature[]? features = part.ReadItemArray(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(PartFeature.PartKey); - // ValidateMetadataPart(part); - // } - private static void ValidateMetadataPort(Models.Metadata.Port? port) { Assert.NotNull(port); Assert.Equal("tag", port.ReadString(Models.Metadata.Port.TagKey)); - Models.Metadata.Analog[]? dipValues = port.Read(Models.Metadata.Port.AnalogKey); + Models.Metadata.Analog[]? dipValues = port.ReadItemArray(Models.Metadata.Port.AnalogKey); Assert.NotNull(dipValues); Models.Metadata.Analog? dipValue = Assert.Single(dipValues); ValidateMetadataAnalog(dipValue); @@ -919,152 +980,153 @@ namespace SabreTools.DatFiles.Test Assert.Equal("region", release.ReadString(Models.Metadata.Release.RegionKey)); } - // private static void ValidateMetadataRom(Models.Metadata.Rom? rom) - // { - // Assert.NotNull(rom); - // Assert.Equal("album", rom.ReadString(Models.Metadata.Rom.AlbumKey)); - // Assert.Equal("alt_romname", rom.ReadString(Models.Metadata.Rom.AltRomnameKey)); - // Assert.Equal("alt_title", rom.ReadString(Models.Metadata.Rom.AltTitleKey)); - // 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_conf", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangConfKey)); - // Assert.Equal("asr_transcribed_lang", rom.ReadString(Models.Metadata.Rom.ASRTranscribedLangKey)); - // Assert.Equal("bios", rom.ReadString(Models.Metadata.Rom.BiosKey)); - // Assert.Equal("bitrate", rom.ReadString(Models.Metadata.Rom.BitrateKey)); - // Assert.Equal("btih", rom.ReadString(Models.Metadata.Rom.BitTorrentMagnetHashKey)); - // 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("comment", rom.ReadString(Models.Metadata.Rom.CommentKey)); - // Assert.Equal(ZeroHash.CRC32Str, rom.ReadString(Models.Metadata.Rom.CRCKey)); - // Assert.Equal("creator", rom.ReadString(Models.Metadata.Rom.CreatorKey)); - // Assert.Equal("date", rom.ReadString(Models.Metadata.Rom.DateKey)); - // Assert.True(rom.ReadBool(Models.Metadata.Rom.DisposeKey)); - // Assert.Equal("extension", rom.ReadString(Models.Metadata.Rom.ExtensionKey)); - // Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.FileCountKey)); - // Assert.True(rom.ReadBool(Models.Metadata.Rom.FileIsAvailableKey)); - // Assert.Equal("flags", rom.ReadString(Models.Metadata.Rom.FlagsKey)); - // Assert.Equal("format", rom.ReadString(Models.Metadata.Rom.FormatKey)); - // Assert.Equal("header", rom.ReadString(Models.Metadata.Rom.HeaderKey)); - // 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_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_module_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey)); - // 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.True(rom.ReadBool(Models.Metadata.Rom.InvertedKey)); - // Assert.Equal("mtime", rom.ReadString(Models.Metadata.Rom.LastModifiedTimeKey)); - // Assert.Equal("length", rom.ReadString(Models.Metadata.Rom.LengthKey)); - // Assert.Equal("load16_byte", rom.ReadString(Models.Metadata.Rom.LoadFlagKey)); - // 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.MD4), rom.ReadString(Models.Metadata.Rom.MD4Key)); - // Assert.Equal(ZeroHash.MD5Str, rom.ReadString(Models.Metadata.Rom.MD5Key)); - // Assert.Null(rom.ReadString(Models.Metadata.Rom.OpenMSXMediaType)); // Omit due to other test - // Assert.Equal("merge", rom.ReadString(Models.Metadata.Rom.MergeKey)); - // Assert.True(rom.ReadBool(Models.Metadata.Rom.MIAKey)); - // Assert.Equal("name", rom.ReadString(Models.Metadata.Rom.NameKey)); - // Assert.Equal("ocr", rom.ReadString(Models.Metadata.Rom.TesseractOCRKey)); - // 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_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey)); - // 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_module_version", rom.ReadString(Models.Metadata.Rom.TesseractOCRModuleVersionKey)); - // Assert.Equal("ocr_parameters", rom.ReadString(Models.Metadata.Rom.TesseractOCRParametersKey)); - // Assert.Equal("offset", rom.ReadString(Models.Metadata.Rom.OffsetKey)); - // Assert.True(rom.ReadBool(Models.Metadata.Rom.OptionalKey)); - // Assert.Equal("original", rom.ReadString(Models.Metadata.Rom.OriginalKey)); - // Assert.Equal("pdf_module_version", rom.ReadString(Models.Metadata.Rom.PDFModuleVersionKey)); - // Assert.Equal("preview-image", rom.ReadString(Models.Metadata.Rom.PreviewImageKey)); - // Assert.Equal("publisher", rom.ReadString(Models.Metadata.Rom.PublisherKey)); - // Assert.Equal("region", rom.ReadString(Models.Metadata.Rom.RegionKey)); - // Assert.Equal("remark", rom.ReadString(Models.Metadata.Rom.RemarkKey)); - // Assert.Equal("rotation", rom.ReadString(Models.Metadata.Rom.RotationKey)); - // Assert.Equal("serial", rom.ReadString(Models.Metadata.Rom.SerialKey)); - // Assert.Equal(ZeroHash.SHA1Str, rom.ReadString(Models.Metadata.Rom.SHA1Key)); - // Assert.Equal(ZeroHash.SHA256Str, rom.ReadString(Models.Metadata.Rom.SHA256Key)); - // Assert.Equal(ZeroHash.SHA384Str, rom.ReadString(Models.Metadata.Rom.SHA384Key)); - // Assert.Equal(ZeroHash.SHA512Str, rom.ReadString(Models.Metadata.Rom.SHA512Key)); - // Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.SizeKey)); - // Assert.True(rom.ReadBool(Models.Metadata.Rom.SoundOnlyKey)); - // Assert.Equal("source", rom.ReadString(Models.Metadata.Rom.SourceKey)); - // Assert.Equal(ZeroHash.SpamSumStr, rom.ReadString(Models.Metadata.Rom.SpamSumKey)); - // Assert.Equal("start", rom.ReadString(Models.Metadata.Rom.StartKey)); - // Assert.Equal("good", rom.ReadString(Models.Metadata.Rom.StatusKey)); - // Assert.Equal("summation", rom.ReadString(Models.Metadata.Rom.SummationKey)); - // Assert.Equal("title", rom.ReadString(Models.Metadata.Rom.TitleKey)); - // Assert.Equal("track", rom.ReadString(Models.Metadata.Rom.TrackKey)); - // Assert.Equal("type", rom.ReadString(Models.Metadata.Rom.OpenMSXType)); - // Assert.Equal("value", rom.ReadString(Models.Metadata.Rom.ValueKey)); - // 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_name", rom.ReadString(Models.Metadata.Rom.WhisperModelNameKey)); - // Assert.Equal("whisper_version", rom.ReadString(Models.Metadata.Rom.WhisperVersionKey)); - // 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_11_20", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval11To20Key)); - // 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_41_50", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval41To50Key)); - // 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_71_80", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval71To80Key)); - // 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(ZeroHash.GetString(HashType.XxHash3), rom.ReadString(Models.Metadata.Rom.xxHash364Key)); - // Assert.Equal(ZeroHash.GetString(HashType.XxHash128), rom.ReadString(Models.Metadata.Rom.xxHash3128Key)); - // } + private static void ValidateMetadataRom(Models.Metadata.Rom? rom) + { + Assert.NotNull(rom); + Assert.Equal("album", rom.ReadString(Models.Metadata.Rom.AlbumKey)); + Assert.Equal("alt_romname", rom.ReadString(Models.Metadata.Rom.AltRomnameKey)); + Assert.Equal("alt_title", rom.ReadString(Models.Metadata.Rom.AltTitleKey)); + 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_conf", rom.ReadString(Models.Metadata.Rom.ASRDetectedLangConfKey)); + Assert.Equal("asr_transcribed_lang", rom.ReadString(Models.Metadata.Rom.ASRTranscribedLangKey)); + Assert.Equal("bios", rom.ReadString(Models.Metadata.Rom.BiosKey)); + Assert.Equal("bitrate", rom.ReadString(Models.Metadata.Rom.BitrateKey)); + Assert.Equal("btih", rom.ReadString(Models.Metadata.Rom.BitTorrentMagnetHashKey)); + 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("comment", rom.ReadString(Models.Metadata.Rom.CommentKey)); + Assert.Equal(ZeroHash.CRC32Str, rom.ReadString(Models.Metadata.Rom.CRCKey)); + Assert.Equal("creator", rom.ReadString(Models.Metadata.Rom.CreatorKey)); + Assert.Equal("date", rom.ReadString(Models.Metadata.Rom.DateKey)); + Assert.True(rom.ReadBool(Models.Metadata.Rom.DisposeKey)); + Assert.Equal("extension", rom.ReadString(Models.Metadata.Rom.ExtensionKey)); + Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.FileCountKey)); + Assert.True(rom.ReadBool(Models.Metadata.Rom.FileIsAvailableKey)); + Assert.Equal("flags", rom.ReadString(Models.Metadata.Rom.FlagsKey)); + Assert.Equal("format", rom.ReadString(Models.Metadata.Rom.FormatKey)); + Assert.Equal("header", rom.ReadString(Models.Metadata.Rom.HeaderKey)); + 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_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_module_version", rom.ReadString(Models.Metadata.Rom.hOCRFtsTextModuleVersionKey)); + 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.True(rom.ReadBool(Models.Metadata.Rom.InvertedKey)); + Assert.Equal("mtime", rom.ReadString(Models.Metadata.Rom.LastModifiedTimeKey)); + Assert.Equal("length", rom.ReadString(Models.Metadata.Rom.LengthKey)); + Assert.Equal("load16_byte", rom.ReadString(Models.Metadata.Rom.LoadFlagKey)); + 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.MD4), rom.ReadString(Models.Metadata.Rom.MD4Key)); + Assert.Equal(ZeroHash.MD5Str, rom.ReadString(Models.Metadata.Rom.MD5Key)); + Assert.Null(rom.ReadString(Models.Metadata.Rom.OpenMSXMediaType)); // Omit due to other test + Assert.Equal("merge", rom.ReadString(Models.Metadata.Rom.MergeKey)); + Assert.True(rom.ReadBool(Models.Metadata.Rom.MIAKey)); + Assert.Equal("name", rom.ReadString(Models.Metadata.Rom.NameKey)); + Assert.Equal("ocr", rom.ReadString(Models.Metadata.Rom.TesseractOCRKey)); + 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_conf", rom.ReadString(Models.Metadata.Rom.TesseractOCRDetectedLangConfKey)); + 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_module_version", rom.ReadString(Models.Metadata.Rom.TesseractOCRModuleVersionKey)); + Assert.Equal("ocr_parameters", rom.ReadString(Models.Metadata.Rom.TesseractOCRParametersKey)); + Assert.Equal("offset", rom.ReadString(Models.Metadata.Rom.OffsetKey)); + Assert.True(rom.ReadBool(Models.Metadata.Rom.OptionalKey)); + Assert.Equal("original", rom.ReadString(Models.Metadata.Rom.OriginalKey)); + Assert.Equal("pdf_module_version", rom.ReadString(Models.Metadata.Rom.PDFModuleVersionKey)); + Assert.Equal("preview-image", rom.ReadString(Models.Metadata.Rom.PreviewImageKey)); + Assert.Equal("publisher", rom.ReadString(Models.Metadata.Rom.PublisherKey)); + Assert.Equal("region", rom.ReadString(Models.Metadata.Rom.RegionKey)); + Assert.Equal("remark", rom.ReadString(Models.Metadata.Rom.RemarkKey)); + Assert.Equal("rotation", rom.ReadString(Models.Metadata.Rom.RotationKey)); + Assert.Equal("serial", rom.ReadString(Models.Metadata.Rom.SerialKey)); + Assert.Equal(ZeroHash.SHA1Str, rom.ReadString(Models.Metadata.Rom.SHA1Key)); + Assert.Equal(ZeroHash.SHA256Str, rom.ReadString(Models.Metadata.Rom.SHA256Key)); + Assert.Equal(ZeroHash.SHA384Str, rom.ReadString(Models.Metadata.Rom.SHA384Key)); + Assert.Equal(ZeroHash.SHA512Str, rom.ReadString(Models.Metadata.Rom.SHA512Key)); + Assert.Equal(12345, rom.ReadLong(Models.Metadata.Rom.SizeKey)); + Assert.True(rom.ReadBool(Models.Metadata.Rom.SoundOnlyKey)); + Assert.Equal("source", rom.ReadString(Models.Metadata.Rom.SourceKey)); + Assert.Equal(ZeroHash.SpamSumStr, rom.ReadString(Models.Metadata.Rom.SpamSumKey)); + Assert.Equal("start", rom.ReadString(Models.Metadata.Rom.StartKey)); + Assert.Equal("good", rom.ReadString(Models.Metadata.Rom.StatusKey)); + Assert.Equal("summation", rom.ReadString(Models.Metadata.Rom.SummationKey)); + Assert.Equal("title", rom.ReadString(Models.Metadata.Rom.TitleKey)); + Assert.Equal("track", rom.ReadString(Models.Metadata.Rom.TrackKey)); + Assert.Equal("type", rom.ReadString(Models.Metadata.Rom.OpenMSXType)); + Assert.Equal("value", rom.ReadString(Models.Metadata.Rom.ValueKey)); + 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_name", rom.ReadString(Models.Metadata.Rom.WhisperModelNameKey)); + Assert.Equal("whisper_version", rom.ReadString(Models.Metadata.Rom.WhisperVersionKey)); + 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_11_20", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval11To20Key)); + 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_41_50", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval41To50Key)); + 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_71_80", rom.ReadString(Models.Metadata.Rom.WordConfidenceInterval71To80Key)); + 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(ZeroHash.GetString(HashType.XxHash3), rom.ReadString(Models.Metadata.Rom.xxHash364Key)); + Assert.Equal(ZeroHash.GetString(HashType.XxHash128), rom.ReadString(Models.Metadata.Rom.xxHash3128Key)); + } - // private static void ValidateMetadataSample(Models.Metadata.Sample? sample) - // { - // Assert.NotNull(sample); - // Assert.Equal("name", sample.ReadString(Models.Metadata.Sample.NameKey)); - // } + private static void ValidateMetadataSample(Models.Metadata.Sample? sample) + { + Assert.NotNull(sample); + Assert.Equal("name", sample.ReadString(Models.Metadata.Sample.NameKey)); + } - // private static void ValidateMetadataSharedFeat(Models.Metadata.SharedFeat? sharedFeat) - // { - // Assert.NotNull(sharedFeat); - // Assert.Equal("name", sharedFeat.ReadString(Models.Metadata.SharedFeat.NameKey)); - // Assert.Equal("value", sharedFeat.ReadString(Models.Metadata.SharedFeat.ValueKey)); - // } + private static void ValidateMetadataSharedFeat(Models.Metadata.SharedFeat? sharedFeat) + { + Assert.NotNull(sharedFeat); + Assert.Equal("name", sharedFeat.ReadString(Models.Metadata.SharedFeat.NameKey)); + Assert.Equal("value", sharedFeat.ReadString(Models.Metadata.SharedFeat.ValueKey)); + } - // private static void ValidateMetadataSlot(Models.Metadata.Slot? slot) - // { - // Assert.NotNull(slot); - // Assert.Equal("name", slot.ReadString(Models.Metadata.Slot.NameKey)); + private static void ValidateMetadataSlot(Models.Metadata.Slot? slot) + { + Assert.NotNull(slot); + Assert.Equal("name", slot.ReadString(Models.Metadata.Slot.NameKey)); - // SlotOption[]? slotOptions = slot.Read(Models.Metadata.Slot.SlotOptionKey); - // Assert.NotNull(slotOptions); - // SlotOption? slotOption = Assert.Single(slotOptions); - // ValidateMetadataSlotOption(slotOption); - // } + Models.Metadata.SlotOption[]? slotOptions = slot.ReadItemArray(Models.Metadata.Slot.SlotOptionKey); + Assert.NotNull(slotOptions); + Models.Metadata.SlotOption? slotOption = Assert.Single(slotOptions); + ValidateMetadataSlotOption(slotOption); + } - // private static void ValidateMetadataSlotOption(Models.Metadata.SlotOption? slotOption) - // { - // Assert.NotNull(slotOption); - // Assert.True(slotOption.ReadBool(Models.Metadata.SlotOption.DefaultKey)); - // Assert.Equal("devname", slotOption.ReadString(Models.Metadata.SlotOption.DevNameKey)); - // Assert.Equal("name", slotOption.ReadString(Models.Metadata.SlotOption.NameKey)); - // } + private static void ValidateMetadataSlotOption(Models.Metadata.SlotOption? slotOption) + { + Assert.NotNull(slotOption); + Assert.True(slotOption.ReadBool(Models.Metadata.SlotOption.DefaultKey)); + Assert.Equal("devname", slotOption.ReadString(Models.Metadata.SlotOption.DevNameKey)); + Assert.Equal("name", slotOption.ReadString(Models.Metadata.SlotOption.NameKey)); + } - // private static void ValidateMetadataSoftwareList(Models.Metadata.SoftwareList? softwareList) - // { - // Assert.NotNull(softwareList); - // Assert.Equal("description", softwareList.ReadString(Models.Metadata.SoftwareList.DescriptionKey)); - // Assert.Equal("filter", softwareList.ReadString(Models.Metadata.SoftwareList.FilterKey)); - // Assert.Equal("name", softwareList.ReadString(Models.Metadata.SoftwareList.NameKey)); - // 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("tag", softwareList.ReadString(Models.Metadata.SoftwareList.TagKey)); - // } + private static void ValidateMetadataSoftwareList(Models.Metadata.SoftwareList? softwareList) + { + Assert.NotNull(softwareList); + Assert.Equal("description", softwareList.ReadString(Models.Metadata.SoftwareList.DescriptionKey)); + Assert.Equal("filter", softwareList.ReadString(Models.Metadata.SoftwareList.FilterKey)); + Assert.Equal("name", softwareList.ReadString(Models.Metadata.SoftwareList.NameKey)); + Assert.Equal("notes", softwareList.ReadString(Models.Metadata.SoftwareList.NotesKey)); + Assert.Equal("original", softwareList.ReadString(Models.Metadata.SoftwareList.StatusKey)); + Assert.Equal("tag", softwareList.ReadString(Models.Metadata.SoftwareList.TagKey)); - // private static void ValidateMetadataSound(Models.Metadata.Sound? sound) - // { - // Assert.NotNull(sound); - // Assert.Equal(12345, sound.ReadLong(Models.Metadata.Sound.ChannelsKey)); - // } + // TODO: Figure out why Models.Metadata.SoftwareList.SoftwareKey doesn't get processed + } + + 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) { @@ -1079,23 +1141,23 @@ namespace SabreTools.DatFiles.Test Assert.Equal("score", trurip.Score); Assert.Equal("players", trurip.Players); Assert.Equal("enabled", trurip.Enabled); - Assert.Equal("True", trurip.CRC); - Assert.Equal("source", trurip.Source); + Assert.Equal("yes", trurip.CRC); + Assert.Equal("sourcefile", trurip.Source); Assert.Equal("cloneof", trurip.CloneOf); Assert.Equal("relatedto", trurip.RelatedTo); } - // private static void ValidateMetadataVideo(Models.Metadata.Video? video) - // { - // Assert.NotNull(video); - // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.AspectXKey)); - // 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.RefreshKey)); - // Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.WidthKey)); - // Assert.Equal(90, video.ReadLong(Models.Metadata.Video.RotateKey)); - // } + private static void ValidateMetadataVideo(Models.Metadata.Video? video) + { + Assert.NotNull(video); + 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.HeightKey)); + Assert.Equal("vertical", video.ReadString(Models.Metadata.Video.OrientationKey)); + Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.RefreshKey)); + Assert.Equal("vector", video.ReadString(Models.Metadata.Video.ScreenKey)); + Assert.Equal(12345, video.ReadLong(Models.Metadata.Video.WidthKey)); + } #endregion } diff --git a/SabreTools.DatFiles/DatFile.ToMetadata.cs b/SabreTools.DatFiles/DatFile.ToMetadata.cs index 536c722d..7d7d43e0 100644 --- a/SabreTools.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.DatFiles/DatFile.ToMetadata.cs @@ -1076,6 +1076,18 @@ namespace SabreTools.DatFiles videoItem[Models.Metadata.Video.ScreenKey] = displayItem.ReadString(Models.Metadata.Display.DisplayTypeKey).AsEnumValue().AsStringValue(); 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(machine, Models.Metadata.Machine.VideoKey); AppendToMachineKey(machine, Models.Metadata.Machine.VideoKey, videoItem); } @@ -1094,14 +1106,8 @@ namespace SabreTools.DatFiles var controls = item.GetFieldValue(Models.Metadata.Input.ControlKey); if (controls != null) { - List controlItems = []; - foreach (var control in controls) - { - var controlItem = control.GetInternalClone(); - controlItems.Add(controlItem); - } - - inputItem[Models.Metadata.Input.ControlKey] = controlItems.ToArray(); + Models.Metadata.Control[] controlItems = Array.ConvertAll(controls, control => control.GetInternalClone()); + inputItem[Models.Metadata.Input.ControlKey] = controlItems; } return inputItem; @@ -1118,14 +1124,8 @@ namespace SabreTools.DatFiles var analogs = item.GetFieldValue(Models.Metadata.Port.AnalogKey); if (analogs != null) { - List analogItems = []; - foreach (var analog in analogs) - { - var extensionItem = analog.GetInternalClone(); - analogItems.Add(extensionItem); - } - - slotItem[Models.Metadata.Port.AnalogKey] = analogItems.ToArray(); + Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone()); + slotItem[Models.Metadata.Port.AnalogKey] = analogItems; } return slotItem; @@ -1242,14 +1242,8 @@ namespace SabreTools.DatFiles var slotOptions = item.GetFieldValue(Models.Metadata.Slot.SlotOptionKey); if (slotOptions != null) { - List slotOptionItems = []; - foreach (var slotOption in slotOptions) - { - var extensionItem = slotOption.GetInternalClone(); - slotOptionItems.Add(extensionItem); - } - - slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems.ToArray(); + Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone()); + slotItem[Models.Metadata.Slot.SlotOptionKey] = slotOptionItems; } return slotItem; diff --git a/SabreTools.DatItems/DatItem.cs b/SabreTools.DatItems/DatItem.cs index 7b51cd1d..c7083ddf 100644 --- a/SabreTools.DatItems/DatItem.cs +++ b/SabreTools.DatItems/DatItem.cs @@ -608,6 +608,7 @@ namespace SabreTools.DatItems /// /// Get a clone of the current internal model /// + /// TODO: Make virtual so individuals can handle conversion public T GetInternalClone() => (_internal.Clone() as T)!; #endregion