2006-11-14 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Tue, 14 Nov 2006 07:28:29 +0000 (07:28 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Tue, 14 Nov 2006 07:28:29 +0000 (07:28 -0000)
* XmlReaderSettings.cs : in copy constructor, copy (dispatch)
  validation event as well. Add OnValidationError() to be invoked
  by other internal stuff to raise the validation event.

* XmlSchemaValidatingReader.cs : dispatch validation events from
  XmlReaderSettings. Turned out that outside System.Xml.dll
  XmlReaderSettings.ValidationEventHandler is useless.

* XmlReaderSettingsTests.cs : added validation event handler test
  case.

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

mcs/class/System.XML/Mono.Xml.Schema/ChangeLog
mcs/class/System.XML/Mono.Xml.Schema/XmlSchemaValidatingReader.cs
mcs/class/System.XML/System.Xml/ChangeLog
mcs/class/System.XML/System.Xml/XmlReaderSettings.cs
mcs/class/System.XML/Test/System.Xml/ChangeLog
mcs/class/System.XML/Test/System.Xml/XmlReaderSettingsTests.cs

index 254763ac5f96517f3c3dcb8c31d0f4db85af784a..d77dd03108e35df3e0f7d2433e021e27d161d24c 100644 (file)
@@ -1,3 +1,9 @@
+2006-11-14  Atsushi Enomoto <atsushi@ximian.com>
+
+       * XmlSchemaValidatingReader.cs : dispatch validation events from
+         XmlReaderSettings. Turned out that outside System.Xml.dll
+         XmlReaderSettings.ValidationEventHandler is useless.
+
 2006-10-27  Atsushi Enomoto <atsushi@ximian.com>
 
        * XsdValidatingReader.cs : Fixed bug #79650. Enumeration facet was
index 90ca0ebdd07b0d6aee2c049c6ea40347ece51b84..912994db881d6b9822e4ab028b21090079ef6d94 100644 (file)
@@ -135,6 +135,9 @@ namespace Mono.Xml.Schema
                        v.LineInfoProvider = this;
                        v.ValidationEventSender = reader;
 #if !NON_MONO
+                       ValidationEventHandler += delegate (object o, ValidationEventArgs e) {
+                               settings.OnValidationError (o, e);
+                       };
                        if (settings != null && settings.Schemas != null)
                                v.XmlResolver = settings.Schemas.XmlResolver;
                        else
@@ -145,7 +148,10 @@ namespace Mono.Xml.Schema
                        v.Initialize ();
                }
 
-               public ValidationEventHandler ValidationEventHandler;
+               public event ValidationEventHandler ValidationEventHandler {
+                       add { v.ValidationEventHandler += value; }
+                       remove { v.ValidationEventHandler -= value; }
+               }
 
                public XmlSchemaType ElementSchemaType {
                        get {
index ad2f206e93661675a4b9f9fdd3ff7fc447699a8c..c89e1ec2ae57c6124de50324be0fdceea42bf68a 100644 (file)
@@ -1,3 +1,9 @@
+2006-11-14  Atsushi Enomoto <atsushi@ximian.com>
+
+       * XmlReaderSettings.cs : in copy constructor, copy (dispatch)
+         validation event as well. Add OnValidationError() to be invoked
+         by other internal stuff to raise the validation event.
+
 2006-11-13  Michael Meeks  <michael.meeks@novell.com>
 
        * XmlReader.cs, XmlTextReader.cs, XmlTextReader2.cs:
index cca3eb0323138cf2fe2add33852cdee20f8c82d8..6943395188e07864b13e0e66deb24d189466da39 100644 (file)
@@ -79,6 +79,8 @@ namespace System.Xml
                        validationType = org.validationType;
                        nameTable = org.nameTable;
                        xmlResolver = org.xmlResolver;
+                       if (org.ValidationEventHandler != null)
+                               ValidationEventHandler += org.ValidationEventHandler;
                }
 
                public event ValidationEventHandler ValidationEventHandler;
@@ -175,6 +177,14 @@ namespace System.Xml
                        }
                }
 
+               internal void OnValidationError (object o, ValidationEventArgs e)
+               {
+                       if (ValidationEventHandler != null)
+                               ValidationEventHandler (o, e);
+                       else if (e.Severity == XmlSeverityType.Error)
+                               throw e.Exception;
+               }
+
                internal void SetSchemas (XmlSchemaSet schemas)
                {
                        this.schemas = schemas;
index d1b136642496a840720031003dfe4361c72d43c8..fa374f3904b26d443b5b43426bb2693f45754724 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-14  Atsushi Enomoto <atsushi@ximian.com>
+
+       * XmlReaderSettingsTests.cs : added validation event handler test
+         case.
+
 2006-11-13  Atsushi Enomoto <atsushi@ximian.com>
 
        * XmlReaderSettingsTests.cs : added custom resolver case for primary
index 95bd44fcfa3b1a17c93ee093e234ca8a9fa0f9b0..bc8ed263bc7ef7d8ff75923642eb89ba539727ef 100644 (file)
@@ -342,6 +342,22 @@ namespace MonoTests.System.Xml
                                        xr.Read ();
                        }
                }
+
+               [Test]
+               [ExpectedException (typeof (ApplicationException))]
+               public void ValidationEventHandler ()
+               {
+                       XmlReaderSettings settings = new XmlReaderSettings ();
+                       settings.Schemas.Add (new XmlSchema ());
+                       settings.ValidationType = ValidationType.Schema;
+                       settings.ValidationEventHandler += delegate (object o, ValidationEventArgs e) {
+                               throw new ApplicationException ();
+                       };
+                       XmlReader r = XmlReader.Create (
+                               new StringReader ("<root/>"), settings);
+                       while (!r.EOF)
+                               r.Read ();
+               }
        }
 }
 #endif