mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-02-04 05:36:12 +00:00
224 lines
6.3 KiB
C#
224 lines
6.3 KiB
C#
using System.IO;
|
|
using System.Linq;
|
|
using SabreTools.Serialization.Readers;
|
|
using Xunit;
|
|
|
|
namespace SabreTools.Serialization.Test.Readers
|
|
{
|
|
public class OpenMSXTests
|
|
{
|
|
[Fact]
|
|
public void NullArray_Null()
|
|
{
|
|
byte[]? data = null;
|
|
int offset = 0;
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data, offset);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void EmptyArray_Null()
|
|
{
|
|
byte[]? data = [];
|
|
int offset = 0;
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data, offset);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void InvalidArray_Null()
|
|
{
|
|
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
|
int offset = 0;
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data, offset);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void NullStream_Null()
|
|
{
|
|
Stream? data = null;
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void EmptyStream_Null()
|
|
{
|
|
Stream? data = new MemoryStream([]);
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void InvalidStream_Null()
|
|
{
|
|
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
|
var deserializer = new OpenMSX();
|
|
|
|
var actual = deserializer.Deserialize(data);
|
|
Assert.Null(actual);
|
|
}
|
|
|
|
[Fact]
|
|
public void RoundTripTest()
|
|
{
|
|
// Get the serializer and deserializer
|
|
var deserializer = new OpenMSX();
|
|
var serializer = new Serialization.Writers.OpenMSX();
|
|
|
|
// Build the data
|
|
Data.Models.OpenMSX.SoftwareDb sdb = Build();
|
|
|
|
// Serialize to stream
|
|
Stream? metadata = serializer.Serialize(sdb);
|
|
Assert.NotNull(metadata);
|
|
|
|
// Serialize back to original model
|
|
Data.Models.OpenMSX.SoftwareDb? newSdb = deserializer.Deserialize(metadata);
|
|
|
|
// Validate the data
|
|
Assert.NotNull(newSdb);
|
|
Assert.Equal("XXXXXX", newSdb.Timestamp);
|
|
|
|
Assert.NotNull(newSdb.Software);
|
|
var software = Assert.Single(newSdb.Software);
|
|
Validate(software);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Build model for serialization and deserialization
|
|
/// </summary>
|
|
private static Data.Models.OpenMSX.SoftwareDb Build()
|
|
{
|
|
var original = new Data.Models.OpenMSX.Original
|
|
{
|
|
Value = "XXXXXX",
|
|
Content = "XXXXXX",
|
|
};
|
|
|
|
var rom = new Data.Models.OpenMSX.Rom
|
|
{
|
|
Start = "XXXXXX",
|
|
Type = "XXXXXX",
|
|
Hash = "XXXXXX",
|
|
Remark = "XXXXXX",
|
|
};
|
|
|
|
var dump_rom = new Data.Models.OpenMSX.Dump
|
|
{
|
|
Original = original,
|
|
Rom = rom,
|
|
};
|
|
|
|
var megarom = new Data.Models.OpenMSX.MegaRom
|
|
{
|
|
Start = "XXXXXX",
|
|
Type = "XXXXXX",
|
|
Hash = "XXXXXX",
|
|
Remark = "XXXXXX",
|
|
};
|
|
|
|
var dump_megarom = new Data.Models.OpenMSX.Dump
|
|
{
|
|
Original = original,
|
|
Rom = megarom,
|
|
};
|
|
|
|
var sccpluscart = new Data.Models.OpenMSX.SCCPlusCart
|
|
{
|
|
Start = "XXXXXX",
|
|
Type = "XXXXXX",
|
|
Hash = "XXXXXX",
|
|
Remark = "XXXXXX",
|
|
};
|
|
|
|
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
|
|
{
|
|
Original = original,
|
|
Rom = sccpluscart,
|
|
};
|
|
|
|
var software = new Data.Models.OpenMSX.Software
|
|
{
|
|
Title = "XXXXXX",
|
|
GenMSXID = "XXXXXX",
|
|
System = "XXXXXX",
|
|
Company = "XXXXXX",
|
|
Year = "XXXXXX",
|
|
Country = "XXXXXX",
|
|
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
|
|
};
|
|
|
|
return new Data.Models.OpenMSX.SoftwareDb
|
|
{
|
|
Timestamp = "XXXXXX",
|
|
Software = [software],
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Validate a Software
|
|
/// </summary>
|
|
private static void Validate(Data.Models.OpenMSX.Software? software)
|
|
{
|
|
Assert.NotNull(software);
|
|
Assert.Equal("XXXXXX", software.Title);
|
|
Assert.Equal("XXXXXX", software.GenMSXID);
|
|
Assert.Equal("XXXXXX", software.System);
|
|
Assert.Equal("XXXXXX", software.Company);
|
|
Assert.Equal("XXXXXX", software.Year);
|
|
Assert.Equal("XXXXXX", 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>
|
|
private static void Validate(Data.Models.OpenMSX.Dump? dump)
|
|
{
|
|
Assert.NotNull(dump);
|
|
Validate(dump.Original);
|
|
Validate(dump.Rom);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Validate a Original
|
|
/// </summary>
|
|
private static void Validate(Data.Models.OpenMSX.Original? original)
|
|
{
|
|
Assert.NotNull(original);
|
|
Assert.Equal("XXXXXX", original.Value);
|
|
Assert.Equal("XXXXXX", original.Content);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Validate a RomBase
|
|
/// </summary>
|
|
private static void Validate(Data.Models.OpenMSX.RomBase? rombase)
|
|
{
|
|
Assert.NotNull(rombase);
|
|
Assert.Equal("XXXXXX", rombase.Start);
|
|
Assert.Equal("XXXXXX", rombase.Type);
|
|
Assert.Equal("XXXXXX", rombase.Hash);
|
|
Assert.Equal("XXXXXX", rombase.Remark);
|
|
}
|
|
}
|
|
}
|