@@ -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 ) ;
0 commit comments