Skip to content

Commit

Permalink
Improve support for substitution groups
Browse files Browse the repository at this point in the history
Add Netex test
Clean up .csproj
  • Loading branch information
Michael Ganss committed Dec 17, 2020
1 parent c207c56 commit b106724
Show file tree
Hide file tree
Showing 604 changed files with 1,109,847 additions and 860 deletions.
12 changes: 11 additions & 1 deletion XmlSchemaClassGenerator.Tests/AssertEx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
using Xunit;

namespace XmlSchemaClassGenerator.Tests
Expand Down Expand Up @@ -78,7 +79,16 @@ public static void Equal(object o1, object o2)
var val1 = prop.GetValue(o1);
var val2 = prop.GetValue(o2);

Equal(val1, val2);
if (prop.PropertyType == typeof(DateTime)
&& val1 is DateTime dt1 && val2 is DateTime dt2
&& prop.GetCustomAttributes<XmlElementAttribute>().All(a => a.DataType == "time"))
{
Equal(dt1.TimeOfDay, dt1.TimeOfDay);
}
else
{
Equal(val1, val2);
}
}
}
}
Expand Down
851 changes: 2 additions & 849 deletions XmlSchemaClassGenerator.Tests/XmlSchemaClassGenerator.Tests.csproj

Large diffs are not rendered by default.

84 changes: 76 additions & 8 deletions XmlSchemaClassGenerator.Tests/XmlTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2182,17 +2182,20 @@ public void AirspaceServicesTest1()
{
OutputFolder = outputPath,
NamespaceProvider = _xsdToCsharpNsMap.ToNamespaceProvider(),
CollectionSettersMode = CollectionSettersMode.Public
CollectionSettersMode = CollectionSettersMode.Public,
SeparateSubstitutes = true,
GenerateInterfaces = false,
EmitOrder = true
};
var xsdFiles = new[]
{
"AIXM_AbstractGML_ObjectTypes.xsd",
"AIXM_DataTypes.xsd",
"AIXM_Features.xsd",
"extensions\\ADR-23.5.0\\ADR_DataTypes.xsd",
"extensions\\ADR-23.5.0\\ADR_Features.xsd",
"message\\ADR_Message.xsd",
"message\\AIXM_BasicMessage.xsd",
"AIXM_AbstractGML_ObjectTypes.xsd",
"AIXM_DataTypes.xsd",
"AIXM_Features.xsd",
"extensions\\ADR-23.5.0\\ADR_DataTypes.xsd",
"extensions\\ADR-23.5.0\\ADR_Features.xsd",
"message\\ADR_Message.xsd",
"message\\AIXM_BasicMessage.xsd",
}.Select(x => Path.Combine(Directory.GetCurrentDirectory(), "xsd", "aixm", "aixm-5.1.1", x)).ToList();

var assembly = Compiler.GenerateFiles("Aixm", xsdFiles, gen);
Expand Down Expand Up @@ -2250,5 +2253,70 @@ void UnknownAttributeHandler(object sender, XmlAttributeEventArgs e)
}
*/
}

