mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add OpenMSX deserialization test, fix issues
This commit is contained in:
@@ -9,6 +9,7 @@ namespace SabreTools.Models.OfflineList
|
|||||||
[XmlAttribute("fileName")]
|
[XmlAttribute("fileName")]
|
||||||
public string? FileName { get; set; }
|
public string? FileName { get; set; }
|
||||||
|
|
||||||
|
[XmlText]
|
||||||
public string? Content { get; set; }
|
public string? Content { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,7 @@ namespace SabreTools.Models.OfflineList
|
|||||||
[XmlAttribute("extension")]
|
[XmlAttribute("extension")]
|
||||||
public string? Extension { get; set; }
|
public string? Extension { get; set; }
|
||||||
|
|
||||||
|
[XmlText]
|
||||||
public string? Content { get; set; }
|
public string? Content { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ namespace SabreTools.Models.OfflineList
|
|||||||
[XmlAttribute("value")]
|
[XmlAttribute("value")]
|
||||||
public string? Value { get; set; }
|
public string? Value { get; set; }
|
||||||
|
|
||||||
|
[XmlText]
|
||||||
public string? Content { get; set; }
|
public string? Content { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,5 +17,17 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
|
|
||||||
[XmlElement("sccpluscart")]
|
[XmlElement("sccpluscart")]
|
||||||
public SCCPlusCart? SCCPlusCart { get; set; }
|
public SCCPlusCart? SCCPlusCart { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,5 +14,17 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
|
|
||||||
[XmlElement("remark")]
|
[XmlElement("remark")]
|
||||||
public string? Remark { get; set; }
|
public string? Remark { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,9 +6,22 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
[XmlRoot("original")]
|
[XmlRoot("original")]
|
||||||
public class Original
|
public class Original
|
||||||
{
|
{
|
||||||
[XmlElement("value")]
|
[XmlAttribute("value")]
|
||||||
public bool Value { get; set; }
|
public bool Value { get; set; }
|
||||||
|
|
||||||
|
[XmlText]
|
||||||
public string? Content { get; set; }
|
public string? Content { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,5 +17,17 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
|
|
||||||
[XmlElement("remark")]
|
[XmlElement("remark")]
|
||||||
public string? Remark { get; set; }
|
public string? Remark { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,5 +14,17 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
|
|
||||||
[XmlElement("remark")]
|
[XmlElement("remark")]
|
||||||
public string? Remark { get; set; }
|
public string? Remark { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,5 +26,17 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
|
|
||||||
[XmlElement("dump")]
|
[XmlElement("dump")]
|
||||||
public Dump[]? Dump { get; set; }
|
public Dump[]? Dump { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,19 @@ namespace SabreTools.Models.OpenMSX
|
|||||||
[XmlAttribute("timestamp")]
|
[XmlAttribute("timestamp")]
|
||||||
public string? Timestamp { get; set; }
|
public string? Timestamp { get; set; }
|
||||||
|
|
||||||
[XmlAttribute("software")]
|
[XmlElement("software")]
|
||||||
public Software[]? Software { get; set; }
|
public Software[]? Software { get; set; }
|
||||||
|
|
||||||
|
#region DO NOT USE IN PRODUCTION
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyAttribute]
|
||||||
|
public XmlAttribute[]? ADDITIONAL_ATTRIBUTES { get; set; }
|
||||||
|
|
||||||
|
/// <remarks>Should be empty</remarks>
|
||||||
|
[XmlAnyElement]
|
||||||
|
public object[]? ADDITIONAL_ELEMENTS { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ namespace SabreTools.Test.Parser
|
|||||||
string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-listxml-files.xml.gz");
|
string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-listxml-files.xml.gz");
|
||||||
using var fs = System.IO.File.OpenRead(filename);
|
using var fs = System.IO.File.OpenRead(filename);
|
||||||
using var gz = new System.IO.Compression.GZipStream(fs, System.IO.Compression.CompressionMode.Decompress);
|
using var gz = new System.IO.Compression.GZipStream(fs, System.IO.Compression.CompressionMode.Decompress);
|
||||||
using var xr = System.Xml.XmlReader.Create(gz, new System.Xml.XmlReaderSettings { DtdProcessing = System.Xml.DtdProcessing.Parse });
|
using var xr = System.Xml.XmlReader.Create(gz, new System.Xml.XmlReaderSettings { DtdProcessing = System.Xml.DtdProcessing.Ignore });
|
||||||
|
|
||||||
// Setup the serializer
|
// Setup the serializer
|
||||||
var serializer = new XmlSerializer(typeof(Models.Listxml.Mame));
|
var serializer = new XmlSerializer(typeof(Models.Listxml.Mame));
|
||||||
@@ -261,5 +261,64 @@ namespace SabreTools.Test.Parser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void OpenMSXDeserializeTest()
|
||||||
|
{
|
||||||
|
// Open the file for reading
|
||||||
|
string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-openmsx-files.xml");
|
||||||
|
using var fs = System.IO.File.OpenRead(filename);
|
||||||
|
using var xr = System.Xml.XmlReader.Create(fs, new System.Xml.XmlReaderSettings { DtdProcessing = System.Xml.DtdProcessing.Ignore });
|
||||||
|
|
||||||
|
// Setup the serializer
|
||||||
|
var serializer = new XmlSerializer(typeof(Models.OpenMSX.SoftwareDb));
|
||||||
|
|
||||||
|
// Deserialize the file
|
||||||
|
var dat = serializer.Deserialize(xr) as Models.OpenMSX.SoftwareDb;
|
||||||
|
|
||||||
|
// Validate the values
|
||||||
|
Assert.NotNull(dat);
|
||||||
|
Assert.NotNull(dat.Software);
|
||||||
|
Assert.Equal(2550, dat.Software.Length);
|
||||||
|
|
||||||
|
// Validate we're not missing any attributes or elements
|
||||||
|
Assert.Null(dat.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dat.ADDITIONAL_ELEMENTS);
|
||||||
|
foreach (var software in dat.Software)
|
||||||
|
{
|
||||||
|
Assert.Null(software.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(software.ADDITIONAL_ELEMENTS);
|
||||||
|
|
||||||
|
foreach (var dump in software.Dump ?? Array.Empty<Models.OpenMSX.Dump>())
|
||||||
|
{
|
||||||
|
Assert.Null(dump.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dump.ADDITIONAL_ELEMENTS);
|
||||||
|
|
||||||
|
if (dump.Original != null)
|
||||||
|
{
|
||||||
|
Assert.Null(dump.Original.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dump.Original.ADDITIONAL_ELEMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dump.Rom != null)
|
||||||
|
{
|
||||||
|
Assert.Null(dump.Rom.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dump.Rom.ADDITIONAL_ELEMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dump.MegaRom != null)
|
||||||
|
{
|
||||||
|
Assert.Null(dump.MegaRom.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dump.MegaRom.ADDITIONAL_ELEMENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dump.SCCPlusCart != null)
|
||||||
|
{
|
||||||
|
Assert.Null(dump.SCCPlusCart.ADDITIONAL_ATTRIBUTES);
|
||||||
|
Assert.Null(dump.SCCPlusCart.ADDITIONAL_ELEMENTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
26452
SabreTools.Test/TestData/test-openmsx-files.xml
Normal file
26452
SabreTools.Test/TestData/test-openmsx-files.xml
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user