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; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[XmlAttribute("size")]
|
[XmlAttribute("size")]
|
||||||
public long Size { get; set; }
|
public string Size { get; set; }
|
||||||
|
|
||||||
/// <remarks>(8|16|32|64) "8"</remarks>
|
/// <remarks>(8|16|32|64) "8"</remarks>
|
||||||
[XmlAttribute("width")]
|
[XmlAttribute("width")]
|
||||||
public long? Width { get; set; }
|
public string? Width { get; set; }
|
||||||
|
|
||||||
/// <remarks>(big|little) "little"</remarks>
|
/// <remarks>(big|little) "little"</remarks>
|
||||||
[XmlAttribute("endianness")]
|
[XmlAttribute("endianness")]
|
||||||
@@ -22,5 +22,17 @@ namespace SabreTools.Models.SoftwareList
|
|||||||
|
|
||||||
[XmlElement("rom")]
|
[XmlElement("rom")]
|
||||||
public Rom[]? Rom { get; set; }
|
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")]
|
[XmlElement("dipvalue")]
|
||||||
public DipValue[]? DipValue { get; set; }
|
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>
|
/// <remarks>(yes|no) "no"</remarks>
|
||||||
[XmlAttribute("default")]
|
[XmlAttribute("default")]
|
||||||
public string? Default { get; set; }
|
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>
|
/// <remarks>(yes|no) "no"</remarks>
|
||||||
[XmlAttribute("writeable")]
|
[XmlAttribute("writeable")]
|
||||||
public string? Writeable { get; set; }
|
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")]
|
[XmlElement("disk")]
|
||||||
public Disk[]? Disk { get; set; }
|
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")]
|
[XmlAttribute("value")]
|
||||||
public string? Value { get; set; }
|
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")]
|
[XmlAttribute("value")]
|
||||||
public string? Value { get; set; }
|
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")]
|
[XmlElement("dipswitch")]
|
||||||
public DipSwitch[]? DipSwitch { get; set; }
|
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; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[XmlAttribute("size")]
|
[XmlAttribute("size")]
|
||||||
public long Size { get; set; }
|
public string Size { get; set; }
|
||||||
|
|
||||||
[XmlAttribute("crc")]
|
[XmlAttribute("crc")]
|
||||||
public string? CRC { get; set; }
|
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>
|
/// <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")]
|
[XmlAttribute("loadflag")]
|
||||||
public string? LoadFlag { get; set; }
|
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")]
|
[XmlAttribute("value")]
|
||||||
public string? Value { get; set; }
|
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")]
|
[XmlElement("part")]
|
||||||
public Part[]? Part { get; set; }
|
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")]
|
[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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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