Files

157 lines
4.5 KiB
C#
Raw Permalink Normal View History

using Xunit;
namespace SabreTools.Serialization.CrossModel.Test
{
public class OpenMSXTests
{
[Fact]
public void RoundTripTest()
{
// Get the cross-model serializer
2025-09-26 10:20:48 -04:00
var serializer = new OpenMSX();
// Build the data
2025-09-26 13:06:18 -04:00
Data.Models.OpenMSX.SoftwareDb sdb = Build();
// Serialize to generic model
2025-09-26 13:06:18 -04:00
Data.Models.Metadata.MetadataFile? metadata = serializer.Serialize(sdb);
Assert.NotNull(metadata);
// Serialize back to original model
2025-09-26 13:06:18 -04:00
Data.Models.OpenMSX.SoftwareDb? newSdb = serializer.Deserialize(metadata);
// Validate the data
Assert.NotNull(newSdb);
Assert.Equal("timestamp", newSdb.Timestamp);
Assert.NotNull(newSdb.Software);
var software = Assert.Single(newSdb.Software);
Validate(software);
}
/// <summary>
/// Build model for serialization and deserialization
/// </summary>
2025-09-26 13:06:18 -04:00
private static Data.Models.OpenMSX.SoftwareDb Build()
{
2025-09-26 13:06:18 -04:00
var original = new Data.Models.OpenMSX.Original
{
2026-04-03 13:48:43 -04:00
Value = true,
2026-04-02 14:28:46 -04:00
Content = "content",
};
2025-09-26 13:06:18 -04:00
var rom = new Data.Models.OpenMSX.Rom
{
Start = "start",
Type = "type",
Hash = "hash",
Remark = "remark",
};
2025-09-26 13:06:18 -04:00
var dump_rom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = rom,
};
2025-09-26 13:06:18 -04:00
var megarom = new Data.Models.OpenMSX.MegaRom
{
Start = "start",
Type = "type",
Hash = "hash",
Remark = "remark",
};
2025-09-26 13:06:18 -04:00
var dump_megarom = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = megarom,
};
2025-09-26 13:06:18 -04:00
var sccpluscart = new Data.Models.OpenMSX.SCCPlusCart
{
Start = "start",
Type = "type",
Hash = "hash",
Remark = "remark",
};
2025-09-26 13:06:18 -04:00
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
{
Original = original,
Rom = sccpluscart,
};
2025-11-14 09:06:59 -05:00
2025-09-26 13:06:18 -04:00
var software = new Data.Models.OpenMSX.Software
{
Title = "title",
GenMSXID = "genmsxid",
System = "system",
Company = "company",
Year = "year",
Country = "country",
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
};
2025-09-26 13:06:18 -04:00
return new Data.Models.OpenMSX.SoftwareDb
{
Timestamp = "timestamp",
Software = [software],
};
}
/// <summary>
/// Validate a Software
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OpenMSX.Software? software)
{
Assert.NotNull(software);
Assert.Equal("title", software.Title);
Assert.Equal("genmsxid", software.GenMSXID);
Assert.Equal("system", software.System);
Assert.Equal("company", software.Company);
Assert.Equal("year", software.Year);
Assert.Equal("country", software.Country);
Assert.NotNull(software.Dump);
Assert.Equal(3, software.Dump.Length);
foreach (var dump in software.Dump)
{
Validate(dump);
}
}
/// <summary>
/// Validate a Dump
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OpenMSX.Dump? dump)
{
Assert.NotNull(dump);
Validate(dump.Original);
Validate(dump.Rom);
}
/// <summary>
/// Validate a Original
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OpenMSX.Original? original)
{
Assert.NotNull(original);
2026-04-03 13:48:43 -04:00
Assert.Equal(true, original.Value);
2026-04-02 14:28:46 -04:00
Assert.Equal("content", original.Content);
}
/// <summary>
/// Validate a RomBase
/// </summary>
2025-09-26 13:06:18 -04:00
private static void Validate(Data.Models.OpenMSX.RomBase? rombase)
{
Assert.NotNull(rombase);
Assert.Equal("start", rombase.Start);
Assert.Equal("type", rombase.Type);
Assert.Equal("hash", rombase.Hash);
Assert.Equal("remark", rombase.Remark);
}
}
2025-11-14 09:06:59 -05:00
}