2 // System.Xml.Serialization.XmlReflectionImporterTests
5 // Erik LeBel (eriklebel@yahoo.ca)
9 // FIXME test some of these with Xml Attributes attached to some members:
10 // do the names get carried over to Element for XmlAttributeAttribute and XmlElementAttribute?
14 using System.Collections;
16 using System.Xml.Schema;
17 using System.Xml.Serialization;
19 using NUnit.Framework;
21 using MonoTests.System.Xml.TestClasses;
23 namespace MonoTests.System.XmlSerialization
28 public static void Print(XmlTypeMapping tm)
30 Console.WriteLine("/XmlTypeMapping:");
31 Console.WriteLine("ElementName: {0} ", tm.ElementName);
32 Console.WriteLine("Namespace: {0} ", tm.Namespace);
33 Console.WriteLine("TypeName: {0} ", tm.TypeName);
34 Console.WriteLine("FullTypeName: {0} ", tm.TypeFullName);
37 public static void Print(XmlMemberMapping mm)
39 Console.WriteLine("/XmlMemberMapping:");
40 Console.WriteLine("Any: {0} ", mm.Any);
41 Console.WriteLine("ElementName: {0} ", mm.ElementName);
42 Console.WriteLine("MemberName: {0} ", mm.MemberName);
43 Console.WriteLine("Namespace: {0} ", mm.Namespace);
44 Console.WriteLine("TypeFullName: {0} ", mm.TypeFullName);
45 Console.WriteLine("TypeName: {0} ", mm.TypeName);
46 Console.WriteLine("TypeNamespace: {0} ", mm.TypeNamespace);
51 public class XmlReflectionImporterTests
53 private const string SomeNamespace = "some:urn";
54 private const string AnotherNamespace = "another:urn";
55 private const string XmlSchemaNamespace = "http://www.w3.org/2001/XMLSchema";
57 // these Map methods re-create the XmlReflectionImporter at every call.
59 private XmlTypeMapping Map(Type t)
61 XmlReflectionImporter ri = new XmlReflectionImporter();
62 XmlTypeMapping tm = ri.ImportTypeMapping(t);
68 private XmlTypeMapping Map(Type t, XmlRootAttribute root)
70 XmlReflectionImporter ri = new XmlReflectionImporter();
71 XmlTypeMapping tm = ri.ImportTypeMapping(t, root);
76 private XmlTypeMapping Map(Type t, string ns)
78 XmlReflectionImporter ri = new XmlReflectionImporter(ns);
79 XmlTypeMapping tm = ri.ImportTypeMapping(t);
85 private XmlTypeMapping Map (Type t, string ns, XmlRootAttribute root)
87 XmlReflectionImporter ri = new XmlReflectionImporter (ns);
88 XmlTypeMapping tm = ri.ImportTypeMapping (t, root);
93 private XmlTypeMapping Map(Type t, XmlAttributeOverrides overrides)
95 XmlReflectionImporter ri = new XmlReflectionImporter(overrides);
96 XmlTypeMapping tm = ri.ImportTypeMapping(t);
102 private XmlMembersMapping MembersMap(Type t, XmlAttributeOverrides overrides,
103 XmlReflectionMember [] members, bool inContainer)
105 XmlReflectionImporter ri = new XmlReflectionImporter(overrides);
106 XmlMembersMapping mm = ri.ImportMembersMapping(null, null, members, inContainer);
112 public void TestIntTypeMapping()
114 XmlTypeMapping tm = Map(typeof(int));
115 Assert.AreEqual ("int", tm.ElementName, "#1");
116 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
117 Assert.AreEqual ("Int32", tm.TypeName, "#3");
118 Assert.AreEqual ("System.Int32", tm.TypeFullName, "#4");
123 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
125 public void TestIntTypeMapping_Array ()
127 XmlTypeMapping tm = Map(typeof(int[]));
128 Assert.AreEqual ("ArrayOfInt", tm.ElementName, "#A1");
129 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
131 Assert.AreEqual ("ArrayOfInt32", tm.TypeName, "#A3");
133 Assert.AreEqual ("Int32[]", tm.TypeName, "#A3");
135 Assert.AreEqual ("System.Int32[]", tm.TypeFullName, "#A4");
137 tm = Map (typeof (int[][]));
138 Assert.AreEqual ("ArrayOfArrayOfInt", tm.ElementName, "#B1");
139 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
141 Assert.AreEqual ("ArrayOfArrayOfInt32", tm.TypeName, "#B3");
143 Assert.AreEqual ("Int32[][]", tm.TypeName, "#B3");
145 Assert.AreEqual ("System.Int32[][]", tm.TypeFullName, "#B4");
147 tm = Map (typeof (int[][][]));
148 Assert.AreEqual ("ArrayOfArrayOfArrayOfInt", tm.ElementName, "#C1");
149 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
151 Assert.AreEqual ("ArrayOfArrayOfArrayOfInt32", tm.TypeName, "#C3");
153 Assert.AreEqual ("Int32[][][]", tm.TypeName, "#C3");
155 Assert.AreEqual ("System.Int32[][][]", tm.TypeFullName, "#C4");
159 public void TestStringTypeMapping()
161 XmlTypeMapping tm = Map(typeof(string));
162 Assert.AreEqual ("string", tm.ElementName, "#1");
163 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
164 Assert.AreEqual ("String", tm.TypeName, "#3");
165 Assert.AreEqual ("System.String", tm.TypeFullName, "#4");
170 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
172 public void TestStringTypeMapping_Array ()
174 XmlTypeMapping tm = Map (typeof (string[]));
175 Assert.AreEqual ("ArrayOfString", tm.ElementName, "#A1");
176 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
178 Assert.AreEqual ("ArrayOfString", tm.TypeName, "#A3");
180 Assert.AreEqual ("String[]", tm.TypeName, "#A3");
182 Assert.AreEqual ("System.String[]", tm.TypeFullName, "#A4");
184 tm = Map (typeof (string[][]));
185 Assert.AreEqual ("ArrayOfArrayOfString", tm.ElementName, "#B1");
186 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
188 Assert.AreEqual ("ArrayOfArrayOfString", tm.TypeName, "#B3");
190 Assert.AreEqual ("String[][]", tm.TypeName, "#B3");
192 Assert.AreEqual ("System.String[][]", tm.TypeFullName, "#B4");
194 tm = Map (typeof (string[][][]));
195 Assert.AreEqual ("ArrayOfArrayOfArrayOfString", tm.ElementName, "#C1");
196 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
198 Assert.AreEqual ("ArrayOfArrayOfArrayOfString", tm.TypeName, "#C3");
200 Assert.AreEqual ("String[][][]", tm.TypeName, "#C3");
202 Assert.AreEqual ("System.String[][][]", tm.TypeFullName, "#C4");
206 public void TestObjectTypeMapping()
208 XmlTypeMapping tm = Map(typeof(object));
209 Assert.AreEqual ("anyType", tm.ElementName, "#1");
210 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
211 Assert.AreEqual ("Object", tm.TypeName, "#3");
212 Assert.AreEqual ("System.Object", tm.TypeFullName, "#4");
217 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
219 public void TestObjectTypeMapping_Array ()
221 XmlTypeMapping tm = Map (typeof (object[]));
222 Assert.AreEqual ("ArrayOfAnyType", tm.ElementName, "#A1");
223 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
225 Assert.AreEqual ("ArrayOfObject", tm.TypeName, "#A3");
227 Assert.AreEqual ("Object[]", tm.TypeName, "#A3");
229 Assert.AreEqual ("System.Object[]", tm.TypeFullName, "#A4");
231 tm = Map (typeof (object[][]));
232 Assert.AreEqual ("ArrayOfArrayOfAnyType", tm.ElementName, "#B1");
233 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
235 Assert.AreEqual ("ArrayOfArrayOfObject", tm.TypeName, "#B3");
237 Assert.AreEqual ("Object[][]", tm.TypeName, "#B3");
239 Assert.AreEqual ("System.Object[][]", tm.TypeFullName, "#B4");
241 tm = Map (typeof (object[][][]));
242 Assert.AreEqual ("ArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#C1");
243 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
245 Assert.AreEqual ("ArrayOfArrayOfArrayOfObject", tm.TypeName, "#C3");
247 Assert.AreEqual ("Object[][][]", tm.TypeName, "#C3");
249 Assert.AreEqual ("System.Object[][][]", tm.TypeFullName, "#C4");
253 public void TestByteTypeMapping()
255 XmlTypeMapping tm = Map(typeof(byte));
256 Assert.AreEqual ("unsignedByte", tm.ElementName, "#1");
257 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
258 Assert.AreEqual ("Byte", tm.TypeName, "#3");
259 Assert.AreEqual ("System.Byte", tm.TypeFullName, "#4");
264 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
266 public void TestByteTypeMapping_Array ()
268 XmlTypeMapping tm = Map(typeof(byte[]));
269 Assert.AreEqual ("base64Binary", tm.ElementName, "#A1");
270 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
271 Assert.AreEqual ("Byte[]", tm.TypeName, "#A3");
272 Assert.AreEqual ("System.Byte[]", tm.TypeFullName, "#A4");
274 tm = Map (typeof (byte[][]));
275 Assert.AreEqual ("ArrayOfBase64Binary", tm.ElementName, "#B1");
276 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
278 Assert.AreEqual ("ArrayOfArrayOfByte", tm.TypeName, "#B3");
280 Assert.AreEqual ("Byte[][]", tm.TypeName, "#B3");
282 Assert.AreEqual ("System.Byte[][]", tm.TypeFullName, "#B4");
284 tm = Map (typeof (byte[][][]));
285 Assert.AreEqual ("ArrayOfArrayOfBase64Binary", tm.ElementName, "#C1");
286 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
288 Assert.AreEqual ("ArrayOfArrayOfArrayOfByte", tm.TypeName, "#C3");
290 Assert.AreEqual ("Byte[][][]", tm.TypeName, "#C3");
292 Assert.AreEqual ("System.Byte[][][]", tm.TypeFullName, "#C4");
296 public void TestBoolTypeMapping()
298 XmlTypeMapping tm = Map(typeof(bool));
299 Assert.AreEqual ("boolean", tm.ElementName, "#1");
300 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
301 Assert.AreEqual ("Boolean", tm.TypeName, "#3");
302 Assert.AreEqual ("System.Boolean", tm.TypeFullName, "#4");
306 public void TestShortTypeMapping()
308 XmlTypeMapping tm = Map(typeof(short));
309 Assert.AreEqual ("short", tm.ElementName, "#1");
310 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
311 Assert.AreEqual ("Int16", tm.TypeName, "#3");
312 Assert.AreEqual ("System.Int16", tm.TypeFullName, "#4");
316 public void TestUnsignedShortTypeMapping()
318 XmlTypeMapping tm = Map(typeof(ushort));
319 Assert.AreEqual ("unsignedShort", tm.ElementName, "#1");
320 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
321 Assert.AreEqual ("UInt16", tm.TypeName, "#3");
322 Assert.AreEqual ("System.UInt16", tm.TypeFullName, "#4");
326 public void TestUIntTypeMapping()
328 XmlTypeMapping tm = Map(typeof(uint));
329 Assert.AreEqual ("unsignedInt", tm.ElementName, "#1");
330 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
331 Assert.AreEqual ("UInt32", tm.TypeName, "#3");
332 Assert.AreEqual ("System.UInt32", tm.TypeFullName, "#4");
336 public void TestLongTypeMapping()
338 XmlTypeMapping tm = Map(typeof(long));
339 Assert.AreEqual ("long", tm.ElementName, "#1");
340 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
341 Assert.AreEqual ("Int64", tm.TypeName, "#3");
342 Assert.AreEqual ("System.Int64", tm.TypeFullName, "#4");
346 public void TestULongTypeMapping()
348 XmlTypeMapping tm = Map(typeof(ulong));
349 Assert.AreEqual ("unsignedLong", tm.ElementName, "#1");
350 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
351 Assert.AreEqual ("UInt64", tm.TypeName, "#3");
352 Assert.AreEqual ("System.UInt64", tm.TypeFullName, "#4");
356 public void TestFloatTypeMapping()
358 XmlTypeMapping tm = Map(typeof(float));
359 Assert.AreEqual ("float", tm.ElementName, "#1");
360 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
361 Assert.AreEqual ("Single", tm.TypeName, "#3");
362 Assert.AreEqual ("System.Single", tm.TypeFullName, "#4");
366 public void TestDoubleTypeMapping()
368 XmlTypeMapping tm = Map(typeof(double));
369 Assert.AreEqual ("double", tm.ElementName, "#1");
370 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
371 Assert.AreEqual ("Double", tm.TypeName, "#3");
372 Assert.AreEqual ("System.Double", tm.TypeFullName, "#4");
376 public void TestDateTimeTypeMapping()
378 XmlTypeMapping tm = Map(typeof(DateTime));
379 Assert.AreEqual ("dateTime", tm.ElementName, "#1");
380 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
381 Assert.AreEqual ("DateTime", tm.TypeName, "#3");
382 Assert.AreEqual ("System.DateTime", tm.TypeFullName, "#4");
387 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
389 public void TestDateTimeTypeMapping_Array ()
391 XmlTypeMapping tm = Map (typeof (DateTime[]));
392 Assert.AreEqual ("ArrayOfDateTime", tm.ElementName, "#A1");
393 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
395 Assert.AreEqual ("ArrayOfDateTime", tm.TypeName, "#A3");
397 Assert.AreEqual ("DateTime[]", tm.TypeName, "#A3");
399 Assert.AreEqual ("System.DateTime[]", tm.TypeFullName, "#A4");
401 tm = Map (typeof (DateTime[][]));
402 Assert.AreEqual ("ArrayOfArrayOfDateTime", tm.ElementName, "#B1");
403 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
405 Assert.AreEqual ("ArrayOfArrayOfDateTime", tm.TypeName, "#B3");
407 Assert.AreEqual ("DateTime[][]", tm.TypeName, "#B3");
409 Assert.AreEqual ("System.DateTime[][]", tm.TypeFullName, "#B4");
411 tm = Map (typeof (DateTime[][][]));
412 Assert.AreEqual ("ArrayOfArrayOfArrayOfDateTime", tm.ElementName, "#C1");
413 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
415 Assert.AreEqual ("ArrayOfArrayOfArrayOfDateTime", tm.TypeName, "#C3");
417 Assert.AreEqual ("DateTime[][][]", tm.TypeName, "#C3");
419 Assert.AreEqual ("System.DateTime[][][]", tm.TypeFullName, "#C4");
423 public void TestGuidTypeMapping()
425 XmlTypeMapping tm = Map(typeof(Guid));
426 Assert.AreEqual ("guid", tm.ElementName, "#1");
427 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
428 Assert.AreEqual ("Guid", tm.TypeName, "#3");
429 Assert.AreEqual ("System.Guid", tm.TypeFullName, "#4");
434 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
436 public void TestGuidTypeMapping_Array ()
438 XmlTypeMapping tm = Map (typeof (Guid[]));
439 Assert.AreEqual ("ArrayOfGuid", tm.ElementName, "#A1");
440 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
442 Assert.AreEqual ("ArrayOfGuid", tm.TypeName, "#A3");
444 Assert.AreEqual ("Guid[]", tm.TypeName, "#A3");
446 Assert.AreEqual ("System.Guid[]", tm.TypeFullName, "#A4");
448 tm = Map (typeof (Guid[][]));
449 Assert.AreEqual ("ArrayOfArrayOfGuid", tm.ElementName, "#B1");
450 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
452 Assert.AreEqual ("ArrayOfArrayOfGuid", tm.TypeName, "#B3");
454 Assert.AreEqual ("Guid[][]", tm.TypeName, "#B3");
456 Assert.AreEqual ("System.Guid[][]", tm.TypeFullName, "#B4");
458 tm = Map (typeof (Guid[][][]));
459 Assert.AreEqual ("ArrayOfArrayOfArrayOfGuid", tm.ElementName, "#C1");
460 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
462 Assert.AreEqual ("ArrayOfArrayOfArrayOfGuid", tm.TypeName, "#C3");
464 Assert.AreEqual ("Guid[][][]", tm.TypeName, "#C3");
466 Assert.AreEqual ("System.Guid[][][]", tm.TypeFullName, "#C4");
470 public void TestDecimalTypeMapping()
472 XmlTypeMapping tm = Map(typeof(decimal));
473 Assert.AreEqual ("decimal", tm.ElementName, "#1");
474 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
475 Assert.AreEqual ("Decimal", tm.TypeName, "#3");
476 Assert.AreEqual ("System.Decimal", tm.TypeFullName, "#4");
480 public void TestXmlQualifiedNameTypeMapping()
482 XmlTypeMapping tm = Map(typeof(XmlQualifiedName));
483 Assert.AreEqual ("QName", tm.ElementName, "#1");
484 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
485 Assert.AreEqual ("XmlQualifiedName", tm.TypeName, "#3");
486 Assert.AreEqual ("System.Xml.XmlQualifiedName", tm.TypeFullName, "#4");
490 public void TestSByteTypeMapping()
492 XmlTypeMapping tm = Map(typeof(sbyte));
493 Assert.AreEqual ("byte", tm.ElementName, "#1");
494 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
495 Assert.AreEqual ("SByte", tm.TypeName, "#3");
496 Assert.AreEqual ("System.SByte", tm.TypeFullName, "#4");
501 public void TestCharTypeMapping()
503 XmlTypeMapping tm = Map(typeof(char));
504 Assert.AreEqual ("char", tm.ElementName, "#1");
505 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
506 Assert.AreEqual ("Char", tm.TypeName, "#3");
507 Assert.AreEqual ("System.Char", tm.TypeFullName, "#4");
512 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
514 public void TestCharTypeMapping_Array ()
516 XmlTypeMapping tm = Map (typeof (char[]));
517 Assert.AreEqual ("ArrayOfChar", tm.ElementName, "#A1");
518 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
520 Assert.AreEqual ("ArrayOfChar", tm.TypeName, "#A3");
522 Assert.AreEqual ("Char[]", tm.TypeName, "#A3");
524 Assert.AreEqual ("System.Char[]", tm.TypeFullName, "#A4");
526 tm = Map (typeof (char[][]));
527 Assert.AreEqual ("ArrayOfArrayOfChar", tm.ElementName, "#B1");
528 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
530 Assert.AreEqual ("ArrayOfArrayOfChar", tm.TypeName, "#B3");
532 Assert.AreEqual ("Char[][]", tm.TypeName, "#B3");
534 Assert.AreEqual ("System.Char[][]", tm.TypeFullName, "#B4");
536 tm = Map (typeof (char[][][]));
537 Assert.AreEqual ("ArrayOfArrayOfArrayOfChar", tm.ElementName, "#C1");
538 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
540 Assert.AreEqual ("ArrayOfArrayOfArrayOfChar", tm.TypeName, "#C3");
542 Assert.AreEqual ("Char[][][]", tm.TypeName, "#C3");
544 Assert.AreEqual ("System.Char[][][]", tm.TypeFullName, "#C4");
548 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
549 public void TestXmlNodeTypeMapping ()
551 Type type = typeof (XmlNode);
553 XmlTypeMapping tm = Map (type);
554 Assert.AreEqual (string.Empty, tm.ElementName, "#A1");
555 Assert.IsNull (tm.Namespace, "#A2");
556 Assert.AreEqual ("XmlNode", tm.TypeName, "#A3");
557 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#A4");
559 tm = Map (type, AnotherNamespace);
560 Assert.AreEqual (string.Empty, tm.ElementName, "#B1");
561 Assert.IsNull (tm.Namespace, "#B2");
562 Assert.AreEqual ("XmlNode", tm.TypeName, "#B3");
563 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#B4");
565 XmlRootAttribute root = new XmlRootAttribute ("somename");
566 root.Namespace = SomeNamespace;
567 tm = Map (type, root);
568 Assert.AreEqual ("somename", tm.ElementName, "#C1");
569 Assert.IsNull (tm.Namespace, "#C2");
570 Assert.AreEqual ("XmlNode", tm.TypeName, "#C3");
571 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#C4");
573 tm = Map (type, AnotherNamespace, root);
574 Assert.AreEqual ("somename", tm.ElementName, "#D1");
575 Assert.IsNull (tm.Namespace, "#D2");
576 Assert.AreEqual ("XmlNode", tm.TypeName, "#D3");
577 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#D4");
579 root.Namespace = null;
580 tm = Map (type, root);
581 Assert.AreEqual ("somename", tm.ElementName, "#E1");
582 Assert.IsNull (tm.Namespace, "#E2");
583 Assert.AreEqual ("XmlNode", tm.TypeName, "#E3");
584 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#E4");
586 tm = Map (type, AnotherNamespace, root);
587 Assert.AreEqual ("somename", tm.ElementName, "#F1");
588 Assert.IsNull (tm.Namespace, "#F2");
589 Assert.AreEqual ("XmlNode", tm.TypeName, "#F3");
590 Assert.AreEqual ("System.Xml.XmlNode", tm.TypeFullName, "#F4");
594 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
595 public void TestXmlElementTypeMapping ()
597 Type type = typeof (XmlElement);
599 XmlTypeMapping tm = Map (type);
600 Assert.AreEqual (string.Empty, tm.ElementName, "#1");
601 Assert.IsNull (tm.Namespace, "#2");
602 Assert.AreEqual ("XmlElement", tm.TypeName, "#3");
603 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#4");
605 tm = Map (type, AnotherNamespace);
606 Assert.AreEqual (string.Empty, tm.ElementName, "#B1");
607 Assert.IsNull (tm.Namespace, "#B2");
608 Assert.AreEqual ("XmlElement", tm.TypeName, "#B3");
609 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#B4");
611 XmlRootAttribute root = new XmlRootAttribute ("somename");
612 root.Namespace = SomeNamespace;
613 tm = Map (type, root);
614 Assert.AreEqual ("somename", tm.ElementName, "#C1");
615 Assert.IsNull (tm.Namespace, "#C2");
616 Assert.AreEqual ("XmlElement", tm.TypeName, "#C3");
617 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#C4");
619 tm = Map (type, AnotherNamespace, root);
620 Assert.AreEqual ("somename", tm.ElementName, "#D1");
621 Assert.IsNull (tm.Namespace, "#D2");
622 Assert.AreEqual ("XmlElement", tm.TypeName, "#D3");
623 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#D4");
625 root.Namespace = null;
626 tm = Map (type, root);
627 Assert.AreEqual ("somename", tm.ElementName, "#E1");
628 Assert.IsNull (tm.Namespace, "#E2");
629 Assert.AreEqual ("XmlElement", tm.TypeName, "#E3");
630 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#E4");
632 tm = Map (type, AnotherNamespace, root);
633 Assert.AreEqual ("somename", tm.ElementName, "#F1");
634 Assert.IsNull (tm.Namespace, "#F2");
635 Assert.AreEqual ("XmlElement", tm.TypeName, "#F3");
636 Assert.AreEqual ("System.Xml.XmlElement", tm.TypeFullName, "#F4");
640 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
641 public void TestXmlNotationTypeMapping ()
643 Type type = typeof (XmlNotation);
645 XmlTypeMapping tm = Map (type);
646 Assert.AreEqual (string.Empty, tm.ElementName, "#1");
647 Assert.IsNull (tm.Namespace, "#2");
648 Assert.AreEqual ("XmlNotation", tm.TypeName, "#3");
649 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#4");
651 tm = Map (type, AnotherNamespace);
652 Assert.AreEqual (string.Empty, tm.ElementName, "#B1");
653 Assert.IsNull (tm.Namespace, "#B2");
654 Assert.AreEqual ("XmlNotation", tm.TypeName, "#B3");
655 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#B4");
657 XmlRootAttribute root = new XmlRootAttribute ("somename");
658 root.Namespace = SomeNamespace;
659 tm = Map (type, root);
660 Assert.AreEqual ("somename", tm.ElementName, "#C1");
661 Assert.IsNull (tm.Namespace, "#C2");
662 Assert.AreEqual ("XmlNotation", tm.TypeName, "#C3");
663 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#C4");
665 tm = Map (type, AnotherNamespace, root);
666 Assert.AreEqual ("somename", tm.ElementName, "#D1");
667 Assert.IsNull (tm.Namespace, "#D2");
668 Assert.AreEqual ("XmlNotation", tm.TypeName, "#D3");
669 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#D4");
671 root.Namespace = null;
672 tm = Map (type, root);
673 Assert.AreEqual ("somename", tm.ElementName, "#E1");
674 Assert.IsNull (tm.Namespace, "#E2");
675 Assert.AreEqual ("XmlNotation", tm.TypeName, "#E3");
676 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#E4");
678 tm = Map (type, AnotherNamespace, root);
679 Assert.AreEqual ("somename", tm.ElementName, "#F1");
680 Assert.IsNull (tm.Namespace, "#F2");
681 Assert.AreEqual ("XmlNotation", tm.TypeName, "#F3");
682 Assert.AreEqual ("System.Xml.XmlNotation", tm.TypeFullName, "#F4");
686 public void TestXmlSerializableTypeMapping ()
688 XmlTypeMapping tm = Map (typeof (Employee));
689 Assert.AreEqual ("Employee", tm.ElementName, "#1");
690 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
691 Assert.AreEqual ("Employee", tm.TypeName, "#3");
692 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.Employee", tm.TypeFullName, "#4");
697 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
699 public void TestXmlSerializableTypeMapping_Array ()
701 XmlTypeMapping tm = Map (typeof (Employee[]));
702 Assert.AreEqual ("ArrayOfEmployee", tm.ElementName, "#A1");
703 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
705 Assert.AreEqual ("ArrayOfEmployee", tm.TypeName, "#A3");
707 Assert.AreEqual ("Employee[]", tm.TypeName, "#A3");
709 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.Employee[]", tm.TypeFullName, "#A4");
711 tm = Map (typeof (Employee[][]));
712 Assert.AreEqual ("ArrayOfArrayOfEmployee", tm.ElementName, "#B1");
713 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
715 Assert.AreEqual ("ArrayOfArrayOfEmployee", tm.TypeName, "#B3");
717 Assert.AreEqual ("Employee[][]", tm.TypeName, "#B3");
719 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.Employee[][]", tm.TypeFullName, "#B4");
721 tm = Map (typeof (Employee[][][]));
722 Assert.AreEqual ("ArrayOfArrayOfArrayOfEmployee", tm.ElementName, "#C1");
723 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
725 Assert.AreEqual ("ArrayOfArrayOfArrayOfEmployee", tm.TypeName, "#C3");
727 Assert.AreEqual ("Employee[][][]", tm.TypeName, "#C3");
729 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.Employee[][][]", tm.TypeFullName, "#C4");
733 public void TestClassTypeMapping_NestedStruct ()
735 XmlTypeMapping tm = Map (typeof (NestedStruct));
736 Assert.AreEqual ("NestedStruct", tm.ElementName, "#1");
737 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
738 Assert.AreEqual ("NestedStruct", tm.TypeName, "#3");
739 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.NestedStruct", tm.TypeFullName, "#4");
743 [ExpectedException (typeof (ArgumentNullException))]
744 public void TestNullTypeMapping()
750 public void TestIntTypeMappingWithDefaultNamespaces()
752 XmlTypeMapping tm = Map(typeof(int), SomeNamespace);
753 Assert.AreEqual ("int", tm.ElementName, "#1");
754 Assert.AreEqual (SomeNamespace, tm.Namespace, "#2");
755 Assert.AreEqual ("Int32", tm.TypeName, "#3");
756 Assert.AreEqual ("System.Int32", tm.TypeFullName, "#4");
760 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
761 public void TestStructTypeMapping ()
763 XmlTypeMapping tm = Map (typeof (TimeSpan));
764 Assert.AreEqual ("TimeSpan", tm.ElementName, "#1");
765 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
766 Assert.AreEqual ("TimeSpan", tm.TypeName, "#3");
767 Assert.AreEqual ("System.TimeSpan", tm.TypeFullName, "#4");
771 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
772 public void TestStructTypeMapping_Array ()
774 XmlTypeMapping tm = Map (typeof (TimeSpan[]));
775 Assert.AreEqual ("ArrayOfTimeSpan", tm.ElementName, "#A1");
776 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
778 Assert.AreEqual ("ArrayOfTimeSpan", tm.TypeName, "#A3");
780 Assert.AreEqual ("TimeSpan[]", tm.TypeName, "#A3");
782 Assert.AreEqual ("System.TimeSpan[]", tm.TypeFullName, "#A4");
784 tm = Map (typeof (TimeSpan[][]));
785 Assert.AreEqual ("ArrayOfArrayOfTimeSpan", tm.ElementName, "#B1");
786 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
788 Assert.AreEqual ("ArrayOfArrayOfTimeSpan", tm.TypeName, "#B3");
790 Assert.AreEqual ("TimeSpan[][]", tm.TypeName, "#B3");
792 Assert.AreEqual ("System.TimeSpan[][]", tm.TypeFullName, "#B4");
794 tm = Map (typeof (TimeSpan[][][]));
795 Assert.AreEqual ("ArrayOfArrayOfArrayOfTimeSpan", tm.ElementName, "#C1");
796 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
798 Assert.AreEqual ("ArrayOfArrayOfArrayOfTimeSpan", tm.TypeName, "#C3");
800 Assert.AreEqual ("TimeSpan[][][]", tm.TypeName, "#C3");
802 Assert.AreEqual ("System.TimeSpan[][][]", tm.TypeFullName, "#C4");
806 public void TestEnumTypeMapping ()
808 XmlTypeMapping tm = Map (typeof (AttributeTargets));
809 Assert.AreEqual ("AttributeTargets", tm.ElementName, "#1");
810 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
811 Assert.AreEqual ("AttributeTargets", tm.TypeName, "#3");
812 Assert.AreEqual ("System.AttributeTargets", tm.TypeFullName, "#4");
817 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
819 public void TestEnumTypeMapping_Array ()
821 XmlTypeMapping tm = Map (typeof (AttributeTargets[]));
822 Assert.AreEqual ("ArrayOfAttributeTargets", tm.ElementName, "#A1");
823 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
825 Assert.AreEqual ("ArrayOfAttributeTargets", tm.TypeName, "#A3");
827 Assert.AreEqual ("AttributeTargets[]", tm.TypeName, "#A3");
829 Assert.AreEqual ("System.AttributeTargets[]", tm.TypeFullName, "#A4");
831 tm = Map (typeof (AttributeTargets[][]));
832 Assert.AreEqual ("ArrayOfArrayOfAttributeTargets", tm.ElementName, "#B1");
833 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
835 Assert.AreEqual ("ArrayOfArrayOfAttributeTargets", tm.TypeName, "#B3");
837 Assert.AreEqual ("AttributeTargets[][]", tm.TypeName, "#B3");
839 Assert.AreEqual ("System.AttributeTargets[][]", tm.TypeFullName, "#B4");
841 tm = Map (typeof (AttributeTargets[][][]));
842 Assert.AreEqual ("ArrayOfArrayOfArrayOfAttributeTargets", tm.ElementName, "#C1");
843 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
845 Assert.AreEqual ("ArrayOfArrayOfArrayOfAttributeTargets", tm.TypeName, "#C3");
847 Assert.AreEqual ("AttributeTargets[][][]", tm.TypeName, "#C3");
849 Assert.AreEqual ("System.AttributeTargets[][][]", tm.TypeFullName, "#C4");
853 public void TestClassTypeMapping()
855 XmlTypeMapping tm = Map (typeof (SimpleClass));
856 Assert.AreEqual ("SimpleClass", tm.ElementName, "#1");
857 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
858 Assert.AreEqual ("SimpleClass", tm.TypeName, "#3");
859 Assert.AreEqual ("MonoTests.System.Xml.TestClasses.SimpleClass", tm.TypeFullName, "#4");
864 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
866 public void TestClassTypeMapping_Array ()
868 XmlTypeMapping tm = Map (typeof (SimpleClass[]));
869 Assert.AreEqual ("ArrayOfSimpleClass", tm.ElementName, "#A1");
870 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
872 Assert.AreEqual ("ArrayOfSimpleClass", tm.TypeName, "#A3");
874 Assert.AreEqual ("SimpleClass[]", tm.TypeName, "#A3");
876 Assert.AreEqual ("MonoTests.System.Xml.TestClasses.SimpleClass[]", tm.TypeFullName, "#A4");
878 tm = Map (typeof (SimpleClass[][]));
879 Assert.AreEqual ("ArrayOfArrayOfSimpleClass", tm.ElementName, "#B1");
880 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
882 Assert.AreEqual ("ArrayOfArrayOfSimpleClass", tm.TypeName, "#B3");
884 Assert.AreEqual ("SimpleClass[][]", tm.TypeName, "#B3");
886 Assert.AreEqual ("MonoTests.System.Xml.TestClasses.SimpleClass[][]", tm.TypeFullName, "#B4");
888 tm = Map (typeof (SimpleClass[][][]));
889 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClass", tm.ElementName, "#C1");
890 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
892 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClass", tm.TypeName, "#C3");
894 Assert.AreEqual ("SimpleClass[][][]", tm.TypeName, "#C3");
896 Assert.AreEqual ("MonoTests.System.Xml.TestClasses.SimpleClass[][][]", tm.TypeFullName, "#C4");
900 [ExpectedException (typeof (NotSupportedException))]
901 public void TypeMapping_IDictionary ()
903 // The type MonoTests.System.Xml.TestClasses.DictionaryWithIndexer
904 // is not supported because it implements IDictionary.
905 Map (typeof (DictionaryWithIndexer));
910 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
912 public void TypeMapping_IEnumerable_SimpleClass ()
914 XmlTypeMapping tm = Map (typeof (SimpleClassEnumerable));
915 Assert.AreEqual ("ArrayOfSimpleClass", tm.ElementName, "#1");
916 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
917 Assert.AreEqual ("SimpleClassEnumerable", tm.TypeName, "#3");
918 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerable", tm.TypeFullName, "#4");
920 tm = Map (typeof (SimpleClassEnumerable[]));
921 Assert.AreEqual ("ArrayOfArrayOfSimpleClass", tm.ElementName, "#A1");
922 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
924 Assert.AreEqual ("ArrayOfSimpleClassEnumerable", tm.TypeName, "#A3");
926 Assert.AreEqual ("SimpleClassEnumerable[]", tm.TypeName, "#A3");
928 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerable[]", tm.TypeFullName, "#A4");
930 tm = Map (typeof (SimpleClassEnumerable[][]));
931 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClass", tm.ElementName, "#B1");
932 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
934 Assert.AreEqual ("ArrayOfArrayOfSimpleClassEnumerable", tm.TypeName, "#B3");
936 Assert.AreEqual ("SimpleClassEnumerable[][]", tm.TypeName, "#B3");
938 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerable[][]", tm.TypeFullName, "#B4");
940 tm = Map (typeof (SimpleClassEnumerable[][][]));
941 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfSimpleClass", tm.ElementName, "#C1");
942 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
944 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClassEnumerable", tm.TypeName, "#C3");
946 Assert.AreEqual ("SimpleClassEnumerable[][][]", tm.TypeName, "#C3");
948 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerable[][][]", tm.TypeFullName, "#C4");
953 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
955 public void TypeMapping_IEnumerable_Object ()
957 XmlTypeMapping tm = Map (typeof (ObjectEnumerable));
958 Assert.AreEqual ("ArrayOfAnyType", tm.ElementName, "#1");
959 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
960 Assert.AreEqual ("ObjectEnumerable", tm.TypeName, "#3");
961 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectEnumerable", tm.TypeFullName, "#4");
963 tm = Map (typeof (ObjectEnumerable[]));
964 Assert.AreEqual ("ArrayOfArrayOfAnyType", tm.ElementName, "#A1");
965 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
967 Assert.AreEqual ("ArrayOfObjectEnumerable", tm.TypeName, "#A3");
969 Assert.AreEqual ("ObjectEnumerable[]", tm.TypeName, "#A3");
971 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectEnumerable[]", tm.TypeFullName, "#A4");
973 tm = Map (typeof (ObjectEnumerable[][]));
974 Assert.AreEqual ("ArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#B1");
975 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
977 Assert.AreEqual ("ArrayOfArrayOfObjectEnumerable", tm.TypeName, "#B3");
979 Assert.AreEqual ("ObjectEnumerable[][]", tm.TypeName, "#B3");
981 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectEnumerable[][]", tm.TypeFullName, "#B4");
983 tm = Map (typeof (ObjectEnumerable[][][]));
984 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#C1");
985 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
987 Assert.AreEqual ("ArrayOfArrayOfArrayOfObjectEnumerable", tm.TypeName, "#C3");
989 Assert.AreEqual ("ObjectEnumerable[][][]", tm.TypeName, "#C3");
991 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectEnumerable[][][]", tm.TypeFullName, "#C4");
995 [ExpectedException (typeof (InvalidOperationException))]
996 public void TypeMapping_IEnumerable_Object_NoMatchingAddMethod ()
998 Map (typeof (ObjectEnumerableNoMatchingAddMethod));
1002 [ExpectedException (typeof (InvalidOperationException))]
1003 public void TypeMapping_IEnumerable_Object_NoMatchingAddMethod_Array ()
1005 Map (typeof (ObjectEnumerableNoMatchingAddMethod[]));
1010 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
1012 public void TypeMapping_IEnumerable_SimpleClass_PrivateCurrent ()
1014 XmlTypeMapping tm = Map (typeof (SimpleClassEnumerablePrivateCurrent));
1015 Assert.AreEqual ("ArrayOfAnyType", tm.ElementName, "#1");
1016 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
1017 Assert.AreEqual ("SimpleClassEnumerablePrivateCurrent", tm.TypeName, "#3");
1018 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateCurrent", tm.TypeFullName, "#4");
1020 tm = Map (typeof (SimpleClassEnumerablePrivateCurrent[]));
1021 Assert.AreEqual ("ArrayOfArrayOfAnyType", tm.ElementName, "#A1");
1022 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
1024 Assert.AreEqual ("ArrayOfSimpleClassEnumerablePrivateCurrent", tm.TypeName, "#A3");
1026 Assert.AreEqual ("SimpleClassEnumerablePrivateCurrent[]", tm.TypeName, "#A3");
1028 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateCurrent[]", tm.TypeFullName, "#A4");
1030 tm = Map (typeof (SimpleClassEnumerablePrivateCurrent[][]));
1031 Assert.AreEqual ("ArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#B1");
1032 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
1034 Assert.AreEqual ("ArrayOfArrayOfSimpleClassEnumerablePrivateCurrent", tm.TypeName, "#B3");
1036 Assert.AreEqual ("SimpleClassEnumerablePrivateCurrent[][]", tm.TypeName, "#B3");
1038 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateCurrent[][]", tm.TypeFullName, "#B4");
1040 tm = Map (typeof (SimpleClassEnumerablePrivateCurrent[][][]));
1041 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#C1");
1042 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
1044 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClassEnumerablePrivateCurrent", tm.TypeName, "#C3");
1046 Assert.AreEqual ("SimpleClassEnumerablePrivateCurrent[][][]", tm.TypeName, "#C3");
1048 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateCurrent[][][]", tm.TypeFullName, "#C4");
1053 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
1056 [Category ("NotDotNet")] // results in NullReferenceException in .NET 1.1 (SP1)
1058 public void TypeMapping_IEnumerable_SimpleClass_PrivateGetEnumerator ()
1060 XmlTypeMapping tm = Map (typeof (SimpleClassEnumerablePrivateGetEnumerator));
1061 Assert.AreEqual ("ArrayOfAnyType", tm.ElementName, "#1");
1062 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
1063 Assert.AreEqual ("SimpleClassEnumerablePrivateGetEnumerator", tm.TypeName, "#3");
1064 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateGetEnumerator", tm.TypeFullName, "#4");
1066 tm = Map (typeof (SimpleClassEnumerablePrivateGetEnumerator[]));
1067 Assert.AreEqual ("ArrayOfArrayOfAnyType", tm.ElementName, "#A1");
1068 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
1070 Assert.AreEqual ("ArrayOfSimpleClassEnumerablePrivateGetEnumerator", tm.TypeName, "#A3");
1072 Assert.AreEqual ("SimpleClassEnumerablePrivateGetEnumerator[]", tm.TypeName, "#A3");
1074 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateGetEnumerator[]", tm.TypeFullName, "#A4");
1076 tm = Map (typeof (SimpleClassEnumerablePrivateGetEnumerator[][]));
1077 Assert.AreEqual ("ArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#B1");
1078 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
1080 Assert.AreEqual ("ArrayOfArrayOfSimpleClassEnumerablePrivateGetEnumerator", tm.TypeName, "#B3");
1082 Assert.AreEqual ("SimpleClassEnumerablePrivateGetEnumerator[][]", tm.TypeName, "#B3");
1084 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateGetEnumerator[][]", tm.TypeFullName, "#B4");
1086 tm = Map (typeof (SimpleClassEnumerablePrivateGetEnumerator[][][]));
1087 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#C1");
1088 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
1090 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClassEnumerablePrivateGetEnumerator", tm.TypeName, "#C3");
1092 Assert.AreEqual ("SimpleClassEnumerablePrivateGetEnumerator[][][]", tm.TypeName, "#C3");
1094 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassEnumerablePrivateGetEnumerator[][][]", tm.TypeFullName, "#C4");
1098 [ExpectedException (typeof (InvalidOperationException))]
1099 public void TypeMapping_ICollection_Object_NoMatchingAddMethod ()
1101 Map (typeof (ObjectCollectionNoMatchingAddMethod));
1105 [ExpectedException (typeof (InvalidOperationException))]
1106 public void TypeMapping_ICollection_Object_NoMatchingAddMethod_Array ()
1108 Map (typeof (ObjectCollectionNoMatchingAddMethod[]));
1112 [ExpectedException (typeof (InvalidOperationException))]
1113 public void TypeMapping_ICollection_SimpleClass_NoMatchingAddMethod ()
1115 Map (typeof (SimpleClassCollectionNoMatchingAddMethod));
1119 [ExpectedException (typeof (InvalidOperationException))]
1120 public void TypeMapping_ICollection_SimpleClass_NoMatchingAddMethod_Array ()
1122 Map (typeof (SimpleClassCollectionNoMatchingAddMethod[]));
1127 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
1129 public void TypeMapping_ICollection_SimpleClass ()
1131 XmlTypeMapping tm = Map (typeof (SimpleClassCollection));
1132 Assert.AreEqual ("ArrayOfSimpleClass", tm.ElementName, "#1");
1133 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
1134 Assert.AreEqual ("SimpleClassCollection", tm.TypeName, "#3");
1135 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassCollection", tm.TypeFullName, "#4");
1137 tm = Map (typeof (SimpleClassCollection[]));
1138 Assert.AreEqual ("ArrayOfArrayOfSimpleClass", tm.ElementName, "#A1");
1139 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
1141 Assert.AreEqual ("ArrayOfSimpleClassCollection", tm.TypeName, "#A3");
1143 Assert.AreEqual ("SimpleClassCollection[]", tm.TypeName, "#A3");
1145 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassCollection[]", tm.TypeFullName, "#A4");
1147 tm = Map (typeof (SimpleClassCollection[][]));
1148 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClass", tm.ElementName, "#B1");
1149 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
1151 Assert.AreEqual ("ArrayOfArrayOfSimpleClassCollection", tm.TypeName, "#B3");
1153 Assert.AreEqual ("SimpleClassCollection[][]", tm.TypeName, "#B3");
1155 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassCollection[][]", tm.TypeFullName, "#B4");
1157 tm = Map (typeof (SimpleClassCollection[][][]));
1158 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfSimpleClass", tm.ElementName, "#C1");
1159 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
1161 Assert.AreEqual ("ArrayOfArrayOfArrayOfSimpleClassCollection", tm.TypeName, "#C3");
1163 Assert.AreEqual ("SimpleClassCollection[][][]", tm.TypeName, "#C3");
1165 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.SimpleClassCollection[][][]", tm.TypeFullName, "#C4");
1170 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
1172 public void TypeMapping_ICollection_Object ()
1174 XmlTypeMapping tm = Map (typeof (ObjectCollection));
1175 Assert.AreEqual ("ArrayOfAnyType", tm.ElementName, "#1");
1176 Assert.AreEqual (string.Empty, tm.Namespace, "#2");
1177 Assert.AreEqual ("ObjectCollection", tm.TypeName, "#3");
1178 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectCollection", tm.TypeFullName, "#4");
1180 tm = Map (typeof (ObjectCollection[]));
1181 Assert.AreEqual ("ArrayOfArrayOfAnyType", tm.ElementName, "#A1");
1182 Assert.AreEqual (string.Empty, tm.Namespace, "#A2");
1184 Assert.AreEqual ("ArrayOfObjectCollection", tm.TypeName, "#A3");
1186 Assert.AreEqual ("ObjectCollection[]", tm.TypeName, "#A3");
1188 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectCollection[]", tm.TypeFullName, "#A4");
1190 tm = Map (typeof (ObjectCollection[][]));
1191 Assert.AreEqual ("ArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#B1");
1192 Assert.AreEqual (string.Empty, tm.Namespace, "#B2");
1194 Assert.AreEqual ("ArrayOfArrayOfObjectCollection", tm.TypeName, "#B3");
1196 Assert.AreEqual ("ObjectCollection[][]", tm.TypeName, "#B3");
1198 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectCollection[][]", tm.TypeFullName, "#B4");
1200 tm = Map (typeof (ObjectCollection[][][]));
1201 Assert.AreEqual ("ArrayOfArrayOfArrayOfArrayOfAnyType", tm.ElementName, "#C1");
1202 Assert.AreEqual (string.Empty, tm.Namespace, "#C2");
1204 Assert.AreEqual ("ArrayOfArrayOfArrayOfObjectCollection", tm.TypeName, "#C3");
1206 Assert.AreEqual ("ObjectCollection[][][]", tm.TypeName, "#C3");
1208 Assert.AreEqual ("MonoTests.System.XmlSerialization.XmlReflectionImporterTests.ObjectCollection[][][]", tm.TypeFullName, "#C4");
1212 [ExpectedException (typeof (InvalidOperationException))]
1213 public void TypeMapping_ICollection_Object_NoIntIndexer ()
1215 Map (typeof (ObjectCollectionNoIntIndexer));
1219 [ExpectedException (typeof (InvalidOperationException))]
1220 public void TypeMapping_ICollection_Object_NoIntIndexer_Array ()
1222 Map (typeof (ObjectCollectionNoIntIndexer[]));
1226 [ExpectedException (typeof (InvalidOperationException))]
1227 public void TypeMapping_ICollection_SimpleClass_NoIntIndexer ()
1229 Map (typeof (SimpleClassCollectionNoIntIndexer));
1233 [ExpectedException (typeof (InvalidOperationException))]
1234 public void TypeMapping_ICollection_SimpleClass_NoIntIndexer_Array ()
1236 Map (typeof (SimpleClassCollectionNoIntIndexer[]));
1240 public void TypeMapping_InvalidDefault ()
1242 XmlAttributes attrs = new XmlAttributes (typeof (Field).GetMember ("Modifiers") [0]);
1243 attrs.XmlDefaultValue = 2; // not a defined enum value
1244 XmlAttributeOverrides overrides = new XmlAttributeOverrides ();
1245 overrides.Add (typeof (Field), "Modifiers", attrs);
1248 Map (typeof (Field), overrides);
1249 Assert.Fail ("#A1");
1250 } catch (InvalidOperationException ex) {
1251 // There was an error reflecting type MonoTests.System.Xml.TestClasses.Field
1252 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#A2");
1253 Assert.IsNotNull (ex.Message, "#A3");
1254 Assert.IsTrue (ex.Message.IndexOf (typeof (Field).FullName) != -1, "#A4");
1255 Assert.IsNotNull (ex.InnerException, "#A5");
1257 // There was an error reflecting field 'Modifiers'
1258 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#A6");
1259 Assert.IsNotNull (ex.InnerException.Message, "#A7");
1260 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Modifiers'") != -1, "#A8");
1261 Assert.IsNotNull (ex.InnerException.InnerException, "#A9");
1263 // Value '2' cannot be converted to System.Int32
1264 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.InnerException.GetType (), "#A10");
1265 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#A11");
1266 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("'2'") != -1, "#A12");
1267 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (int).FullName) != -1, "#A13");
1268 Assert.IsNull (ex.InnerException.InnerException.InnerException, "#A14");
1271 attrs.XmlDefaultValue = "2"; // not of the same type as the underlying enum type (System.Int32)
1274 Map (typeof (Field), overrides);
1275 Assert.Fail ("#B1");
1276 } catch (InvalidOperationException ex) {
1277 // There was an error reflecting type MonoTests.System.Xml.TestClasses.Field
1278 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#B2");
1279 Assert.IsNotNull (ex.Message, "#B3");
1280 Assert.IsTrue (ex.Message.IndexOf (typeof (Field).FullName) != -1, "#B4");
1281 Assert.IsNotNull (ex.InnerException, "#B5");
1283 // There was an error reflecting field 'Modifiers'
1284 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#B6");
1285 Assert.IsNotNull (ex.InnerException.Message, "#B7");
1286 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Modifiers'") != -1, "#B8");
1287 Assert.IsNotNull (ex.InnerException.InnerException, "#B9");
1289 // Enum underlying type and the object must be same type or object.
1290 // Type passed in was 'System.String'; the enum underlying type was
1292 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.InnerException.GetType (), "#B10");
1293 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#B11");
1294 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (string).FullName) != -1, "#B12");
1295 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (int).FullName) != -1, "#B13");
1296 Assert.IsNull (ex.InnerException.InnerException.InnerException, "#B14");
1299 attrs.XmlDefaultValue = EnumDefaultValueNF.e2; // other enum type
1302 Map (typeof (Field), overrides);
1303 Assert.Fail ("#C1");
1304 } catch (InvalidOperationException ex) {
1305 // There was an error reflecting type MonoTests.System.Xml.TestClasses.Field
1306 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#C2");
1307 Assert.IsNotNull (ex.Message, "#C3");
1308 Assert.IsTrue (ex.Message.IndexOf (typeof (Field).FullName) != -1, "#C4");
1309 Assert.IsNotNull (ex.InnerException, "#C5");
1311 // There was an error reflecting field 'Modifiers'
1312 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#C6");
1313 Assert.IsNotNull (ex.InnerException.Message, "#C7");
1314 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Modifiers'") != -1, "#C8");
1315 Assert.IsNotNull (ex.InnerException.InnerException, "#C9");
1317 // Object must be the same type as the enum. The type passed in
1318 // was MonoTests.System.Xml.TestClasses.EnumDefaultValueNF; the
1319 // enum type was MonoTests.System.Xml.TestClasses.MapModifiers
1320 Assert.AreEqual (typeof (ArgumentException), ex.InnerException.InnerException.GetType (), "#C10");
1321 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#C11");
1322 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (EnumDefaultValueNF).FullName) != -1, "#C12");
1323 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (MapModifiers).FullName) != -1, "#C13");
1324 Assert.IsNull (ex.InnerException.InnerException.InnerException, "#C14");
1327 attrs.XmlDefaultValue = (MapModifiers) 20; // non-existing enum value
1330 Map (typeof (Field), overrides);
1331 Assert.Fail ("#D1");
1332 } catch (InvalidOperationException ex) {
1333 // There was an error reflecting type MonoTests.System.Xml.TestClasses.Field
1334 Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#D2");
1335 Assert.IsNotNull (ex.Message, "#D3");
1336 Assert.IsTrue (ex.Message.IndexOf (typeof (Field).FullName) != -1, "#D4");
1337 Assert.IsNotNull (ex.InnerException, "#D5");
1339 // There was an error reflecting field 'Modifiers'
1340 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.GetType (), "#D6");
1341 Assert.IsNotNull (ex.InnerException.Message, "#D7");
1342 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Modifiers'") != -1, "#D8");
1343 Assert.IsNotNull (ex.InnerException.InnerException, "#D9");
1345 // Value '20' cannot be converted to MonoTests.System.Xml.TestClasses.MapModifiers
1346 Assert.AreEqual (typeof (InvalidOperationException), ex.InnerException.InnerException.GetType (), "#D10");
1347 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#D11");
1348 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("'20'") != -1, "#D12");
1349 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (MapModifiers).FullName) != -1, "#D13");
1350 Assert.IsNull (ex.InnerException.InnerException.InnerException, "#D14");
1355 [ExpectedException (typeof (ArgumentNullException))]
1356 public void TypeMapping_Null ()
1362 [ExpectedException (typeof (NotSupportedException))]
1363 public void TypeMapping_Void ()
1365 Map (typeof (void));
1369 public void TypeMapping_WrongChoices ()
1372 Map (typeof (WrongChoices));
1374 } catch (InvalidOperationException ex) {
1375 // There was an error reflecting type 'MonoTests.System.Xml.TestClasses.WrongChoices'
1376 Assert.IsNotNull (ex.Message, "#2");
1377 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (WrongChoices).FullName + "'") != -1, "#3");
1378 Assert.IsNotNull (ex.InnerException, "#4");
1380 // There was an error reflecting field 'MyChoice'
1381 Assert.IsNotNull (ex.InnerException.Message, "#5");
1382 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'MyChoice'") != -1, "#6");
1383 Assert.IsNotNull (ex.InnerException.InnerException, "#7");
1385 // Type MonoTests.System.Xml.TestClasses.ItemChoiceType is missing
1386 // enumeration value 'StrangeOne' for element 'StrangeOne' from
1388 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#8");
1389 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf (typeof (ItemChoiceType).FullName) != -1, "#9");
1390 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("'StrangeOne'") != -1, "#10");
1391 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("''") != -1, "#11");
1395 [Test] // bug #77591
1396 public void TypeMapping_XmlText_PrimitiveTypes ()
1398 XmlAttributeOverrides overrides = null;
1399 XmlAttributes attrs = null;
1401 overrides = new XmlAttributeOverrides ();
1402 attrs = new XmlAttributes ();
1403 attrs.XmlText = new XmlTextAttribute (typeof (int));
1404 overrides.Add (typeof (Field), "Modifiers", attrs);
1407 Map (typeof (Field), overrides);
1408 Assert.Fail ("#A1");
1409 } catch (InvalidOperationException ex) {
1410 // There was an error reflecting type 'MonoTests.System.Xml.TestClasses.Field'
1411 Assert.IsNotNull (ex.Message, "#A2");
1412 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (Field).FullName + "'") != -1, "#A3");
1413 Assert.IsNotNull (ex.InnerException, "#A4");
1415 // There was an error reflecting field 'Modifiers'
1416 Assert.IsNotNull (ex.InnerException.Message, "#A5");
1417 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Modifiers'") != -1, "#A6");
1418 Assert.IsNotNull (ex.InnerException.InnerException, "#A7");
1420 // The type for XmlText may not be specified for primitive types
1421 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#A8");
1422 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("XmlText") != -1, "#A9");
1425 overrides = new XmlAttributeOverrides ();
1426 attrs = new XmlAttributes ();
1427 attrs.XmlText = new XmlTextAttribute (typeof (int));
1428 overrides.Add (typeof (Field), "Street", attrs);
1431 Map (typeof (Field), overrides);
1432 Assert.Fail ("#B1");
1433 } catch (InvalidOperationException ex) {
1434 // There was an error reflecting type 'MonoTests.System.Xml.TestClasses.Field'
1435 Assert.IsNotNull (ex.Message, "#B2");
1436 Assert.IsTrue (ex.Message.IndexOf ("'" + typeof (Field).FullName + "'") != -1, "#B3");
1437 Assert.IsNotNull (ex.InnerException, "#B4");
1439 // There was an error reflecting field 'Street'
1440 Assert.IsNotNull (ex.InnerException.Message, "#B5");
1441 Assert.IsTrue (ex.InnerException.Message.IndexOf ("'Street'") != -1, "#B6");
1442 Assert.IsNotNull (ex.InnerException.InnerException, "#B7");
1444 // The type for XmlText may not be specified for primitive types
1445 Assert.IsNotNull (ex.InnerException.InnerException.Message, "#B8");
1446 Assert.IsTrue (ex.InnerException.InnerException.Message.IndexOf ("XmlText") != -1, "#B9");
1449 overrides = new XmlAttributeOverrides ();
1450 attrs = new XmlAttributes ();
1451 attrs.XmlText = new XmlTextAttribute (typeof (MapModifiers));
1452 overrides.Add (typeof (Field), "Modifiers", attrs);
1453 Map (typeof (Field), overrides);
1455 overrides = new XmlAttributeOverrides ();
1456 attrs = new XmlAttributes ();
1457 attrs.XmlText = new XmlTextAttribute (typeof (string));
1458 overrides.Add (typeof (Field), "Street", attrs);
1459 Map (typeof (Field), overrides);
1463 [Category ("NotWorking")] // mark it NotWorking until fixes have landed in svn
1464 public void TestImportMembersMapping()
1466 Type type = typeof(SimpleClass);
1467 XmlAttributes attrs = new XmlAttributes();
1468 XmlAttributeOverrides overrides = new XmlAttributeOverrides();
1469 overrides.Add(typeof(SimpleClass), attrs);
1471 XmlReflectionMember[] members = new XmlReflectionMember[0];
1472 XmlMembersMapping mm;
1475 mm = MembersMap(type, overrides, members, true);
1476 Assert.Fail("Should not be able to fetch an empty XmlMembersMapping");
1482 XmlReflectionMember rm = new XmlReflectionMember();
1483 rm.IsReturnValue = false;
1484 rm.MemberName = "something";
1485 rm.MemberType = typeof(string);
1486 members = new XmlReflectionMember[1];
1489 mm = MembersMap(type, overrides, members, false);
1491 Equals(mm.Count, 1);
1493 XmlMemberMapping smm = mm[0];
1494 Assert.IsFalse (smm.Any, "#1");
1495 Assert.AreEqual ("something", smm.ElementName, "#2");
1496 Assert.AreEqual ("something", smm.MemberName, "#3");
1497 Assert.IsNull (smm.Namespace, "#4");
1498 Assert.AreEqual ("System.String", smm.TypeFullName, "#5");
1499 Assert.AreEqual ("string", smm.TypeName, "#6");
1501 Assert.AreEqual (XmlSchemaNamespace, smm.TypeNamespace, "#7");
1503 Assert.IsNull (smm.TypeNamespace, "#7");
1506 rm = new XmlReflectionMember();
1507 rm.IsReturnValue = false;
1508 rm.MemberName = "nothing";
1509 rm.MemberType = typeof(string);
1510 members = new XmlReflectionMember[1];
1513 mm = MembersMap(type, overrides, members, false);
1514 Assert.AreEqual (1, mm.Count, "#8");
1518 public void TestIntTypeMappingWithXmlRootAttribute()
1520 const string TheNamespace = "another:urn";
1521 XmlRootAttribute root = new XmlRootAttribute("price");
1522 root.Namespace = TheNamespace;
1524 XmlTypeMapping tm = Map(typeof(int), root);
1525 Assert.AreEqual ("price", tm.ElementName, "#1");
1526 Assert.AreEqual (TheNamespace, tm.Namespace, "#2");
1527 Assert.AreEqual ("Int32", tm.TypeName, "#3");
1528 Assert.AreEqual ("System.Int32", tm.TypeFullName, "#4");
1532 [ExpectedException (typeof (InvalidOperationException))]
1533 public void TestSerializeWrongChoice ()
1535 new XmlSerializer (typeof(WrongChoices));
1540 public void ImportNullableContainer ()
1542 new XmlSerializer (typeof (NullableContainer));
1546 public class Employee : IXmlSerializable
1548 private string _firstName;
1549 private string _lastName;
1550 private string _address;
1552 public XmlSchema GetSchema ()
1557 public void WriteXml (XmlWriter writer)
1559 writer.WriteStartElement ("employee", "urn:devx-com");
1560 writer.WriteAttributeString ("firstName", _firstName);
1561 writer.WriteAttributeString ("lastName", _lastName);
1562 writer.WriteAttributeString ("address", _address);
1563 writer.WriteEndElement ();
1566 public void ReadXml (XmlReader reader)
1568 XmlNodeType type = reader.MoveToContent ();
1569 if (type == XmlNodeType.Element && reader.LocalName == "employee") {
1570 _firstName = reader["firstName"];
1571 _lastName = reader["lastName"];
1572 _address = reader["address"];
1577 public class NestedStruct
1579 public TimeSpan Period = TimeSpan.MaxValue;
1582 public class ObjectEnumerable : IEnumerable
1584 public void Add (int value)
1588 public void Add (object value)
1592 public IEnumerator GetEnumerator ()
1594 return new ArrayList ().GetEnumerator ();
1598 public class SimpleClassEnumerable : IEnumerable
1600 public void Add (int value)
1604 public void Add (object value)
1608 IEnumerator IEnumerable.GetEnumerator ()
1610 return GetEnumerator ();
1613 public SimpleClassEnumerator GetEnumerator ()
1615 return new SimpleClassEnumerator (new ArrayList ());
1619 public class SimpleClassEnumerablePrivateGetEnumerator : IEnumerable
1621 public void Add (object value)
1625 IEnumerator IEnumerable.GetEnumerator ()
1627 return new ArrayList ().GetEnumerator ();
1631 public class SimpleClassEnumerablePrivateCurrent : IEnumerable
1633 public void Add (object value)
1637 IEnumerator IEnumerable.GetEnumerator ()
1639 return GetEnumerator ();
1642 public NoCurrentEnumerator GetEnumerator ()
1644 return new NoCurrentEnumerator (new ArrayList ());
1648 // GetEnumerator().Current returns object, but there's no corresponding
1649 // Add (System.Object) method
1650 public class ObjectEnumerableNoMatchingAddMethod : IEnumerable
1652 public void Add (int value)
1656 public IEnumerator GetEnumerator ()
1658 return new ArrayList ().GetEnumerator ();
1662 // GetEnumerator().Current returns SimpleClass, but there's no
1663 // corresponding Add (SimpleClass) method
1664 public class SimpleClassCollectionNoMatchingAddMethod : ICollection
1666 public SimpleClass this[int index]
1670 return (SimpleClass) _list[index];
1676 get { return _list.Count; }
1679 public bool IsSynchronized
1681 get { return _list.IsSynchronized; }
1684 public object SyncRoot
1686 get { return _list.SyncRoot; }
1689 public void CopyTo (Array array, int index)
1691 _list.CopyTo (array, index);
1694 IEnumerator IEnumerable.GetEnumerator ()
1696 return GetEnumerator ();
1699 public SimpleClassEnumerator GetEnumerator ()
1701 return new SimpleClassEnumerator (_list);
1704 private ArrayList _list = new ArrayList ();
1707 // GetEnumerator().Current returns object, but there's no corresponding
1708 // Add (System.Object) method
1709 public class ObjectCollectionNoMatchingAddMethod : ICollection
1711 public object this[int index]
1715 return _list[index];
1721 get { return _list.Count; }
1724 public bool IsSynchronized
1726 get { return _list.IsSynchronized; }
1729 public object SyncRoot
1731 get { return _list.SyncRoot; }
1734 public void CopyTo (Array array, int index)
1736 _list.CopyTo (array, index);
1739 IEnumerator IEnumerable.GetEnumerator ()
1741 return GetEnumerator ();
1744 public IEnumerator GetEnumerator ()
1746 return _list.GetEnumerator ();
1749 private ArrayList _list = new ArrayList ();
1752 // Does not have int indexer.
1753 public class SimpleClassCollectionNoIntIndexer : ICollection
1755 public SimpleClass this[string name]
1759 return new SimpleClass ();
1765 get { return _list.Count; }
1768 public bool IsSynchronized
1770 get { return _list.IsSynchronized; }
1773 public object SyncRoot
1775 get { return _list.SyncRoot; }
1778 public void CopyTo (Array array, int index)
1780 _list.CopyTo (array, index);
1783 IEnumerator IEnumerable.GetEnumerator ()
1785 return GetEnumerator ();
1788 public SimpleClassEnumerator GetEnumerator ()
1790 return new SimpleClassEnumerator (_list);
1793 public void Add (SimpleClass value)
1798 private ArrayList _list = new ArrayList ();
1801 // Does not have int indexer.
1802 public class ObjectCollectionNoIntIndexer : ICollection
1804 public object this[string name]
1808 return new SimpleClass ();
1814 get { return _list.Count; }
1817 public bool IsSynchronized
1819 get { return _list.IsSynchronized; }
1822 public object SyncRoot
1824 get { return _list.SyncRoot; }
1827 public void CopyTo (Array array, int index)
1829 _list.CopyTo (array, index);
1832 public IEnumerator GetEnumerator ()
1834 return _list.GetEnumerator ();
1837 public void Add (object value)
1842 private ArrayList _list = new ArrayList ();
1845 public class SimpleClassCollection : ICollection
1847 public SimpleClass this[int index]
1851 return (SimpleClass) _list[index];
1857 get { return _list.Count; }
1860 public bool IsSynchronized
1862 get { return _list.IsSynchronized; }
1865 public object SyncRoot
1867 get { return _list.SyncRoot; }
1870 public void CopyTo (Array array, int index)
1872 _list.CopyTo (array, index);
1875 IEnumerator IEnumerable.GetEnumerator ()
1877 return GetEnumerator ();
1880 public SimpleClassEnumerator GetEnumerator ()
1882 return new SimpleClassEnumerator (_list);
1885 public void Add (SimpleClass value)
1890 private ArrayList _list = new ArrayList ();
1893 public class ObjectCollection : ICollection
1895 public object this[int name]
1899 return new SimpleClass ();
1905 get { return _list.Count; }
1908 public bool IsSynchronized
1910 get { return _list.IsSynchronized; }
1913 public object SyncRoot
1915 get { return _list.SyncRoot; }
1918 public void CopyTo (Array array, int index)
1920 _list.CopyTo (array, index);
1923 public IEnumerator GetEnumerator ()
1925 return _list.GetEnumerator ();
1928 public void Add (object value)
1933 private ArrayList _list = new ArrayList ();
1936 public class SimpleClassEnumerator : IEnumerator
1938 internal SimpleClassEnumerator (ArrayList arguments)
1940 IEnumerable temp = (IEnumerable) (arguments);
1941 _baseEnumerator = temp.GetEnumerator ();
1943 public SimpleClass Current
1945 get { return (SimpleClass) _baseEnumerator.Current; }
1948 object IEnumerator.Current
1950 get { return _baseEnumerator.Current; }
1953 public bool MoveNext ()
1955 return _baseEnumerator.MoveNext ();
1958 bool IEnumerator.MoveNext ()
1960 return _baseEnumerator.MoveNext ();
1963 public void Reset ()
1965 _baseEnumerator.Reset ();
1968 void IEnumerator.Reset ()
1970 _baseEnumerator.Reset ();
1973 private IEnumerator _baseEnumerator;
1976 public class NoCurrentEnumerator : IEnumerator
1978 internal NoCurrentEnumerator (ArrayList arguments)
1980 IEnumerable temp = (IEnumerable) (arguments);
1981 _baseEnumerator = temp.GetEnumerator ();
1984 object IEnumerator.Current
1986 get { return _baseEnumerator.Current; }
1989 public bool MoveNext ()
1991 return _baseEnumerator.MoveNext ();
1994 bool IEnumerator.MoveNext ()
1996 return _baseEnumerator.MoveNext ();
1999 public void Reset ()
2001 _baseEnumerator.Reset ();
2004 void IEnumerator.Reset ()
2006 _baseEnumerator.Reset ();
2009 private IEnumerator _baseEnumerator;
2013 public class NullableContainer
2015 [XmlElement (IsNullable = true)]