2 // System.Xml.Serialization.XmlCodeExporterTests
5 // Gert Driesen (drieseng@users.sourceforge.net)
7 // (C) Gert Driesen (drieseng@users.sourceforge.net)
15 using System.CodeDom.Compiler;
16 using System.Collections;
17 using System.Globalization;
19 using System.Reflection;
21 using System.Xml.Schema;
22 using System.Xml.Serialization;
24 using Microsoft.CSharp;
26 using NUnit.Framework;
28 using MonoTests.System.Xml.TestClasses;
30 namespace MonoTests.System.XmlSerialization
33 public class XmlCodeExporterTests
36 public void ExportTypeMapping_ArrayClass ()
38 CodeNamespace codeNamespace = ExportCode (typeof (ArrayClass));
39 Assert.IsNotNull (codeNamespace, "#1");
41 StringWriter sw = new StringWriter ();
42 CodeDomProvider provider = new CSharpCodeProvider ();
43 ICodeGenerator generator = provider.CreateGenerator ();
44 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
46 Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
49 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
50 "[System.SerializableAttribute()]{0}" +
51 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
52 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
53 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=true)]{0}" +
54 "public partial class ArrayClass {{{0}" +
56 " private object namesField;{0}" +
58 " /// <remarks/>{0}" +
59 " public object names {{{0}" +
61 " return this.namesField;{0}" +
64 " this.namesField = value;{0}" +
67 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
70 codeNamespace = ExportCode (typeof (ArrayClass[]));
71 Assert.IsNotNull (codeNamespace, "#3");
73 sw.GetStringBuilder ().Length = 0;
74 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
76 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
79 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
80 "[System.SerializableAttribute()]{0}" +
81 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
82 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
83 "public partial class ArrayClass {{{0}" +
85 " private object namesField;{0}" +
87 " /// <remarks/>{0}" +
88 " public object names {{{0}" +
90 " return this.namesField;{0}" +
93 " this.namesField = value;{0}" +
96 "}}{0}", Environment.NewLine), sw.ToString (), "#4");
100 public void ExportTypeMapping_ArrayContainer ()
102 CodeNamespace codeNamespace = ExportCode (typeof (ArrayContainer));
103 Assert.IsNotNull (codeNamespace, "#1");
105 StringWriter sw = new StringWriter ();
106 CodeDomProvider provider = new CSharpCodeProvider ();
107 ICodeGenerator generator = provider.CreateGenerator ();
108 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
110 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
112 "/// <remarks/>{0}" +
113 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
114 "[System.SerializableAttribute()]{0}" +
115 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
116 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
117 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=true)]{0}" +
118 "public partial class ArrayContainer {{{0}" +
120 " private object[] itemsField;{0}" +
122 " /// <remarks/>{0}" +
123 " public object[] items {{{0}" +
125 " return this.itemsField;{0}" +
128 " this.itemsField = value;{0}" +
131 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
135 public void ExportTypeMapping_CDataContainer ()
137 CodeNamespace codeNamespace = ExportCode (typeof (CDataContainer));
138 Assert.IsNotNull (codeNamespace, "#1");
140 StringWriter sw = new StringWriter ();
141 CodeDomProvider provider = new CSharpCodeProvider ();
142 ICodeGenerator generator = provider.CreateGenerator ();
143 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
145 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
147 "/// <remarks/>{0}" +
148 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
149 "[System.SerializableAttribute()]{0}" +
150 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
151 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
152 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=true)]{0}" +
153 "public partial class CDataContainer {{{0}" +
155 " private System.Xml.XmlCDataSection cdataField;{0}" +
157 " /// <remarks/>{0}" +
158 " public System.Xml.XmlCDataSection cdata {{{0}" +
160 " return this.cdataField;{0}" +
163 " this.cdataField = value;{0}" +
166 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
170 [Category ("NotWorking")] // order of XmlElementAttribute's does not match that of MSFT
171 [Category ("NotDotNet")] // Mono bug ##77117 and MS.NET randomly modifies the order of the elements!
172 public void ExportTypeMapping_Choices ()
174 CodeNamespace codeNamespace = ExportCode (typeof (Choices));
175 Assert.IsNotNull (codeNamespace, "#1");
177 StringWriter sw = new StringWriter ();
178 CodeDomProvider provider = new CSharpCodeProvider ();
179 ICodeGenerator generator = provider.CreateGenerator ();
180 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
182 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
184 "/// <remarks/>{0}" +
185 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
186 "[System.SerializableAttribute()]{0}" +
187 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
188 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
189 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=true)]{0}" +
190 "public partial class Choices {{{0}" +
192 " private string myChoiceField;{0}" +
194 " /// <remarks/>{0}" +
195 " [System.Xml.Serialization.XmlElementAttribute(\"ChoiceZero\", typeof(string))]{0}" +
196 " [System.Xml.Serialization.XmlElementAttribute(\"ChoiceOne\", typeof(string))]{0}" +
197 " [System.Xml.Serialization.XmlElementAttribute(\"ChoiceTwo\", typeof(string))]{0}" +
198 " [System.Xml.Serialization.XmlChoiceIdentifierAttribute(\"ItemType\")]{0}" +
199 " public string MyChoice {{{0}" +
201 " return this.myChoiceField;{0}" +
204 " this.myChoiceField = value;{0}" +
207 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
211 [Category ("NotWorking")] // TODO: order of DefaultValueAttribute, ...
212 public void ExportTypeMapping_Field ()
214 CodeNamespace codeNamespace = ExportCode (typeof (Field));
215 Assert.IsNotNull (codeNamespace, "#1");
217 StringWriter sw = new StringWriter ();
218 CodeDomProvider provider = new CSharpCodeProvider ();
219 ICodeGenerator generator = provider.CreateGenerator ();
220 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
222 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
224 "/// <remarks/>{0}" +
225 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
226 "[System.SerializableAttribute()]{0}" +
227 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
228 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
229 "[System.Xml.Serialization.XmlRootAttribute(\"field\", Namespace=\"\", IsNullable=true)]{0}" +
230 "public partial class Field {{{0}" +
232 " private MonoTests.System.Xml.TestClasses.FlagEnum flags1Field;{0}" +
234 " private MonoTests.System.Xml.TestClasses.FlagEnum flags2Field;{0}" +
236 " private MonoTests.System.Xml.TestClasses.FlagEnum flags3Field;{0}" +
238 " private MonoTests.System.Xml.TestClasses.FlagEnum flags4Field;{0}" +
240 " private MonoTests.System.Xml.TestClasses.MapModifiers modifiersField;{0}" +
242 " private MonoTests.System.Xml.TestClasses.MapModifiers modifiers2Field;{0}" +
244 " private MonoTests.System.Xml.TestClasses.MapModifiers modifiers3Field;{0}" +
246 " private MonoTests.System.Xml.TestClasses.MapModifiers modifiers4Field;{0}" +
248 " private MonoTests.System.Xml.TestClasses.MapModifiers modifiers5Field;{0}" +
250 " private string[] namesField;{0}" +
252 " private string streetField;{0}" +
254 " public Field() {{{0}" +
255 " this.flags1Field = MonoTests.System.Xml.TestClasses.FlagEnum.e1;{0}" +
256 " this.flags2Field = MonoTests.System.Xml.TestClasses.FlagEnum.e1;{0}" +
257 " this.flags3Field = (MonoTests.System.Xml.TestClasses.FlagEnum.e1 | MonoTests.System.Xml.TestClasses.FlagEnum.e2);{0}" +
258 " this.modifiers3Field = MonoTests.System.Xml.TestClasses.MapModifiers.Public;{0}" +
259 " this.modifiers4Field = MonoTests.System.Xml.TestClasses.MapModifiers.Protected;{0}" +
260 " this.modifiers5Field = MonoTests.System.Xml.TestClasses.MapModifiers.Public;{0}" +
263 " /// <remarks/>{0}" +
264 " [System.Xml.Serialization.XmlAttributeAttribute(\"flag1\")]{0}" +
265 " public MonoTests.System.Xml.TestClasses.FlagEnum Flags1 {{{0}" +
267 " return this.flags1Field;{0}" +
270 " this.flags1Field = value;{0}" +
274 " /// <remarks/>{0}" +
275 " [System.Xml.Serialization.XmlAttributeAttribute(\"flag2\")]{0}" +
276 " public MonoTests.System.Xml.TestClasses.FlagEnum Flags2 {{{0}" +
278 " return this.flags2Field;{0}" +
281 " this.flags2Field = value;{0}" +
285 " /// <remarks/>{0}" +
286 " [System.Xml.Serialization.XmlAttributeAttribute(\"flag3\", Form=System.Xml.Schema.XmlSchemaForm.Qualified)]{0}" +
287 " public MonoTests.System.Xml.TestClasses.FlagEnum Flags3 {{{0}" +
289 " return this.flags3Field;{0}" +
292 " this.flags3Field = value;{0}" +
296 " /// <remarks/>{0}" +
297 " [System.Xml.Serialization.XmlAttributeAttribute(\"flag4\")]{0}" +
298 " public MonoTests.System.Xml.TestClasses.FlagEnum Flags4 {{{0}" +
300 " return this.flags4Field;{0}" +
303 " this.flags4Field = value;{0}" +
307 " /// <remarks/>{0}" +
308 " [System.Xml.Serialization.XmlAttributeAttribute(\"modifiers\")]{0}" +
309 " public MonoTests.System.Xml.TestClasses.MapModifiers Modifiers {{{0}" +
311 " return this.modifiersField;{0}" +
314 " this.modifiersField = value;{0}" +
318 " /// <remarks/>{0}" +
319 " [System.Xml.Serialization.XmlAttributeAttribute(\"modifiers2\")]{0}" +
320 " public MonoTests.System.Xml.TestClasses.MapModifiers Modifiers2 {{{0}" +
322 " return this.modifiers2Field;{0}" +
325 " this.modifiers2Field = value;{0}" +
329 " /// <remarks/>{0}" +
330 " [System.Xml.Serialization.XmlAttributeAttribute(\"modifiers3\")]{0}" +
331 " public MonoTests.System.Xml.TestClasses.MapModifiers Modifiers3 {{{0}" +
333 " return this.modifiers3Field;{0}" +
336 " this.modifiers3Field = value;{0}" +
340 " /// <remarks/>{0}" +
341 " [System.Xml.Serialization.XmlAttributeAttribute(\"modifiers4\")]{0}" +
342 " public MonoTests.System.Xml.TestClasses.MapModifiers Modifiers4 {{{0}" +
344 " return this.modifiers4Field;{0}" +
347 " this.modifiers4Field = value;{0}" +
351 " /// <remarks/>{0}" +
352 " [System.Xml.Serialization.XmlAttributeAttribute(\"modifiers5\", Form=System.Xml.Schema.XmlSchemaForm.Qualified)]{0}" +
353 " public MonoTests.System.Xml.TestClasses.MapModifiers Modifiers5 {{{0}" +
355 " return this.modifiers5Field;{0}" +
358 " this.modifiers5Field = value;{0}" +
362 " /// <remarks/>{0}" +
363 " [System.Xml.Serialization.XmlAttributeAttribute(\"names\")]{0}" +
364 " public string[] Names {{{0}" +
366 " return this.namesField;{0}" +
369 " this.namesField = value;{0}" +
373 " /// <remarks/>{0}" +
374 " [System.Xml.Serialization.XmlAttributeAttribute(\"street\")]{0}" +
375 " public string Street {{{0}" +
377 " return this.streetField;{0}" +
380 " this.streetField = value;{0}" +
385 "/// <remarks/>{0}" +
386 "[System.FlagsAttribute()]{0}" +
387 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Xml\", \"{1}\")]{0}" +
388 "[System.SerializableAttribute()]{0}" +
389 "public enum FlagEnum {{{0}" +
391 " /// <remarks/>{0}" +
392 " [System.Xml.Serialization.XmlEnumAttribute(\"one\")]{0}" +
395 " /// <remarks/>{0}" +
396 " [System.Xml.Serialization.XmlEnumAttribute(\"two\")]{0}" +
399 " /// <remarks/>{0}" +
400 " [System.Xml.Serialization.XmlEnumAttribute(\"four\")]{0}" +
404 "/// <remarks/>{0}" +
405 "[System.FlagsAttribute()]{0}" +
406 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
407 "[System.SerializableAttribute()]{0}" +
408 "public enum MapModifiers {{{0}" +
410 " /// <remarks/>{0}" +
411 " [System.Xml.Serialization.XmlEnumAttribute(\"public\")]{0}" +
414 " /// <remarks/>{0}" +
415 " [System.Xml.Serialization.XmlEnumAttribute(\"protected\")]{0}" +
416 " Protected = 2,{0}" +
417 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
421 public void ExportTypeMapping_ItemChoiceType ()
423 CodeNamespace codeNamespace = ExportCode (typeof (ItemChoiceType));
424 Assert.IsNotNull (codeNamespace, "#1");
426 StringWriter sw = new StringWriter ();
427 CodeDomProvider provider = new CSharpCodeProvider ();
428 ICodeGenerator generator = provider.CreateGenerator ();
429 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
431 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
433 "/// <remarks/>{0}" +
434 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
435 "[System.SerializableAttribute()]{0}" +
436 "[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]{0}" +
437 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=false)]{0}" +
438 "public enum ItemChoiceType {{{0}" +
440 " /// <remarks/>{0}" +
443 " /// <remarks/>{0}" +
444 " [System.Xml.Serialization.XmlEnumAttribute(\"ChoiceOne\")]{0}" +
447 " /// <remarks/>{0}" +
449 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
451 codeNamespace = ExportCode (typeof (ItemChoiceType[]));
452 Assert.IsNotNull (codeNamespace, "#3");
454 sw.GetStringBuilder ().Length = 0;
455 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
457 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
459 "/// <remarks/>{0}" +
460 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
461 "[System.SerializableAttribute()]{0}" +
462 "[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]{0}" +
463 "public enum ItemChoiceType {{{0}" +
465 " /// <remarks/>{0}" +
468 " /// <remarks/>{0}" +
469 " [System.Xml.Serialization.XmlEnumAttribute(\"ChoiceOne\")]{0}" +
472 " /// <remarks/>{0}" +
474 "}}{0}", Environment.NewLine), sw.ToString (), "#4");
478 public void ExportTypeMapping_ClassArrayContainer ()
480 CodeNamespace codeNamespace = ExportCode (typeof (ClassArrayContainer));
481 Assert.IsNotNull (codeNamespace, "#1");
483 StringWriter sw = new StringWriter ();
484 CodeDomProvider provider = new CSharpCodeProvider ();
485 ICodeGenerator generator = provider.CreateGenerator ();
486 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
488 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
490 "/// <remarks/>{0}" +
491 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
492 "[System.SerializableAttribute()]{0}" +
493 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
494 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
495 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=true)]{0}" +
496 "public partial class ClassArrayContainer {{{0}" +
498 " private MonoTests.System.Xml.TestClasses.SimpleClass[] itemsField;{0}" +
500 " /// <remarks/>{0}" +
501 " public MonoTests.System.Xml.TestClasses.SimpleClass[] items {{{0}" +
503 " return this.itemsField;{0}" +
506 " this.itemsField = value;{0}" +
511 "/// <remarks/>{0}" +
512 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
513 "[System.SerializableAttribute()]{0}" +
514 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
515 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
516 "public partial class SimpleClass {{{0}" +
518 " private string somethingField;{0}" +
520 " /// <remarks/>{0}" +
521 " public string something {{{0}" +
523 " return this.somethingField;{0}" +
526 " this.somethingField = value;{0}" +
529 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
533 [Category ("NotWorking")] // bug #78214
534 public void ExportTypeMapping_Root ()
536 CodeNamespace codeNamespace = ExportCode (typeof (Root));
537 Assert.IsNotNull (codeNamespace, "#1");
539 StringWriter sw = new StringWriter ();
540 CodeDomProvider provider = new CSharpCodeProvider ();
541 ICodeGenerator generator = provider.CreateGenerator ();
542 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
544 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
546 "/// <remarks/>{0}" +
547 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
548 "[System.SerializableAttribute()]{0}" +
549 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
550 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
551 "[System.Xml.Serialization.XmlTypeAttribute(Namespace=\"urn:aNS\")]{0}" +
552 "[System.Xml.Serialization.XmlRootAttribute(\"root\", Namespace=\"urn:aNS\", IsNullable=false)]{0}" +
553 "public partial class Root {{{0}" +
555 " private MonoTests.System.Xml.TestClasses.OptionalValueTypeContainer optionalValueField;{0}" +
557 " private MonoTests.System.Xml.TestClasses.TestDefault defaultField;{0}" +
559 " /// <remarks/>{0}" +
560 " public MonoTests.System.Xml.TestClasses.OptionalValueTypeContainer OptionalValue {{{0}" +
562 " return this.optionalValueField;{0}" +
565 " this.optionalValueField = value;{0}" +
569 " /// <remarks/>{0}" +
570 " public MonoTests.System.Xml.TestClasses.TestDefault Default {{{0}" +
572 " return this.defaultField;{0}" +
575 " this.defaultField = value;{0}" +
580 "/// <remarks/>{0}" +
581 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
582 "[System.SerializableAttribute()]{0}" +
583 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
584 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
585 "[System.Xml.Serialization.XmlTypeAttribute(TypeName=\"optionalValueType\", Namespace=\"some:urn\")]{0}" +
586 "public partial class OptionalValueTypeContainer {{{0}" +
588 " private MonoTests.System.Xml.TestClasses.FlagEnum attributesField;{0}" +
590 " private MonoTests.System.Xml.TestClasses.FlagEnum flagsField;{0}" +
592 " private bool flagsFieldSpecified;{0}" +
594 " private bool isEmptyField;{0}" +
596 " private bool isEmptyFieldSpecified;{0}" +
598 " private bool isNullField;{0}" +
600 " public OptionalValueTypeContainer() {{{0}" +
601 " this.attributesField = (MonoTests.System.Xml.TestClasses.FlagEnum.e1 | MonoTests.System.Xml.TestClasses.FlagEnum.e4);{0}" +
602 " this.flagsField = MonoTests.System.Xml.TestClasses.FlagEnum.e1;{0}" +
605 " /// <remarks/>{0}" +
606 " public MonoTests.System.Xml.TestClasses.FlagEnum Attributes {{{0}" +
608 " return this.attributesField;{0}" +
611 " this.attributesField = value;{0}" +
615 " /// <remarks/>{0}" +
616 " public MonoTests.System.Xml.TestClasses.FlagEnum Flags {{{0}" +
618 " return this.flagsField;{0}" +
621 " this.flagsField = value;{0}" +
625 " /// <remarks/>{0}" +
626 " [System.Xml.Serialization.XmlIgnoreAttribute()]{0}" +
627 " public bool FlagsSpecified {{{0}" +
629 " return this.flagsFieldSpecified;{0}" +
632 " this.flagsFieldSpecified = value;{0}" +
636 " /// <remarks/>{0}" +
637 " public bool IsEmpty {{{0}" +
639 " return this.isEmptyField;{0}" +
642 " this.isEmptyField = value;{0}" +
646 " /// <remarks/>{0}" +
647 " [System.Xml.Serialization.XmlIgnoreAttribute()]{0}" +
648 " public bool IsEmptySpecified {{{0}" +
650 " return this.isEmptyFieldSpecified;{0}" +
653 " this.isEmptyFieldSpecified = value;{0}" +
657 " /// <remarks/>{0}" +
658 " public bool IsNull {{{0}" +
660 " return this.isNullField;{0}" +
663 " this.isNullField = value;{0}" +
668 "/// <remarks/>{0}" +
669 "[System.FlagsAttribute()]{0}" +
670 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
671 "[System.SerializableAttribute()]{0}" +
672 "[System.Xml.Serialization.XmlTypeAttribute(Namespace=\"some:urn\")]{0}" +
673 "public enum FlagEnum {{{0}" +
675 " /// <remarks/>{0}" +
676 " [System.Xml.Serialization.XmlEnumAttribute(\"one\")]{0}" +
679 " /// <remarks/>{0}" +
680 " [System.Xml.Serialization.XmlEnumAttribute(\"two\")]{0}" +
683 " /// <remarks/>{0}" +
684 " [System.Xml.Serialization.XmlEnumAttribute(\"four\")]{0}" +
688 "/// <remarks/>{0}" +
689 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Xml\", \"{1}\")]{0}" +
690 "[System.SerializableAttribute()]{0}" +
691 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
692 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
693 "[System.Xml.Serialization.XmlTypeAttribute(Namespace=\"urn:myNS\")]{0}" +
694 "public partial class TestDefault {{{0}" +
696 " private string strField;{0}" +
698 " private string strDefaultField;{0}" +
700 " private bool boolTField;{0}" +
702 " private bool boolFField;{0}" +
704 " private decimal decimalvalField;{0}" +
706 " private MonoTests.System.Xml.TestClasses.FlagEnum flagField;{0}" +
708 " private MonoTests.System.Xml.TestClasses.FlagEnum_Encoded flagencodedField;{0}" +
710 " public TestDefault() {{{0}" +
711 " this.strDefaultField = \"Default Value\";{0}" +
712 " this.flagField = (MonoTests.System.Xml.TestClasses.FlagEnum.e1 | MonoTests.System.Xml.TestClasses.FlagEnum.e4);{0}" +
713 " this.flagencodedField = (MonoTests.System.Xml.TestClasses.FlagEnum_Encoded.e1 | MonoTests.System.Xml.TestClasses.FlagEnum_Encoded.e4);{0}" +
716 " /// <remarks/>{0}" +
717 " public string str {{{0}" +
719 " return this.strField;{0}" +
722 " this.strField = value;{0}" +
726 " /// <remarks/>{0}" +
727 " public string strDefault {{{0}" +
729 " return this.strDefaultField;{0}" +
732 " this.strDefaultField = value;{0}" +
736 " /// <remarks/>{0}" +
737 " public bool boolT {{{0}" +
739 " return this.boolTField;{0}" +
742 " this.boolTField = value;{0}" +
746 " /// <remarks/>{0}" +
747 " public bool boolF {{{0}" +
749 " return this.boolFField;{0}" +
752 " this.boolFField = value;{0}" +
756 " /// <remarks/>{0}" +
757 " public decimal decimalval {{{0}" +
759 " return this.decimalvalField;{0}" +
762 " this.decimalvalField = value;{0}" +
766 " /// <remarks/>{0}" +
767 " public MonoTests.System.Xml.TestClasses.FlagEnum flag {{{0}" +
769 " return this.flagField;{0}" +
772 " this.flagField = value;{0}" +
776 " /// <remarks/>{0}" +
777 " public MonoTests.System.Xml.TestClasses.FlagEnum_Encoded flagencoded {{{0}" +
779 " return this.flagencodedField;{0}" +
782 " this.flagencodedField = value;{0}" +
787 "/// <remarks/>{0}" +
788 "[System.FlagsAttribute()]{0}" +
789 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
790 "[System.SerializableAttribute()]{0}" +
791 "[System.Xml.Serialization.XmlTypeAttribute(Namespace=\"urn:myNS\")]{0}" +
792 "public enum FlagEnum {{{0}" +
794 " /// <remarks/>{0}" +
795 " [System.Xml.Serialization.XmlEnumAttribute(\"one\")]{0}" +
798 " /// <remarks/>{0}" +
799 " [System.Xml.Serialization.XmlEnumAttribute(\"two\")]{0}" +
802 " /// <remarks/>{0}" +
803 " [System.Xml.Serialization.XmlEnumAttribute(\"four\")]{0}" +
807 "/// <remarks/>{0}" +
808 "[System.FlagsAttribute()]{0}" +
809 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
810 "[System.SerializableAttribute()]{0}" +
811 "[System.Xml.Serialization.XmlTypeAttribute(Namespace=\"urn:myNS\")]{0}" +
812 "public enum FlagEnum_Encoded {{{0}" +
814 " /// <remarks/>{0}" +
817 " /// <remarks/>{0}" +
820 " /// <remarks/>{0}" +
822 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
826 public void ExportTypeMapping_SimpleClassWithXmlAttributes ()
828 CodeNamespace codeNamespace = ExportCode (typeof (SimpleClassWithXmlAttributes));
829 Assert.IsNotNull (codeNamespace, "#1");
831 StringWriter sw = new StringWriter ();
832 CodeDomProvider provider = new CSharpCodeProvider ();
833 ICodeGenerator generator = provider.CreateGenerator ();
834 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
836 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
838 "/// <remarks/>{0}" +
839 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
840 "[System.SerializableAttribute()]{0}" +
841 "[System.Diagnostics.DebuggerStepThroughAttribute()]{0}" +
842 "[System.ComponentModel.DesignerCategoryAttribute(\"code\")]{0}" +
843 "[System.Xml.Serialization.XmlRootAttribute(\"simple\", Namespace=\"\", IsNullable=true)]{0}" +
844 "public partial class SimpleClassWithXmlAttributes {{{0}" +
846 " private string somethingField;{0}" +
848 " /// <remarks/>{0}" +
849 " [System.Xml.Serialization.XmlAttributeAttribute(\"member\")]{0}" +
850 " public string something {{{0}" +
852 " return this.somethingField;{0}" +
855 " this.somethingField = value;{0}" +
858 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
862 public void ExportTypeMapping_XsdPrimitive_Arrays ()
864 ArrayList types = new ArrayList ();
865 types.Add (typeof (sbyte[]));
866 types.Add (typeof (bool[]));
867 types.Add (typeof (short[]));
868 types.Add (typeof (int[]));
869 types.Add (typeof (long[]));
870 types.Add (typeof (float[]));
871 types.Add (typeof (double[]));
872 types.Add (typeof (decimal[]));
873 types.Add (typeof (ushort[]));
874 types.Add (typeof (uint[]));
875 types.Add (typeof (ulong[]));
876 types.Add (typeof (DateTime[]));
877 types.Add (typeof (XmlQualifiedName[]));
878 types.Add (typeof (string[]));
880 StringWriter sw = new StringWriter ();
881 CodeDomProvider provider = new CSharpCodeProvider ();
882 ICodeGenerator generator = provider.CreateGenerator ();
884 foreach (Type type in types) {
885 CodeNamespace codeNamespace = ExportCode (type);
886 Assert.IsNotNull (codeNamespace, type.FullName + "#1");
888 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
890 Assert.AreEqual (Environment.NewLine, sw.ToString (),
891 type.FullName + "#2");
893 sw.GetStringBuilder ().Length = 0;
898 public void ExportTypeMapping_ZeroFlagEnum ()
900 CodeNamespace codeNamespace = ExportCode (typeof (ZeroFlagEnum));
901 Assert.IsNotNull (codeNamespace, "#1");
903 StringWriter sw = new StringWriter ();
904 CodeDomProvider provider = new CSharpCodeProvider ();
905 ICodeGenerator generator = provider.CreateGenerator ();
906 generator.GenerateCodeFromNamespace (codeNamespace, sw, new CodeGeneratorOptions ());
908 Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
910 "/// <remarks/>{0}" +
911 "[System.FlagsAttribute()]{0}" +
912 "[System.CodeDom.Compiler.GeneratedCodeAttribute(\"nunit-lite-console\", \"0.0.0.0\")]{0}" +
913 "[System.SerializableAttribute()]{0}" +
914 "[System.Xml.Serialization.XmlRootAttribute(Namespace=\"\", IsNullable=false)]{0}" +
915 "public enum ZeroFlagEnum {{{0}" +
917 " /// <remarks/>{0}" +
918 " [System.Xml.Serialization.XmlEnumAttribute(\"zero\")]{0}" +
921 " /// <remarks/>{0}" +
922 " [System.Xml.Serialization.XmlEnumAttribute(\"o<n>e\")]{0}" +
925 " /// <remarks/>{0}" +
926 " [System.Xml.Serialization.XmlEnumAttribute(\"tns:t<w>o\")]{0}" +
928 "}}{0}", Environment.NewLine), sw.ToString (), "#2");
932 public void DuplicateIdentifiers ()
934 XmlSchema xs = XmlSchema.Read (File.OpenText ("Test/XmlFiles/xsd/82078.xsd"), null);
936 XmlSchemas xss = new XmlSchemas ();
938 XmlSchemaImporter imp = new XmlSchemaImporter (xss);
939 CodeNamespace cns = new CodeNamespace ();
940 XmlCodeExporter exp = new XmlCodeExporter (cns);
941 XmlQualifiedName qname = new XmlQualifiedName (
942 "Operation", "http://tempuri.org/");
943 exp.ExportTypeMapping (imp.ImportTypeMapping (qname));
944 CodeCompileUnit ccu = new CodeCompileUnit ();
945 ccu.Namespaces.Add (cns);
947 CodeDomProvider provider = new CSharpCodeProvider ();
948 ICodeCompiler compiler = provider.CreateCompiler ();
950 CompilerParameters options = new CompilerParameters ();
951 options.ReferencedAssemblies.Add ("System.dll");
952 options.ReferencedAssemblies.Add ("System.Xml.dll");
953 options.GenerateInMemory = true;
955 CompilerResults result = compiler.CompileAssemblyFromDom (options, ccu);
956 Assert.AreEqual (0, result.Errors.Count, "#1");
957 Assert.IsNotNull (result.CompiledAssembly, "#2");
961 public void ExportSimpleContentExtensionEnum ()
964 <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:b='urn:bar' targetNamespace='urn:bar'>
965 <xs:element name='Foo' type='b:DayOfWeek' />
966 <xs:complexType name='DayOfWeek'>
968 <xs:extension base='b:WeekDay' />
971 <xs:simpleType name='WeekDay'>
972 <xs:restriction base='xs:string'>
973 <xs:enumeration value='Sunday'/>
974 <xs:enumeration value='Monday'/>
975 <xs:enumeration value='Tuesday'/>
976 <xs:enumeration value='Wednesday'/>
977 <xs:enumeration value='Thursday'/>
978 <xs:enumeration value='Friday'/>
979 <xs:enumeration value='Saturday'/>
983 XmlSchema xs = XmlSchema.Read (new StringReader (xsd), null);
984 XmlSchemas xss = new XmlSchemas ();
986 XmlSchemaImporter imp = new XmlSchemaImporter (xss);
987 XmlTypeMapping m = imp.ImportTypeMapping (new XmlQualifiedName ("Foo", "urn:bar"));
988 CodeNamespace cns = new CodeNamespace ();
989 XmlCodeExporter exp = new XmlCodeExporter (cns);
990 exp.ExportTypeMapping (m);
991 CodeTypeDeclaration enumType = null;
992 foreach (CodeTypeDeclaration ctd in cns.Types)
993 if (ctd.Name == "WeekDay")
995 Assert.IsNotNull (enumType);
998 CodeNamespace ExportCode (Type type)
1000 XmlReflectionImporter imp = new XmlReflectionImporter ();
1001 XmlTypeMapping map = imp.ImportTypeMapping (type);
1002 CodeNamespace codeNamespace = new CodeNamespace ();
1003 XmlCodeExporter exp = new XmlCodeExporter (codeNamespace);
1004 exp.ExportTypeMapping (map);
1005 return codeNamespace;
1008 [XmlRootAttribute ("root", Namespace="urn:aNS", IsNullable=false)]
1011 public OptionalValueTypeContainer OptionalValue;
1012 public TestDefault Default;