2006-02-16 Lluis Sanchez Gual <lluis@novell.com>
authorLluis Sanchez <lluis@novell.com>
Thu, 16 Feb 2006 17:01:50 +0000 (17:01 -0000)
committerLluis Sanchez <lluis@novell.com>
Thu, 16 Feb 2006 17:01:50 +0000 (17:01 -0000)
* XmlSchemaImporterTests.cs: Added test for bug #76848.

svn path=/trunk/mcs/; revision=56949

mcs/class/System.XML/Test/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSchemaImporterTests.cs

index c7548f4f8f2adbf10c16169a19b614fe08957c03..952ca70781b407eb1c59e5f6a88d84798cd1ad52 100644 (file)
@@ -1,3 +1,7 @@
+2006-02-16  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * XmlSchemaImporterTests.cs: Added test for bug #76848.
+
 2006-02-11  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * XmlRootAttributeTests.cs: Set eol-style to CRLF.
index e3eb00611b6576087751c9f5aa935b3b4e4ef118..bf17406bf324f8ba89f266efd0b7175cfff3e1e1 100644 (file)
@@ -8,6 +8,7 @@
 // 
 
 using System;
+using System.CodeDom;
 using System.Collections;
 using System.Globalization;
 using System.IO;
@@ -411,6 +412,88 @@ namespace MonoTests.System.XmlSerialization
                        Assert.AreEqual ("System.DateTime", map.TypeFullName, "#7");
                        Assert.AreEqual ("DateTime", map.TypeName, "#8");
                }
+               
+               [Test]
+               public void ImportTypeMapping_EnumSimpleContent ()
+               {
+                       string schemaFragment = "<?xml version=\"1.0\" encoding=\"utf-16\"?>" +
+                               "<s:schema xmlns:tns=\"NSDate\" elementFormDefault=\"qualified\" targetNamespace=\"NSDate\" xmlns:s=\"http://www.w3.org/2001/XMLSchema\">";
+                       schemaFragment += "      <s:element name=\"trans\" type=\"tns:TranslationStatus\" />";
+                       schemaFragment += "      <s:complexType name=\"TranslationStatus\">";
+                       schemaFragment += "        <s:simpleContent>";
+                       schemaFragment += "          <s:extension base=\"tns:StatusType\">";
+                       schemaFragment += "            <s:attribute name=\"Language\" type=\"s:int\" use=\"required\" />";
+                       schemaFragment += "          </s:extension>";
+                       schemaFragment += "        </s:simpleContent>";
+                       schemaFragment += "      </s:complexType>";
+                       schemaFragment += "      <s:simpleType name=\"StatusType\">";
+                       schemaFragment += "        <s:restriction base=\"s:string\">";
+                       schemaFragment += "          <s:enumeration value=\"Untouched\" />";
+                       schemaFragment += "          <s:enumeration value=\"Touched\" />";
+                       schemaFragment += "          <s:enumeration value=\"Complete\" />";
+                       schemaFragment += "          <s:enumeration value=\"None\" />";
+                       schemaFragment += "        </s:restriction>";
+                       schemaFragment += "      </s:simpleType>";
+                       schemaFragment += "</s:schema>";
+
+                       XmlSchemas schemas = new XmlSchemas ();
+                       schemas.Add (XmlSchema.Read (new StringReader (schemaFragment), null));
+
+                       ArrayList qnames = GetXmlQualifiedNames (schemas);
+                       Assert.AreEqual (1, qnames.Count, "#1");
+
+                       XmlQualifiedName qname = (XmlQualifiedName) qnames[0];
+
+                       Assert.AreEqual ("trans", qname.Name, "#2");
+                       Assert.AreEqual ("NSDate", qname.Namespace, "#3");
+
+                       XmlSchemaImporter importer = new XmlSchemaImporter (schemas);
+                       XmlTypeMapping map = importer.ImportTypeMapping ((XmlQualifiedName) qnames[0]);
+
+                       Assert.IsNotNull (map, "#4");
+                       Assert.AreEqual ("trans", map.ElementName, "#5");
+                       Assert.AreEqual ("NSDate", map.Namespace, "#6");
+                       Assert.AreEqual ("TranslationStatus", map.TypeFullName, "#7");
+                       Assert.AreEqual ("TranslationStatus", map.TypeName, "#8");
+                       
+                       CodeNamespace codeNamespace = ExportCode (map);
+                       Assert.IsNotNull (codeNamespace);
+                       
+                       CodeTypeDeclaration type = FindType (codeNamespace, "TranslationStatus");
+                       Assert.IsNotNull (type, "#9");
+                       
+                       CodeMemberField field = FindMember (type, "Value") as CodeMemberField;
+                       Assert.IsNotNull (field, "#10");
+                       Assert.AreEqual ("StatusType", field.Type.BaseType, "#11");
+                       
+                       field = FindMember (type, "Language") as CodeMemberField;
+                       Assert.IsNotNull (field, "#12");
+                       Assert.AreEqual ("System.Int32", field.Type.BaseType, "#13");
+               }
+               
+               CodeNamespace ExportCode (XmlTypeMapping map)
+               {
+                       CodeNamespace codeNamespace = new CodeNamespace ();
+                       XmlCodeExporter exp = new XmlCodeExporter (codeNamespace);
+                       exp.ExportTypeMapping (map);
+                       return codeNamespace;
+               }
+               
+               CodeTypeDeclaration FindType (CodeNamespace codeNamespace, string name)
+               {
+                       foreach (CodeTypeDeclaration t in codeNamespace.Types)
+                               if (t.Name == name)
+                                       return t;
+                       return null;
+               }
+               
+               CodeTypeMember FindMember (CodeTypeDeclaration type, string name)
+               {
+                       foreach (CodeTypeMember m in type.Members)
+                               if (m.Name == name)
+                                       return m;
+                       return null;
+               }
 
                private static XmlSchemas ExportType (Type type)
                {