Skip to content

Commit b8c850b

Browse files
committed
Remove duplicate properties in derived classes (fixes #545)
Add X3D test Add simple tests for very complex schemas
1 parent 6ea72e8 commit b8c850b

File tree

4 files changed

+19929
-21
lines changed

4 files changed

+19929
-21
lines changed

XmlSchemaClassGenerator.Tests/SharedTestFunctions.cs

+50-4
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,20 @@ internal static class SharedTestFunctions
2020
{
2121
private static readonly XmlQualifiedName AnyType = new("anyType", XmlSchema.Namespace);
2222

23-
internal static void TestSamples(ITestOutputHelper output, string name, string pattern)
23+
internal static void TestSamples(ITestOutputHelper output, string name, string pattern,
24+
List<XmlQualifiedName> typesToTest = null)
2425
{
2526
var assembly = Compiler.GetAssembly(name);
2627
Assert.NotNull(assembly);
27-
DeserializeSampleXml(output, pattern, assembly);
28+
DeserializeSampleXml(output, pattern, assembly, typesToTest);
29+
}
30+
31+
internal static void TestSimple(ITestOutputHelper output, string name, string pattern,
32+
List<XmlQualifiedName> typesToTest = null)
33+
{
34+
var assembly = Compiler.GetAssembly(name);
35+
Assert.NotNull(assembly);
36+
DeserializeSimpleXml(output, pattern, assembly, typesToTest);
2837
}
2938

3039
internal static string Serialize(XmlSerializer serializer, object o, IDictionary<string, string> prefixToNsMap = null)
@@ -49,7 +58,43 @@ internal static string Serialize(XmlSerializer serializer, object o, IDictionary
4958
return serializedXml;
5059
}
5160

52-
private static void DeserializeSampleXml(ITestOutputHelper output, string pattern, Assembly assembly)
61+
private static void DeserializeSimpleXml(ITestOutputHelper output, string pattern, Assembly assembly,
62+
List<XmlQualifiedName> typesToTest = null)
63+
{
64+
var files = Glob.ExpandNames(pattern);
65+
66+
var set = new XmlSchemaSet();
67+
var xmlSchemaReaderSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore };
68+
69+
set.XmlResolver = new XmlUrlResolver();
70+
71+
var readers = files.Select(f => XmlReader.Create(f, xmlSchemaReaderSettings));
72+
73+
foreach (var reader in readers)
74+
set.Add(null, reader);
75+
76+
set.Compile();
77+
78+
foreach (var rootElement in set.GlobalElements.Values.Cast<XmlSchemaElement>().Where(e =>
79+
!e.IsAbstract
80+
&& e.ElementSchemaType is not XmlSchemaSimpleType
81+
&& e.ElementSchemaType.QualifiedName != AnyType
82+
&& (typesToTest == null || typesToTest.Contains(e.QualifiedName))))
83+
{
84+
var type = FindType(assembly, rootElement.QualifiedName);
85+
var serializer = new XmlSerializer(type);
86+
Assert.NotNull(serializer);
87+
var o = Activator.CreateInstance(type);
88+
var xml = Serialize(serializer, o);
89+
Assert.NotNull(xml);
90+
Assert.NotEmpty(xml);
91+
var o2 = serializer.Deserialize(new StringReader(xml));
92+
AssertEx.Equal(o, o2);
93+
}
94+
}
95+
96+
private static void DeserializeSampleXml(ITestOutputHelper output, string pattern, Assembly assembly,
97+
List<XmlQualifiedName> typesToTest = null)
5398
{
5499
var files = Glob.ExpandNames(pattern);
55100

@@ -71,7 +116,8 @@ private static void DeserializeSampleXml(ITestOutputHelper output, string patter
71116
foreach (var rootElement in set.GlobalElements.Values.Cast<XmlSchemaElement>().Where(e =>
72117
!e.IsAbstract
73118
&& e.ElementSchemaType is not XmlSchemaSimpleType
74-
&& e.ElementSchemaType.QualifiedName != AnyType))
119+
&& e.ElementSchemaType.QualifiedName != AnyType
120+
&& (typesToTest == null || typesToTest.Contains(e.QualifiedName))))
75121
{
76122
var type = FindType(assembly, rootElement.QualifiedName);
77123
var serializer = new XmlSerializer(type);

XmlSchemaClassGenerator.Tests/XmlTests.cs

+26-17
Original file line numberDiff line numberDiff line change
@@ -96,24 +96,24 @@ private static IEnumerable<string> ConvertXml(string name, string xsd, Generator
9696
const string UnionPattern = "xsd/union/union.xsd";
9797
const string GuidPattern = "xsd/guid/*.xsd";
9898
const string NullableReferenceAttributesPattern = "xsd/nullablereferenceattributes/nullablereference.xsd";
99+
const string X3DPattern = "xsd/x3d/*.xsd";
99100

100-
// IATA test takes too long to perform every time
101-
102-
//[Fact, TestPriority(1)]
103-
//[UseCulture("en-US")]
104-
//public void TestIata()
105-
//{
106-
// Compiler.Generate("Iata", IataPattern, new Generator
107-
// {
108-
// EntityFramework = true,
109-
// DataAnnotationMode = DataAnnotationMode.All,
110-
// NamespaceProvider = new Dictionary<NamespaceKey, string> { { new NamespaceKey(""), "XmlSchema" }, { new NamespaceKey("http://www.iata.org/IATA/EDIST/2017.2"), "Iata" } }
111-
// .ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = "Iata" }.NamespaceProvider.GenerateNamespace),
112-
// MemberVisitor = (member, model) => { },
113-
// GenerateInterfaces = true
114-
// });
115-
// SharedTestFunctions.TestSamples(Output, "Iata", IataPattern);
116-
//}
101+
[Fact, TestPriority(1)]
102+
[UseCulture("en-US")]
103+
public void TestIata()
104+
{
105+
Compiler.Generate("Iata", IataPattern, new Generator
106+
{
107+
EntityFramework = true,
108+
DataAnnotationMode = DataAnnotationMode.All,
109+
NamespaceProvider = new Dictionary<NamespaceKey, string> { { new NamespaceKey(""), "XmlSchema" }, { new NamespaceKey("http://www.iata.org/IATA/EDIST/2017.2"), "Iata" } }
110+
.ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = "Iata" }.NamespaceProvider.GenerateNamespace),
111+
MemberVisitor = (member, model) => { },
112+
GenerateInterfaces = true
113+
});
114+
var typesToTest = new List<XmlQualifiedName> { new("AirShoppingRS", "http://www.iata.org/IATA/EDIST/2017.2") };
115+
SharedTestFunctions.TestSimple(Output, "Iata", IataPattern, typesToTest);
116+
}
117117

118118
[Fact, TestPriority(1)]
119119
[UseCulture("en-US")]
@@ -140,6 +140,15 @@ public void TestClient()
140140
SharedTestFunctions.TestSamples(Output, "Client", ClientPattern);
141141
}
142142

143+
[Fact, TestPriority(1)]
144+
[UseCulture("en-US")]
145+
public void TestX3D()
146+
{
147+
Compiler.Generate("X3D", X3DPattern);
148+
var typesToTest = new List<XmlQualifiedName> { new("GeoLocation") };
149+
SharedTestFunctions.TestSimple(Output, "X3D", X3DPattern, typesToTest);
150+
}
151+
143152
[Fact, TestPriority(1)]
144153
[UseCulture("en-US")]
145154
public void TestGuid()

0 commit comments

Comments
 (0)