mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add softwarelist deserialization test, fix issues
This commit is contained in:
@@ -10,11 +10,11 @@ namespace SabreTools.Models.SoftwareList
|
||||
public string Name { get; set; }
|
||||
|
||||
[XmlAttribute("size")]
|
||||
public long Size { get; set; }
|
||||
public string Size { get; set; }
|
||||
|
||||
/// <remarks>(8|16|32|64) "8"</remarks>
|
||||
[XmlAttribute("width")]
|
||||
public long? Width { get; set; }
|
||||
public string? Width { get; set; }
|
||||
|
||||
/// <remarks>(big|little) "little"</remarks>
|
||||
[XmlAttribute("endianness")]
|
||||
@@ -22,5 +22,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlElement("rom")]
|
||||
public Rom[]? Rom { 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.SoftwareList
|
||||
|
||||
[XmlElement("dipvalue")]
|
||||
public DipValue[]? DipValue { 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
|
||||
}
|
||||
}
|
||||
@@ -15,5 +15,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("default")]
|
||||
public string? Default { 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
|
||||
}
|
||||
}
|
||||
@@ -19,5 +19,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
/// <remarks>(yes|no) "no"</remarks>
|
||||
[XmlAttribute("writeable")]
|
||||
public string? Writeable { 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
|
||||
}
|
||||
}
|
||||
@@ -11,5 +11,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlElement("disk")]
|
||||
public Disk[]? Disk { 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
|
||||
}
|
||||
}
|
||||
@@ -11,5 +11,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlAttribute("value")]
|
||||
public string? Value { 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
|
||||
}
|
||||
}
|
||||
@@ -11,5 +11,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlAttribute("value")]
|
||||
public string? Value { 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
|
||||
}
|
||||
}
|
||||
@@ -23,5 +23,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlElement("dipswitch")]
|
||||
public DipSwitch[]? DipSwitch { 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
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ namespace SabreTools.Models.SoftwareList
|
||||
public string Name { get; set; }
|
||||
|
||||
[XmlAttribute("size")]
|
||||
public long Size { get; set; }
|
||||
public string Size { get; set; }
|
||||
|
||||
[XmlAttribute("crc")]
|
||||
public string? CRC { get; set; }
|
||||
@@ -32,5 +32,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
/// <remarks>(load16_byte|load16_word|load16_word_swap|load32_byte|load32_word|load32_word_swap|load32_dword|load64_word|load64_word_swap|reload|fill|continue|reload_plain|ignore)</remarks>
|
||||
[XmlAttribute("loadflag")]
|
||||
public string? LoadFlag { 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
|
||||
}
|
||||
}
|
||||
@@ -11,5 +11,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlAttribute("value")]
|
||||
public string? Value { 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
|
||||
}
|
||||
}
|
||||
@@ -36,5 +36,17 @@ namespace SabreTools.Models.SoftwareList
|
||||
|
||||
[XmlElement("part")]
|
||||
public Part[]? Part { 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.SoftwareList
|
||||
|
||||
[XmlElement("software")]
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -261,7 +261,7 @@ namespace SabreTools.Test.Parser
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void OpenMSXDeserializeTest()
|
||||
{
|
||||
@@ -320,5 +320,94 @@ namespace SabreTools.Test.Parser
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SoftwareListDeserializeTest()
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-softwarelist-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.SoftwareList.SoftwareList));
|
||||
|
||||
// Deserialize the file
|
||||
var dat = serializer.Deserialize(xr) as Models.SoftwareList.SoftwareList;
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat);
|
||||
Assert.NotNull(dat.Software);
|
||||
Assert.Equal(5447, 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 info in software.Info ?? Array.Empty<Models.SoftwareList.Info>())
|
||||
{
|
||||
Assert.Null(info.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(info.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var sharedfeat in software.SharedFeat ?? Array.Empty<Models.SoftwareList.SharedFeat>())
|
||||
{
|
||||
Assert.Null(sharedfeat.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(sharedfeat.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var part in software.Part ?? Array.Empty<Models.SoftwareList.Part>())
|
||||
{
|
||||
Assert.Null(part.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(part.ADDITIONAL_ELEMENTS);
|
||||
|
||||
foreach (var feature in part.Feature ?? Array.Empty<Models.SoftwareList.Feature>())
|
||||
{
|
||||
Assert.Null(feature.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(feature.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
|
||||
foreach (var dataarea in part.DataArea ?? Array.Empty<Models.SoftwareList.DataArea>())
|
||||
{
|
||||
Assert.Null(dataarea.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(dataarea.ADDITIONAL_ELEMENTS);
|
||||
|
||||
foreach (var rom in dataarea.Rom ?? Array.Empty<Models.SoftwareList.Rom>())
|
||||
{
|
||||
Assert.Null(rom.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(rom.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var diskarea in part.DiskArea ?? Array.Empty<Models.SoftwareList.DiskArea>())
|
||||
{
|
||||
Assert.Null(diskarea.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(diskarea.ADDITIONAL_ELEMENTS);
|
||||
|
||||
foreach (var disk in diskarea.Disk ?? Array.Empty<Models.SoftwareList.Disk>())
|
||||
{
|
||||
Assert.Null(disk.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(disk.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var dipswitch in part.DipSwitch ?? Array.Empty<Models.SoftwareList.DipSwitch>())
|
||||
{
|
||||
Assert.Null(dipswitch.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(dipswitch.ADDITIONAL_ELEMENTS);
|
||||
|
||||
foreach (var dipvalue in dipswitch.DipValue ?? Array.Empty<Models.SoftwareList.DipValue>())
|
||||
{
|
||||
Assert.Null(dipvalue.ADDITIONAL_ATTRIBUTES);
|
||||
Assert.Null(dipvalue.ADDITIONAL_ELEMENTS);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
119189
SabreTools.Test/TestData/test-softwarelist-files.xml
Normal file
119189
SabreTools.Test/TestData/test-softwarelist-files.xml
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user