* XmlSchemaTests.cs: added tests for bug #502115.
authorGert Driesen <drieseng@users.sourceforge.net>
Fri, 22 May 2009 11:02:36 +0000 (11:02 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Fri, 22 May 2009 11:02:36 +0000 (11:02 -0000)
* extension-attr-redefine-*.xsd: new test files.

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

mcs/class/System.XML/Test/System.Xml.Schema/ChangeLog
mcs/class/System.XML/Test/System.Xml.Schema/XmlSchemaTests.cs
mcs/class/System.XML/Test/XmlFiles/xsd/ChangeLog
mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-1.xsd [new file with mode: 0644]
mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-2.xsd [new file with mode: 0644]
mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-3.xsd [new file with mode: 0644]

index d585d347cf03c8f01735a34b0a0c1e650f0179c6..bbab16234d6d9f0a21f56e8fc7738aeb8469504e 100644 (file)
@@ -1,3 +1,7 @@
+2009-05-21  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * XmlSchemaTests.cs: added tests for bug #502115.
+
 2009-05-07  Jonas Larsson <jonas.larsson@manodo.se> 
 
        * XmlSchemaValidatorTests.cs : added test for bug #501666.
index 59abd6b8253a0bd8638e407dda73bf479d31a8ea..d719a6a876ddb8a1cfb8b000f312e7fafb9ab815 100644 (file)
@@ -20,6 +20,8 @@ namespace MonoTests.System.Xml
        [TestFixture]
        public class XmlSchemaTests : XmlSchemaAssertion
        {
+               static readonly bool StrictMsCompliant = Environment.GetEnvironmentVariable ("MONO_STRICT_MS_COMPLIANT") == "yes";
+
                [Test]
                public void TestRead ()
                {
@@ -419,7 +421,135 @@ namespace MonoTests.System.Xml
                                r.Close ();
                        }
                }
-               
+
+               [Test] // bug #502115
+               public void ExtensionRedefineAttribute1 ()
+               {
+                       const string xml = "<Bar xmlns='foo'/>";
+
+                       XmlSchema schema = GetSchema ("Test/XmlFiles/xsd/extension-attr-redefine-1.xsd");
+
+#if NET_2_0
+                       XmlSchemaSet xss = new XmlSchemaSet ();
+                       xss.Add (schema);
+                       if (StrictMsCompliant) {
+                               xss.Compile ();
+                       } else {
+                               try {
+                                       xss.Compile ();
+                                       Fail ();
+                               } catch (XmlSchemaException) {
+                               }
+                               return;
+                       }
+
+                       StringReader sr = new StringReader (xml);
+
+                       XmlReaderSettings settings = new XmlReaderSettings ();
+                       settings.ValidationType = ValidationType.Schema;
+                       settings.Schemas = xss;
+                       XmlReader vr = XmlReader.Create (sr, settings);
+#else
+                       if (StrictMsCompliant) {
+                               schema.Compile (null);
+                       } else {
+                               try {
+                                       schema.Compile (null);
+                                       Fail ();
+                               } catch (XmlSchemaException) {
+                               }
+                       }
+
+                       XmlValidatingReader vr = new XmlValidatingReader (xml,
+                               XmlNodeType.Document, null);
+                       vr.Schemas.Add (schema);
+                       vr.ValidationType = ValidationType.Schema;
+#endif
+
+                       try {
+                               vr.Read ();
+                               Fail ();
+                       } catch (XmlSchemaException) {
+                       }
+               }
+
+               [Test] // bug #502115
+               public void ExtensionRedefineAttribute2 ()
+               {
+                       const string xml = "<Bar xmlns='foo'/>";
+
+                       XmlSchema schema = GetSchema ("Test/XmlFiles/xsd/extension-attr-redefine-2.xsd");
+
+#if NET_2_0
+                       XmlSchemaSet xss = new XmlSchemaSet ();
+                       xss.Add (schema);
+                       xss.Compile ();
+
+                       StringReader sr = new StringReader (xml);
+
+                       XmlReaderSettings settings = new XmlReaderSettings ();
+                       settings.ValidationType = ValidationType.Schema;
+                       settings.Schemas = xss;
+                       XmlReader vr = XmlReader.Create (sr, settings);
+#else
+                       schema.Compile (null);
+
+                       XmlValidatingReader vr = new XmlValidatingReader (xml,
+                               XmlNodeType.Document, null);
+                       vr.Schemas.Add (schema);
+                       vr.ValidationType = ValidationType.Schema;
+#endif
+
+                       while (vr.Read ()) ;
+               }
+
+               [Test] // bug #502115
+               public void ExtensionRedefineAttribute3 ()
+               {
+                       const string xml = "<Bar xmlns='foo'/>";
+
+                       XmlSchema schema = GetSchema ("Test/XmlFiles/xsd/extension-attr-redefine-3.xsd");
+
+#if NET_2_0
+                       XmlSchemaSet xss = new XmlSchemaSet ();
+                       xss.Add (schema);
+                       if (StrictMsCompliant) {
+                               xss.Compile ();
+                       } else {
+                               try {
+                                       xss.Compile ();
+                                       Fail ();
+                               } catch (XmlSchemaException) {
+                               }
+                               return;
+                       }
+
+                       StringReader sr = new StringReader ("<Bar xmlns='foo'/>");
+
+                       XmlReaderSettings settings = new XmlReaderSettings ();
+                       settings.ValidationType = ValidationType.Schema;
+                       settings.Schemas = xss;
+                       XmlReader vr = XmlReader.Create (sr, settings);
+#else
+                       if (StrictMsCompliant) {
+                               schema.Compile (null);
+                       } else {
+                               try {
+                                       schema.Compile (null);
+                                       Fail ();
+                               } catch (XmlSchemaException) {
+                               }
+                       }
+
+                       XmlValidatingReader vr = new XmlValidatingReader (xml,
+                               XmlNodeType.Document, null);
+                       vr.Schemas.Add (schema);
+                       vr.ValidationType = ValidationType.Schema;
+#endif
+
+                       while (vr.Read ()) ;
+               }
+
 #if NET_2_0
 
                internal class XmlTestResolver : XmlResolver
index d62c4f78d43235256ce329a93b9e25ac7c4ed337..64bdb6c1fa629c35fad58f1ea97c31ccdd8b21dd 100644 (file)
@@ -1,3 +1,7 @@
+2009-05-21  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * extension-attr-redefine-*.xsd: new test files.
+
 2008-12-15  Atsushi Enomoto  <atsushi@ximian.com>
 
        * import-subst-dbr-base.xsd, import-subst-dbr-ext.xsd :
diff --git a/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-1.xsd b/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-1.xsd
new file mode 100644 (file)
index 0000000..8c76f0c
--- /dev/null
@@ -0,0 +1,14 @@
+<xs:schema xmlns="foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="foo" id="foo">
+       <xs:element name="Foo" type="FooType" />
+       <xs:element name="Bar" type="BarType" />
+       <xs:complexType name="FooType">
+               <xs:attribute name="name" type="xs:string" use="optional"/>
+       </xs:complexType>
+       <xs:complexType name="BarType">
+               <xs:complexContent>
+                       <xs:extension base="FooType">
+                               <xs:attribute name="name" type="xs:string" use="required"/>
+                       </xs:extension>
+               </xs:complexContent>
+       </xs:complexType>
+</xs:schema>
diff --git a/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-2.xsd b/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-2.xsd
new file mode 100644 (file)
index 0000000..aefd30f
--- /dev/null
@@ -0,0 +1,14 @@
+<xs:schema xmlns="foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="foo" id="foo">
+       <xs:element name="Foo" type="FooType" />
+       <xs:element name="Bar" type="BarType" />
+       <xs:complexType name="FooType">
+               <xs:attribute name="name" type="xs:string" use="optional"/>
+       </xs:complexType>
+       <xs:complexType name="BarType">
+               <xs:complexContent>
+                       <xs:extension base="FooType">
+                               <xs:attribute name="name" type="xs:string" use="optional"/>
+                       </xs:extension>
+               </xs:complexContent>
+       </xs:complexType>
+</xs:schema>
diff --git a/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-3.xsd b/mcs/class/System.XML/Test/XmlFiles/xsd/extension-attr-redefine-3.xsd
new file mode 100644 (file)
index 0000000..f249df1
--- /dev/null
@@ -0,0 +1,14 @@
+<xs:schema xmlns="foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="foo" id="foo">
+       <xs:element name="Foo" type="FooType" />
+       <xs:element name="Bar" type="BarType" />
+       <xs:complexType name="FooType">
+               <xs:attribute name="name" type="xs:string" use="required"/>
+       </xs:complexType>
+       <xs:complexType name="BarType">
+               <xs:complexContent>
+                       <xs:extension base="FooType">
+                               <xs:attribute name="name" type="xs:string" use="optional"/>
+                       </xs:extension>
+               </xs:complexContent>
+       </xs:complexType>
+</xs:schema>