[Fact, TestPriority(1)]
public void TestNetex()
{
var outputPath = Path.Combine("output", "netex");

var gen = new Generator
{
OutputFolder = outputPath,
CollectionSettersMode = CollectionSettersMode.Public,
EmitOrder = true,
SeparateSubstitutes = true,
GenerateInterfaces = false
};
var xsdFiles = new[]
{
"NeTEx_publication.xsd",
}.Select(x => Path.Combine(Directory.GetCurrentDirectory(), "xsd", "netex", x)).ToList();

var assembly = Compiler.GenerateFiles("Netex", xsdFiles, gen);
Assert.NotNull(assembly);

var testFiles = new Dictionary<string, string>
{
{ "functions/calendar/Netex_calendarCodeing_02.xml", "PublicationDeliveryStructure" },
};

foreach (var testFile in testFiles)
{
var type = assembly.GetTypes().SingleOrDefault(t => t.Name == testFile.Value);
Assert.NotNull(type);

var serializer = new XmlSerializer(type);
serializer.UnknownNode += new XmlNodeEventHandler(UnknownNodeHandler);
serializer.UnknownAttribute += new XmlAttributeEventHandler(UnknownAttributeHandler);
var unknownNodeError = false;
var unknownAttrError = false;

void UnknownNodeHandler(object sender, XmlNodeEventArgs e)
{
unknownNodeError = true;
}

void UnknownAttributeHandler(object sender, XmlAttributeEventArgs e)
{
unknownAttrError = true;
}

var xmlString = File.ReadAllText($"xml/netex_tests/{testFile.Key}");
xmlString = Regex.Replace(xmlString, "xsi:schemaLocation=\"[^\"]*\"", string.Empty);
var reader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings { IgnoreWhitespace = true });

var isDeserializable = serializer.CanDeserialize(reader);
Assert.True(isDeserializable);

var deserializedObject = serializer.Deserialize(reader);
Assert.False(unknownNodeError);
Assert.False(unknownAttrError);

var serializedXml = Serialize(serializer, deserializedObject, GetNamespacesFromSource(xmlString));

var deserializedXml = serializer.Deserialize(new StringReader(serializedXml));
AssertEx.Equal(deserializedObject, deserializedXml);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- edited with XMLSpy v2010 rel. 3 sp1 (http://www.altova.com) by Hogia Public Transport Systems AB (Hogia Public Transport Systems AB) -->
<!-- ==== Example of suggested NeTEx Calendar version====== -->
<PublicationDelivery xmlns="http://www.netex.org.uk/netex" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://www.netex.org.uk/netex ../../../xsd/NeTEx_publication.xsd">
<PublicationTimestamp>2001-12-17T09:30:47.0Z</PublicationTimestamp>
<ParticipantRef>SYS001</ParticipantRef>
<PublicationRequest version="1.0">
<RequestTimestamp>2001-12-17T09:30:47.0Z</RequestTimestamp>
<ParticipantRef>SYS002</ParticipantRef>
<topics>
<NetworkFrameTopic>
<Current/>
<ServiceCalendarFrameRef ref="noptis:9085002000100000"/>
</NetworkFrameTopic>
</topics>
</PublicationRequest>
<PublicationRefreshInterval>P7D</PublicationRefreshInterval>
<Description>Noptis simple Simple service calendar example</Description>
<dataObjects>
<ServiceCalendarFrame version="any" responsibilitySetRef="noptis:9010001000000000" id="noptis:9085002000100000">
<!--- ======= CODESPACEs======== -->
<codespaces>
<Codespace id="noptis">
<Xmlns>noptis</Xmlns>
<XmlnsUrl>http://www.noptis.org./noptis</XmlnsUrl>
<Description>A Noptis Customer </Description>
</Codespace>
</codespaces>
<!--- =======FRAME DEFAULTS======== -->
<FrameDefaults>
<DefaultCodespaceRef ref="noptis"/>
</FrameDefaults>
<!-- =========================================== -->
<ServiceCalendar version="any" responsibilitySetRef="noptis:9010001000000000" id="noptis:9085002000100000">
<Name>Base</Name>
<FromDate>2007-06-17</FromDate>
<ToDate>2008-06-14</ToDate>
<dayTypes>
<DayType version="any" id="noptis:9086002000100001">
</DayType>
<DayType version="any" id="noptis:9086002000100002">
</DayType>
</dayTypes>
<dayTypeAssignments>
<DayTypeAssignment version="any" order="1" id="noptis:DayTypeAssignment:2007-06-17">
<Date>2007-06-17</Date>
<DayTypeRef version="any" ref="noptis:9086002000100001"/>
</DayTypeAssignment>
<DayTypeAssignment version="any" order="1" id="noptis:DayTypeAssignment:2007-06-24">
<Date>2007-06-24</Date>
<DayTypeRef version="any" ref="noptis:9086002000100001"/>
</DayTypeAssignment>
<DayTypeAssignment version="any" order="1" id="noptis:DayTypeAssignment:2007-06-18">
<Date>2007-06-18</Date>
<DayTypeRef version="any" ref="noptis:9086002000100002"/>
</DayTypeAssignment>
<DayTypeAssignment version="any" order="1" id="noptis:DayTypeAssignment:2007-06-25">
<Date>2007-06-25</Date>
<DayTypeRef version="any" ref="noptis:9086002000100002"/>
</DayTypeAssignment>
</dayTypeAssignments>
</ServiceCalendar>
</ServiceCalendarFrame>
</dataObjects>
</PublicationDelivery>
Loading

0 comments on commit b106724

Please sign in to comment.