Add listxml deserialization test, fix issues

This commit is contained in:
Matt Nadareski
2023-07-12 21:54:18 -04:00
parent a351a02ee1
commit b3f7d70834
34 changed files with 621 additions and 1 deletions

View File

@@ -14,5 +14,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")] [XmlElement("condition")]
public Condition? Condition { get; set; } public Condition? Condition { 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
} }
} }

View File

@@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml
{ {
[XmlAttribute("mask")] [XmlAttribute("mask")]
public string Mask { get; set; } public string Mask { 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
} }
} }

View File

@@ -15,5 +15,17 @@ namespace SabreTools.Models.Listxml
/// <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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("clock")] [XmlAttribute("clock")]
public string? Clock { get; set; } public string? Clock { 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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[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
} }
} }

View File

@@ -16,5 +16,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("inverted")] [XmlAttribute("inverted")]
public string? Inverted { get; set; } public string? Inverted { 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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")] [XmlElement("condition")]
public Condition? Condition { get; set; } public Condition? Condition { 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
} }
} }

View File

@@ -23,5 +23,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("confsetting")] [XmlElement("confsetting")]
public ConfSetting[]? ConfSetting { get; set; } public ConfSetting[]? ConfSetting { 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
} }
} }

View File

@@ -52,5 +52,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric?</remarks> /// <remarks>Numeric?</remarks>
[XmlAttribute("ways3")] [XmlAttribute("ways3")]
public string? Ways3 { get; set; } public string? Ways3 { 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
} }
} }

View File

@@ -26,5 +26,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("extension")] [XmlElement("extension")]
public Extension[]? Extension { get; set; } public Extension[]? Extension { 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
} }
} }

View File

@@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml
{ {
[XmlAttribute("name")] [XmlAttribute("name")]
public string Name { get; set; } public string Name { 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
} }
} }

View File

@@ -16,5 +16,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("inverted")] [XmlAttribute("inverted")]
public string? Inverted { get; set; } public string? Inverted { 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
} }
} }

View File

@@ -23,5 +23,17 @@ namespace SabreTools.Models.Listxml
[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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("condition")] [XmlElement("condition")]
public Condition? Condition { get; set; } public Condition? Condition { 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
} }
} }

View File

@@ -33,5 +33,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("optional")] [XmlAttribute("optional")]
public string? Optional { get; set; } public string? Optional { 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
} }
} }

View File

@@ -15,7 +15,7 @@ namespace SabreTools.Models.Listxml
/// <remarks>(0|90|180|270)</remarks> /// <remarks>(0|90|180|270)</remarks>
[XmlAttribute("rotate")] [XmlAttribute("rotate")]
public long? Rotate { get; set; } public string? Rotate { get; set; }
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("flipx")] [XmlAttribute("flipx")]
@@ -60,5 +60,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric?</remarks> /// <remarks>Numeric?</remarks>
[XmlAttribute("vbstart")] [XmlAttribute("vbstart")]
public string? VBStart { get; set; } public string? VBStart { 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
} }
} }

View File

@@ -37,5 +37,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("incomplete")] [XmlAttribute("incomplete")]
public string? Incomplete { get; set; } public string? Incomplete { 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
} }
} }

View File

@@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml
{ {
[XmlAttribute("name")] [XmlAttribute("name")]
public string Name { get; set; } public string Name { 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
} }
} }

View File

@@ -17,5 +17,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(unemulated|imperfect)</remarks> /// <remarks>(unemulated|imperfect)</remarks>
[XmlAttribute("overall")] [XmlAttribute("overall")]
public string? Overall { get; set; } public string? Overall { 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
} }
} }

View File

@@ -25,5 +25,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric?</remarks> /// <remarks>Numeric?</remarks>
[XmlElement("control")] [XmlElement("control")]
public Control[]? Control { get; set; } public Control[]? Control { 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
} }
} }

View File

@@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("briefname")] [XmlAttribute("briefname")]
public string BriefName { get; set; } public string BriefName { 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
} }
} }

