public void ImportMembersMapping_NullableField () { string xsd = @" <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'> <xs:element name='Root'> <xs:complexType> <xs:sequence> <xs:element name='Bar' nillable='true' type='xs:int' /> <xs:element name='Baz' type='xs:int' /> </xs:sequence> <xs:attribute name='A' use='optional' type='xs:int' /> </xs:complexType> </xs:element> </xs:schema>"; XmlSchemaImporter imp = CreateSchemaImporter (xsd); XmlMembersMapping map = imp.ImportMembersMapping (new XmlQualifiedName ("Root")); Assert.AreEqual (3, map.Count, "#1"); XmlMemberMapping bar = map [0]; Assert.AreEqual ("Bar", bar.ElementName, "#2-1"); Assert.IsFalse (bar.CheckSpecified, "#2-2"); XmlMemberMapping baz = map [1]; Assert.AreEqual ("Baz", baz.ElementName, "#3-1"); Assert.IsFalse (baz.CheckSpecified, "#3-2"); XmlMemberMapping a = map [2]; Assert.AreEqual ("A", a.ElementName, "#4-1"); // ... element name? Assert.IsTrue (a.CheckSpecified, "#4-2"); #if NET_2_0 Assert.IsNull (map.TypeName, "#4-3"); // null at this state Assert.IsNull (map.TypeNamespace, "#4-4"); // null at this state CodeDomProvider p = new Microsoft.CSharp.CSharpCodeProvider (); Assert.AreEqual ("System.Nullable`1[System.Int32]", bar.GenerateTypeName (p), "#5-1"); Assert.AreEqual ("System.Int32", baz.GenerateTypeName (p), "#5-2"); var table = new Hashtable (); var exp = new XmlCodeExporter (new CodeNamespace ("foobar"), null, p, CodeGenerationOptions.None, table); exp.ExportMembersMapping (map); Assert.AreEqual (null, map.TypeName, "#5-3"); // filled after ExportExportMembersMapping(). Assert.AreEqual (null, map.TypeNamespace, "#5-4"); // filled after ExportMembersMapping(). // table contains some internal stuff that does not make sense in any public API. #endif }