2 // System.Xml.Serialization.XmlSchemaImporterTests
5 // Gert Driesen (drieseng@users.sourceforge.net)
11 using System.Collections;
12 using System.Globalization;
15 using System.Xml.Schema;
16 using System.Xml.Serialization;
18 using NUnit.Framework;
20 using MonoTests.System.Xml.TestClasses;
22 namespace MonoTests.System.XmlSerialization
25 public class XmlSchemaImporterTests
27 private const string WsdlTypesNamespace = "http://microsoft.com/wsdl/types/";
30 [Category ("NotWorking")]
31 public void ImportTypeMapping_Struct ()
33 XmlSchemas schemas = ExportType (typeof (TimeSpan));
34 ArrayList qnames = GetXmlQualifiedNames (schemas);
35 Assert.AreEqual (1, qnames.Count, "#1");
37 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
38 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
40 Assert.IsNotNull (map, "#2");
41 Assert.AreEqual ("TimeSpan", map.ElementName, "#3");
42 Assert.AreEqual ("NSTimeSpan", map.Namespace, "#4");
43 Assert.AreEqual ("TimeSpan", map.TypeFullName, "#5");
44 Assert.AreEqual ("TimeSpan", map.TypeName, "#6");
48 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
49 public void ImportTypeMapping_XsdPrimitive_AnyType ()
51 XmlSchemas schemas = ExportType (typeof (object));
52 ArrayList qnames = GetXmlQualifiedNames (schemas);
53 Assert.AreEqual (1, qnames.Count, "#1");
55 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
56 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
58 Assert.IsNotNull (map, "#2");
59 Assert.AreEqual ("anyType", map.ElementName, "#3");
60 Assert.AreEqual ("NSObject", map.Namespace, "#4");
61 Assert.AreEqual ("System.Object", map.TypeFullName, "#5");
62 Assert.AreEqual ("Object", map.TypeName, "#6");
66 public void ImportTypeMapping_XsdPrimitive_Boolean ()
68 XmlSchemas schemas = ExportType (typeof (bool));
69 ArrayList qnames = GetXmlQualifiedNames (schemas);
70 Assert.AreEqual (1, qnames.Count, "#1");
72 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
73 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
75 Assert.IsNotNull (map, "#2");
76 Assert.AreEqual ("boolean", map.ElementName, "#3");
77 Assert.AreEqual ("NSBoolean", map.Namespace, "#4");
78 Assert.AreEqual ("System.Boolean", map.TypeFullName, "#5");
79 Assert.AreEqual ("Boolean", map.TypeName, "#6");
83 public void ImportTypeMapping_XsdPrimitive_Short ()
85 XmlSchemas schemas = ExportType (typeof (short));
86 ArrayList qnames = GetXmlQualifiedNames (schemas);
87 Assert.AreEqual (1, qnames.Count, "#1");
89 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
90 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
92 Assert.IsNotNull (map, "#2");
93 Assert.AreEqual ("short", map.ElementName, "#3");
94 Assert.AreEqual ("NSInt16", map.Namespace, "#4");
95 Assert.AreEqual ("System.Int16", map.TypeFullName, "#5");
96 Assert.AreEqual ("Int16", map.TypeName, "#6");
100 public void ImportTypeMapping_XsdPrimitive_UnsignedShort ()
102 XmlSchemas schemas = ExportType (typeof (ushort));
103 ArrayList qnames = GetXmlQualifiedNames (schemas);
104 Assert.AreEqual (1, qnames.Count, "#1");
106 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
107 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
109 Assert.IsNotNull (map, "#2");
110 Assert.AreEqual ("unsignedShort", map.ElementName, "#3");
111 Assert.AreEqual ("NSUInt16", map.Namespace, "#4");
112 Assert.AreEqual ("System.UInt16", map.TypeFullName, "#5");
113 Assert.AreEqual ("UInt16", map.TypeName, "#6");
117 public void ImportTypeMapping_XsdPrimitive_Int ()
119 XmlSchemas schemas = ExportType (typeof (int));
120 ArrayList qnames = GetXmlQualifiedNames (schemas);
121 Assert.AreEqual (1, qnames.Count, "#1");
123 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
124 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
126 Assert.IsNotNull (map, "#2");
127 Assert.AreEqual ("int", map.ElementName, "#3");
128 Assert.AreEqual ("NSInt32", map.Namespace, "#4");
129 Assert.AreEqual ("System.Int32", map.TypeFullName, "#5");
130 Assert.AreEqual ("Int32", map.TypeName, "#6");
134 public void ImportTypeMapping_XsdPrimitive_UnsignedInt ()
136 XmlSchemas schemas = ExportType (typeof (uint));
137 ArrayList qnames = GetXmlQualifiedNames (schemas);
138 Assert.AreEqual (1, qnames.Count, "#1");
140 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
141 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
143 Assert.IsNotNull (map, "#2");
144 Assert.AreEqual ("unsignedInt", map.ElementName, "#3");
145 Assert.AreEqual ("NSUInt32", map.Namespace, "#4");
146 Assert.AreEqual ("System.UInt32", map.TypeFullName, "#5");
147 Assert.AreEqual ("UInt32", map.TypeName, "#6");
151 public void ImportTypeMapping_XsdPrimitive_Long ()
153 XmlSchemas schemas = ExportType (typeof (long));
154 ArrayList qnames = GetXmlQualifiedNames (schemas);
155 Assert.AreEqual (1, qnames.Count, "#1");
157 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
158 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
160 Assert.IsNotNull (map, "#2");
161 Assert.AreEqual ("long", map.ElementName, "#3");
162 Assert.AreEqual ("NSInt64", map.Namespace, "#4");
163 Assert.AreEqual ("System.Int64", map.TypeFullName, "#5");
164 Assert.AreEqual ("Int64", map.TypeName, "#6");
168 public void ImportTypeMapping_XsdPrimitive_UnsignedLong ()
170 XmlSchemas schemas = ExportType (typeof (ulong));
171 ArrayList qnames = GetXmlQualifiedNames (schemas);
172 Assert.AreEqual (1, qnames.Count, "#1");
174 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
175 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
177 Assert.IsNotNull (map, "#2");
178 Assert.AreEqual ("unsignedLong", map.ElementName, "#3");
179 Assert.AreEqual ("NSUInt64", map.Namespace, "#4");
180 Assert.AreEqual ("System.UInt64", map.TypeFullName, "#5");
181 Assert.AreEqual ("UInt64", map.TypeName, "#6");
185 public void ImportTypeMapping_XsdPrimitive_Float ()
187 XmlSchemas schemas = ExportType (typeof (float));
188 ArrayList qnames = GetXmlQualifiedNames (schemas);
189 Assert.AreEqual (1, qnames.Count, "#1");
191 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
192 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
194 Assert.IsNotNull (map, "#2");
195 Assert.AreEqual ("float", map.ElementName, "#3");
196 Assert.AreEqual ("NSSingle", map.Namespace, "#4");
197 Assert.AreEqual ("System.Single", map.TypeFullName, "#5");
198 Assert.AreEqual ("Single", map.TypeName, "#6");
202 public void ImportTypeMapping_XsdPrimitive_Double ()
204 XmlSchemas schemas = ExportType (typeof (double));
205 ArrayList qnames = GetXmlQualifiedNames (schemas);
206 Assert.AreEqual (1, qnames.Count, "#1");
208 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
209 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
211 Assert.IsNotNull (map, "#2");
212 Assert.AreEqual ("double", map.ElementName, "#3");
213 Assert.AreEqual ("NSDouble", map.Namespace, "#4");
214 Assert.AreEqual ("System.Double", map.TypeFullName, "#5");
215 Assert.AreEqual ("Double", map.TypeName, "#6");
219 public void ImportTypeMapping_XsdPrimitive_DateTime ()
221 XmlSchemas schemas = ExportType (typeof (DateTime));
222 ArrayList qnames = GetXmlQualifiedNames (schemas);
223 Assert.AreEqual (1, qnames.Count, "#1");
225 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
226 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
228 Assert.IsNotNull (map, "#2");
229 Assert.AreEqual ("dateTime", map.ElementName, "#3");
230 Assert.AreEqual ("NSDateTime", map.Namespace, "#4");
231 Assert.AreEqual ("System.DateTime", map.TypeFullName, "#5");
232 Assert.AreEqual ("DateTime", map.TypeName, "#6");
236 public void ImportTypeMapping_XsdPrimitive_Decimal ()
238 XmlSchemas schemas = ExportType (typeof (decimal));
239 ArrayList qnames = GetXmlQualifiedNames (schemas);
240 Assert.AreEqual (1, qnames.Count, "#1");
242 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
243 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
245 Assert.IsNotNull (map, "#2");
246 Assert.AreEqual ("decimal", map.ElementName, "#3");
247 Assert.AreEqual ("NSDecimal", map.Namespace, "#4");
248 Assert.AreEqual ("System.Decimal", map.TypeFullName, "#5");
249 Assert.AreEqual ("Decimal", map.TypeName, "#6");
253 public void ImportTypeMapping_XsdPrimitive_QName ()
255 XmlSchemas schemas = ExportType (typeof (XmlQualifiedName));
256 ArrayList qnames = GetXmlQualifiedNames (schemas);
257 Assert.AreEqual (1, qnames.Count, "#1");
259 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
260 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
262 Assert.IsNotNull (map, "#2");
263 Assert.AreEqual ("QName", map.ElementName, "#3");
264 Assert.AreEqual ("NSXmlQualifiedName", map.Namespace, "#4");
265 Assert.AreEqual ("System.Xml.XmlQualifiedName", map.TypeFullName, "#5");
266 Assert.AreEqual ("XmlQualifiedName", map.TypeName, "#6");
270 public void ImportTypeMapping_XsdPrimitive_String ()
272 XmlSchemas schemas = ExportType (typeof (string));
273 ArrayList qnames = GetXmlQualifiedNames (schemas);
274 Assert.AreEqual (1, qnames.Count, "#1");
276 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
277 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
279 Assert.IsNotNull (map, "#2");
280 Assert.AreEqual ("string", map.ElementName, "#3");
281 Assert.AreEqual ("NSString", map.Namespace, "#4");
282 Assert.AreEqual ("System.String", map.TypeFullName, "#5");
283 Assert.AreEqual ("String", map.TypeName, "#6");
287 [Category ("NotWorking")]
288 [ExpectedException (typeof (XmlSchemaException))] // Type 'http://microsoft.com/wsdl/types/:guid' is not declared
289 public void ImportTypeMapping_XsdPrimitive_Guid ()
291 XmlSchemas schemas = ExportType (typeof (Guid));
292 GetXmlQualifiedNames (schemas);
296 public void ImportTypeMapping_XsdPrimitive_UnsignedByte ()
298 XmlSchemas schemas = ExportType (typeof (byte));
299 ArrayList qnames = GetXmlQualifiedNames (schemas);
300 Assert.AreEqual (1, qnames.Count, "#1");
302 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
303 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
305 Assert.IsNotNull (map, "#2");
306 Assert.AreEqual ("unsignedByte", map.ElementName, "#3");
307 Assert.AreEqual ("NSByte", map.Namespace, "#4");
308 Assert.AreEqual ("System.Byte", map.TypeFullName, "#5");
309 Assert.AreEqual ("Byte", map.TypeName, "#6");
313 public void ImportTypeMapping_XsdPrimitive_Byte ()
315 XmlSchemas schemas = ExportType (typeof (sbyte));
316 ArrayList qnames = GetXmlQualifiedNames (schemas);
317 Assert.AreEqual (1, qnames.Count, "#1");
319 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
320 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
322 Assert.IsNotNull (map, "#2");
323 Assert.AreEqual ("byte", map.ElementName, "#3");
324 Assert.AreEqual ("NSSByte", map.Namespace, "#4");
325 Assert.AreEqual ("System.SByte", map.TypeFullName, "#5");
326 Assert.AreEqual ("SByte", map.TypeName, "#6");
330 [Category ("NotWorking")]
331 [ExpectedException (typeof (XmlSchemaException))] // Type 'http://microsoft.com/wsdl/types/:char' is not declared
332 public void ImportTypeMapping_XsdPrimitive_Char ()
334 XmlSchemas schemas = ExportType (typeof (char));
335 GetXmlQualifiedNames (schemas);
339 public void ImportTypeMapping_XsdPrimitive_Base64Binary ()
341 XmlSchemas schemas = ExportType (typeof (byte[]));
342 ArrayList qnames = GetXmlQualifiedNames (schemas);
343 Assert.AreEqual (1, qnames.Count, "#1");
345 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
346 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
348 Assert.IsNotNull (map, "#2");
349 Assert.AreEqual ("base64Binary", map.ElementName, "#3");
350 Assert.AreEqual ("NSByte[]", map.Namespace, "#4");
351 Assert.AreEqual ("System.Byte[]", map.TypeFullName, "#5");
352 Assert.AreEqual ("Byte[]", map.TypeName, "#6");
356 [Category ("NotWorking")]
357 public void ImportTypeMapping_XsdPrimitive_Duration ()
359 string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
360 "<xs:schema xmlns:tns=\"NSDuration\" elementFormDefault=\"qualified\" targetNamespace=\"NSDuration\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
361 " <xs:element name=\"duration\" type=\"xs:duration\" />" +
364 XmlSchemas schemas = new XmlSchemas ();
365 schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
367 ArrayList qnames = GetXmlQualifiedNames (schemas);
368 Assert.AreEqual (1, qnames.Count, "#1");
370 XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
372 Assert.AreEqual ("duration", qname.Name, "#2");
373 Assert.AreEqual ("NSDuration", qname.Namespace, "#3");
375 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
376 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
378 Assert.IsNotNull (map, "#4");
379 Assert.AreEqual ("duration", map.ElementName, "#5");
380 Assert.AreEqual ("NSDuration", map.Namespace, "#6");
381 Assert.AreEqual ("System.String", map.TypeFullName, "#7");
382 Assert.AreEqual ("String", map.TypeName, "#8");
386 [Category ("NotWorking")]
387 public void ImportTypeMapping_XsdPrimitive_Date ()
389 string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
390 "<xs:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
391 " <xs:element name=\"date\" type=\"xs:date\" />" +
394 XmlSchemas schemas = new XmlSchemas ();
395 schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
397 ArrayList qnames = GetXmlQualifiedNames (schemas);
398 Assert.AreEqual (1, qnames.Count, "#1");
400 XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
402 Assert.AreEqual ("date", qname.Name, "#2");
403 Assert.AreEqual ("NSDate", qname.Namespace, "#3");
405 XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
406 XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
408 Assert.IsNotNull (map, "#4");
409 Assert.AreEqual ("date", map.ElementName, "#5");
410 Assert.AreEqual ("NSDate", map.Namespace, "#6");
411 Assert.AreEqual ("System.DateTime", map.TypeFullName, "#7");
412 Assert.AreEqual ("DateTime", map.TypeName, "#8");
415 private static XmlSchemas ExportType (Type type)
417 XmlReflectionImporter ri = new XmlReflectionImporter ("NS" + type.Name);
418 XmlSchemas schemas = new XmlSchemas ();
419 XmlSchemaExporter sx = new XmlSchemaExporter (schemas);
420 XmlTypeMapping tm = ri.ImportTypeMapping (type);
421 sx.ExportTypeMapping (tm);
425 private static ArrayList GetXmlQualifiedNames (XmlSchemas schemas)
427 ArrayList qnames = new ArrayList ();
429 foreach (XmlSchema schema in schemas) {
430 if (!schema.IsCompiled) schema.Compile (null);
431 foreach (XmlSchemaObject ob in schema.Items)
432 if (ob is XmlSchemaElement)
433 qnames.Add (((XmlSchemaElement) ob).QualifiedName);