View File

@@ -102,5 +102,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("ramoption")] [XmlElement("ramoption")]
public RamOption[]? RamOption { get; set; } public RamOption[]? RamOption { 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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("machine")] [XmlElement("machine")]
public Machine[] Machine { get; set; } public Machine[] Machine { 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
} }
} }

View File

@@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("analog")] [XmlElement("analog")]
public Analog[]? Analog { get; set; } public Analog[]? Analog { 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
} }
} }

View File

@@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml
[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
} }
} }

View File

@@ -38,5 +38,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>(yes|no) "no"</remarks> /// <remarks>(yes|no) "no"</remarks>
[XmlAttribute("optional")] [XmlAttribute("optional")]
public string? Optional { get; set; } public string? Optional { 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
} }
} }

View File

@@ -8,5 +8,17 @@ namespace SabreTools.Models.Listxml
{ {
[XmlAttribute("name")] [XmlAttribute("name")]
public string Name { get; set; } public string Name { 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
} }
} }

View File

@@ -11,5 +11,17 @@ namespace SabreTools.Models.Listxml
[XmlElement("slotoption")] [XmlElement("slotoption")]
public SlotOption[]? SlotOption { get; set; } public SlotOption[]? SlotOption { 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
} }
} }

View File

@@ -15,5 +15,17 @@ namespace SabreTools.Models.Listxml
/// <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
} }
} }

View File

@@ -18,5 +18,17 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("filter")] [XmlAttribute("filter")]
public string? Filter { get; set; } public string? Filter { 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
} }
} }

View File

@@ -9,5 +9,17 @@ namespace SabreTools.Models.Listxml
/// <remarks>Numeric?</remarks> /// <remarks>Numeric?</remarks>
[XmlAttribute("channels")] [XmlAttribute("channels")]
public string Channels { get; set; } public string Channels { 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
} }
} }

View File

@@ -0,0 +1,20 @@
# SabreTools.Models
This library comprises of models that represent either directly serializable or representative structures for all DAT types. This library is currently unused by any other library in SabreTools, as there are no ways of properly dealing with conversion between models, filtering, or many of the other features. All of the main models representing metadata files should have parsers created outside of the current code. The parser code will likely be partially patterned off of the code being used to create the serialization tests.
In each completed model, there is a section that looks like the following:
```
#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
```
This code should be removed before the models are used. This is only included during debugging and implementation as to ensure that there are no notable holes in the models that would disallow 1:1 replication of inputs.

View File

