using Xunit; namespace SabreTools.Serialization.CrossModel.Test { public class SoftwareListTests { [Fact] public void RoundTripTest() { // Get the cross-model serializer var serializer = new SoftwareList(); // Build the data Data.Models.SoftwareList.SoftwareList sl = Build(); // Serialize to generic model Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(sl); Assert.NotNull(metadata); // Serialize back to original model Data.Models.SoftwareList.SoftwareList? newSl = serializer.Deserialize(metadata); // Validate the data Assert.NotNull(newSl); Assert.Equal("name", newSl.Name); Assert.Equal("description", newSl.Description); Assert.Equal("notes", newSl.Notes); Assert.NotNull(newSl.Software); var newSoftware = Assert.Single(newSl.Software); Validate(newSoftware); } /// /// Build model for serialization and deserialization /// private static Data.Models.SoftwareList.SoftwareList Build() { var info = new Data.Models.SoftwareList.Info { Name = "name", Value = "value", }; var sharedfeat = new Data.Models.SoftwareList.SharedFeat { Name = "name", Value = "value", }; var feature = new Data.Models.SoftwareList.Feature { Name = "name", Value = "value", }; var rom = new Data.Models.SoftwareList.Rom { Name = "name", Size = 12345, Length = "XXXXXX", CRC = "XXXXXX", SHA1 = "XXXXXX", Offset = "XXXXXX", Value = "value", Status = Data.Models.Metadata.ItemStatus.Good, LoadFlag = Data.Models.Metadata.LoadFlag.Load16Byte, }; var dataarea = new Data.Models.SoftwareList.DataArea { Name = "name", Size = 12345, Width = Data.Models.Metadata.Width.Long, Endianness = Data.Models.Metadata.Endianness.Big, Rom = [rom], }; var disk = new Data.Models.SoftwareList.Disk { Name = "name", MD5 = "XXXXXX", SHA1 = "XXXXXX", Status = Data.Models.Metadata.ItemStatus.Good, Writeable = true, }; var diskarea = new Data.Models.SoftwareList.DiskArea { Name = "name", Disk = [disk], }; var dipvalue = new Data.Models.SoftwareList.DipValue { Name = "name", Value = "value", Default = true, }; var dipswitch = new Data.Models.SoftwareList.DipSwitch { Name = "name", Tag = "tag", Mask = "mask", DipValue = [dipvalue], }; var part = new Data.Models.SoftwareList.Part { Name = "name", Interface = "interface", Feature = [feature], DataArea = [dataarea], DiskArea = [diskarea], DipSwitch = [dipswitch], }; var software = new Data.Models.SoftwareList.Software { Name = "name", CloneOf = "XXXXXX", Supported = Data.Models.Metadata.Supported.Yes, Description = "description", Year = "XXXXXX", Publisher = "XXXXXX", Notes = "notes", Info = [info], SharedFeat = [sharedfeat], Part = [part], }; return new Data.Models.SoftwareList.SoftwareList { Name = "name", Description = "description", Notes = "notes", Software = [software], }; } /// /// Validate a Software /// private static void Validate(Data.Models.SoftwareList.Software? software) { Assert.NotNull(software); Assert.Equal("name", software.Name); Assert.Equal("XXXXXX", software.CloneOf); Assert.Equal(Data.Models.Metadata.Supported.Yes, software.Supported); Assert.Equal("description", software.Description); Assert.Equal("XXXXXX", software.Year); Assert.Equal("XXXXXX", software.Publisher); Assert.Equal("notes", software.Notes); Assert.NotNull(software.Info); var info = Assert.Single(software.Info); Validate(info); Assert.NotNull(software.SharedFeat); var sharedfeat = Assert.Single(software.SharedFeat); Validate(sharedfeat); Assert.NotNull(software.Part); var part = Assert.Single(software.Part); Validate(part); } /// /// Validate a Info /// private static void Validate(Data.Models.SoftwareList.Info? info) { Assert.NotNull(info); Assert.Equal("name", info.Name); Assert.Equal("value", info.Value); } /// /// Validate a SharedFeat /// private static void Validate(Data.Models.SoftwareList.SharedFeat? sharedfeat) { Assert.NotNull(sharedfeat); Assert.Equal("name", sharedfeat.Name); Assert.Equal("value", sharedfeat.Value); } /// /// Validate a Part /// private static void Validate(Data.Models.SoftwareList.Part? part) { Assert.NotNull(part); Assert.Equal("name", part.Name); Assert.Equal("interface", part.Interface); Assert.NotNull(part.Feature); var feature = Assert.Single(part.Feature); Validate(feature); Assert.NotNull(part.DataArea); var dataarea = Assert.Single(part.DataArea); Validate(dataarea); Assert.NotNull(part.DiskArea); var diskarea = Assert.Single(part.DiskArea); Validate(diskarea); Assert.NotNull(part.DipSwitch); var dipswitch = Assert.Single(part.DipSwitch); Validate(dipswitch); } /// /// Validate a Feature /// private static void Validate(Data.Models.SoftwareList.Feature? feature) { Assert.NotNull(feature); Assert.Equal("name", feature.Name); Assert.Equal("value", feature.Value); } /// /// Validate a DataArea /// private static void Validate(Data.Models.SoftwareList.DataArea? dataarea) { Assert.NotNull(dataarea); Assert.Equal("name", dataarea.Name); Assert.Equal(12345, dataarea.Size); Assert.Equal(Data.Models.Metadata.Width.Long, dataarea.Width); Assert.Equal(Data.Models.Metadata.Endianness.Big, dataarea.Endianness); Assert.NotNull(dataarea.Rom); var rom = Assert.Single(dataarea.Rom); Validate(rom); } /// /// Validate a Rom /// private static void Validate(Data.Models.SoftwareList.Rom? rom) { Assert.NotNull(rom); Assert.Equal("name", rom.Name); Assert.Equal(12345, rom.Size); Assert.Equal("XXXXXX", rom.Length); Assert.Equal("XXXXXX", rom.CRC); Assert.Equal("XXXXXX", rom.SHA1); Assert.Equal("XXXXXX", rom.Offset); Assert.Equal("value", rom.Value); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, rom.Status); Assert.Equal(Data.Models.Metadata.LoadFlag.Load16Byte, rom.LoadFlag); } /// /// Validate a DiskArea /// private static void Validate(Data.Models.SoftwareList.DiskArea? diskarea) { Assert.NotNull(diskarea); Assert.Equal("name", diskarea.Name); Assert.NotNull(diskarea.Disk); var disk = Assert.Single(diskarea.Disk); Validate(disk); } /// /// Validate a Disk /// private static void Validate(Data.Models.SoftwareList.Disk? disk) { Assert.NotNull(disk); Assert.Equal("name", disk.Name); Assert.Equal("XXXXXX", disk.MD5); Assert.Equal("XXXXXX", disk.SHA1); Assert.Equal(Data.Models.Metadata.ItemStatus.Good, disk.Status); Assert.Equal(true, disk.Writeable); } /// /// Validate a DipSwitch /// private static void Validate(Data.Models.SoftwareList.DipSwitch? dipswitch) { Assert.NotNull(dipswitch); Assert.Equal("name", dipswitch.Name); Assert.Equal("tag", dipswitch.Tag); Assert.Equal("mask", dipswitch.Mask); Assert.NotNull(dipswitch.DipValue); var dipvalue = Assert.Single(dipswitch.DipValue); Validate(dipvalue); } /// /// Validate a DipValue /// private static void Validate(Data.Models.SoftwareList.DipValue? dipvalue) { Assert.NotNull(dipvalue); Assert.Equal("name", dipvalue.Name); Assert.Equal("value", dipvalue.Value); Assert.Equal(true, dipvalue.Default); } } }