@@ -33,5 +33,233 @@ namespace SabreTools.Test.Parser
Assert.Null(file.ADDITIONAL_ELEMENTS); Assert.Null(file.ADDITIONAL_ELEMENTS);
} }
} }
[Fact]
public void ListxmlDeserializeTest()
{
// Open the file for reading
string filename = System.IO.Path.Combine(Environment.CurrentDirectory, "TestData", "test-listxml-files.xml.gz");
using var fs = System.IO.File.OpenRead(filename);
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 });
// Setup the serializer
var serializer = new XmlSerializer(typeof(Models.Listxml.Mame));
// Deserialize the file
var dat = serializer.Deserialize(xr) as Models.Listxml.Mame;
// Validate the values
Assert.NotNull(dat);
Assert.NotNull(dat.Machine);
Assert.Equal(45861, dat.Machine.Length);
// Validate we're not missing any attributes or elements
Assert.Null(dat.ADDITIONAL_ATTRIBUTES);
Assert.Null(dat.ADDITIONAL_ELEMENTS);
foreach (var machine in dat.Machine)
{
Assert.Null(machine.ADDITIONAL_ATTRIBUTES);
Assert.Null(machine.ADDITIONAL_ELEMENTS);
foreach (var biosset in machine.BiosSet ?? Array.Empty<Models.Listxml.BiosSet>())
{
Assert.Null(biosset.ADDITIONAL_ATTRIBUTES);
Assert.Null(biosset.ADDITIONAL_ELEMENTS);
}
foreach (var rom in machine.Rom ?? Array.Empty<Models.Listxml.Rom>())
{
Assert.Null(rom.ADDITIONAL_ATTRIBUTES);
Assert.Null(rom.ADDITIONAL_ELEMENTS);
}
foreach (var disk in machine.Disk ?? Array.Empty<Models.Listxml.Disk>())
{
Assert.Null(disk.ADDITIONAL_ATTRIBUTES);
Assert.Null(disk.ADDITIONAL_ELEMENTS);
}
foreach (var deviceRef in machine.DeviceRef ?? Array.Empty<Models.Listxml.DeviceRef>())
{
Assert.Null(deviceRef.ADDITIONAL_ATTRIBUTES);
Assert.Null(deviceRef.ADDITIONAL_ELEMENTS);
}
foreach (var sample in machine.Sample ?? Array.Empty<Models.Listxml.Sample>())
{
Assert.Null(sample.ADDITIONAL_ATTRIBUTES);
Assert.Null(sample.ADDITIONAL_ELEMENTS);
}
foreach (var chip in machine.Chip ?? Array.Empty<Models.Listxml.Chip>())
{
Assert.Null(chip.ADDITIONAL_ATTRIBUTES);
Assert.Null(chip.ADDITIONAL_ELEMENTS);
}
foreach (var display in machine.Display ?? Array.Empty<Models.Listxml.Display>())
{
Assert.Null(display.ADDITIONAL_ATTRIBUTES);
Assert.Null(display.ADDITIONAL_ELEMENTS);
}
if (machine.Sound != null)
{
Assert.Null(machine.Sound.ADDITIONAL_ATTRIBUTES);
Assert.Null(machine.Sound.ADDITIONAL_ELEMENTS);
}
if (machine.Input != null)
{
Assert.Null(machine.Input.ADDITIONAL_ATTRIBUTES);
Assert.Null(machine.Input.ADDITIONAL_ELEMENTS);
foreach (var control in machine.Input.Control ?? Array.Empty<Models.Listxml.Control>())
{
Assert.Null(control.ADDITIONAL_ATTRIBUTES);
Assert.Null(control.ADDITIONAL_ELEMENTS);
}
}
foreach (var dipswitch in machine.DipSwitch ?? Array.Empty<Models.Listxml.DipSwitch>())
{
Assert.Null(dipswitch.ADDITIONAL_ATTRIBUTES);
Assert.Null(dipswitch.ADDITIONAL_ELEMENTS);
if (dipswitch.Condition != null)
{
Assert.Null(dipswitch.Condition.ADDITIONAL_ATTRIBUTES);
Assert.Null(dipswitch.Condition.ADDITIONAL_ELEMENTS);
}
foreach (var diplocation in dipswitch.DipLocation ?? Array.Empty<Models.Listxml.DipLocation>())
{
Assert.Null(diplocation.ADDITIONAL_ATTRIBUTES);
Assert.Null(diplocation.ADDITIONAL_ELEMENTS);
}
foreach (var dipvalue in dipswitch.DipValue ?? Array.Empty<Models.Listxml.DipValue>())
{
Assert.Null(dipvalue.ADDITIONAL_ATTRIBUTES);
Assert.Null(dipvalue.ADDITIONAL_ELEMENTS);
if (dipvalue.Condition != null)
{
Assert.Null(dipvalue.Condition.ADDITIONAL_ATTRIBUTES);
Assert.Null(dipvalue.Condition.ADDITIONAL_ELEMENTS);
}
}
}
foreach (var configuration in machine.Configuration ?? Array.Empty<Models.Listxml.Configuration>())
{
Assert.Null(configuration.ADDITIONAL_ATTRIBUTES);
Assert.Null(configuration.ADDITIONAL_ELEMENTS);
if (configuration.Condition != null)
{
Assert.Null(configuration.Condition.ADDITIONAL_ATTRIBUTES);
Assert.Null(configuration.Condition.ADDITIONAL_ELEMENTS);
}
foreach (var conflocation in configuration.ConfLocation ?? Array.Empty<Models.Listxml.ConfLocation>())
{
Assert.Null(conflocation.ADDITIONAL_ATTRIBUTES);
Assert.Null(conflocation.ADDITIONAL_ELEMENTS);
}
foreach (var confsetting in configuration.ConfSetting ?? Array.Empty<Models.Listxml.ConfSetting>())
{
Assert.Null(confsetting.ADDITIONAL_ATTRIBUTES);
Assert.Null(confsetting.ADDITIONAL_ELEMENTS);
if (confsetting.Condition != null)
{
Assert.Null(confsetting.Condition.ADDITIONAL_ATTRIBUTES);
Assert.Null(confsetting.Condition.ADDITIONAL_ELEMENTS);
}
}
}
foreach (var port in machine.Port ?? Array.Empty<Models.Listxml.Port>())
{
Assert.Null(port.ADDITIONAL_ATTRIBUTES);
Assert.Null(port.ADDITIONAL_ELEMENTS);
foreach (var analog in port.Analog ?? Array.Empty<Models.Listxml.Analog>())
{
Assert.Null(analog.ADDITIONAL_ATTRIBUTES);
Assert.Null(analog.ADDITIONAL_ELEMENTS);
}
}
foreach (var adjuster in machine.Adjuster ?? Array.Empty<Models.Listxml.Adjuster>())
{
Assert.Null(adjuster.ADDITIONAL_ATTRIBUTES);
Assert.Null(adjuster.ADDITIONAL_ELEMENTS);
if (adjuster.Condition != null)
{
Assert.Null(adjuster.Condition.ADDITIONAL_ATTRIBUTES);
Assert.Null(adjuster.Condition.ADDITIONAL_ELEMENTS);
}
}
if (machine.Driver != null)
{
Assert.Null(machine.Driver.ADDITIONAL_ATTRIBUTES);
Assert.Null(machine.Driver.ADDITIONAL_ELEMENTS);
}
foreach (var feature in machine.Feature ?? Array.Empty<Models.Listxml.Feature>())
{
Assert.Null(feature.ADDITIONAL_ATTRIBUTES);
Assert.Null(feature.ADDITIONAL_ELEMENTS);
}
foreach (var device in machine.Device ?? Array.Empty<Models.Listxml.Device>())
{
Assert.Null(device.ADDITIONAL_ATTRIBUTES);
Assert.Null(device.ADDITIONAL_ELEMENTS);
if (device.Instance != null)
{
Assert.Null(device.Instance.ADDITIONAL_ATTRIBUTES);
Assert.Null(device.Instance.ADDITIONAL_ELEMENTS);
}
foreach (var extension in device.Extension ?? Array.Empty<Models.Listxml.Extension>())
{
Assert.Null(extension.ADDITIONAL_ATTRIBUTES);
Assert.Null(extension.ADDITIONAL_ELEMENTS);
}
}
foreach (var slot in machine.Slot ?? Array.Empty<Models.Listxml.Slot>())
{
Assert.Null(slot.ADDITIONAL_ATTRIBUTES);
Assert.Null(slot.ADDITIONAL_ELEMENTS);
foreach (var slotoption in slot.SlotOption ?? Array.Empty<Models.Listxml.SlotOption>())
{
Assert.Null(slotoption.ADDITIONAL_ATTRIBUTES);
Assert.Null(slotoption.ADDITIONAL_ELEMENTS);
}
}
foreach (var softwarelist in machine.SoftwareList ?? Array.Empty<Models.Listxml.SoftwareList>())
{
Assert.Null(softwarelist.ADDITIONAL_ATTRIBUTES);
Assert.Null(softwarelist.ADDITIONAL_ELEMENTS);
}
foreach (var ramoption in machine.RamOption ?? Array.Empty<Models.Listxml.RamOption>())
{
Assert.Null(ramoption.ADDITIONAL_ATTRIBUTES);
Assert.Null(ramoption.ADDITIONAL_ELEMENTS);
}
}
}
} }
} }

Binary file not shown.