2003-07-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
authorAtsushi Eno <atsushieno@gmail.com>
Sat, 19 Jul 2003 16:49:18 +0000 (16:49 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Sat, 19 Jul 2003 16:49:18 +0000 (16:49 -0000)
* XmlValidatingReaderTests.cs : added TestValidationEvent() and
  some code refactory.

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

mcs/class/System.XML/Test/System.Xml/ChangeLog
mcs/class/System.XML/Test/System.Xml/XmlValidatingReaderTests.cs

index be1359e74e29b586baea0c296dc58690f2f5f84c..5c9792b64a90528ee6c89211d3f64b918ce59efe 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-19  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
+
+       * XmlValidatingReaderTests.cs : added TestValidationEvent() and
+         some code refactory.
+
 2003-07-12  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
 
        * XmlValidatingReaderTests.cs : added TestNonDeterministicContent() and
index 9dbbbcc04c0ec3d3d9e3431e9ea012a9b9e84667..720bb7a0ad7509282d8192aa85a1968f6778d957 100644 (file)
@@ -8,6 +8,7 @@
 //\r
 using System;\r
 using System.Xml;\r
+using System.Xml.Schema;\r
 using NUnit.Framework;\r
 \r
 namespace MonoTests.System.Xml\r
@@ -19,56 +20,58 @@ namespace MonoTests.System.Xml
                {\r
                }\r
 \r
-               XmlTextReader xtr;\r
+               XmlReader xtr;\r
                XmlValidatingReader dvr;\r
 \r
+               private XmlReader PrepareXmlReader (string xml)\r
+               {\r
+                       return new XmlTextReader (xml, XmlNodeType.Document, null);\r
+//                     XmlDocument doc = new XmlDocument ();\r
+//                     doc.LoadXml (xml);\r
+//                     return new XmlNodeReader (doc);\r
+               }\r
+\r
                [Test]\r
                public void TestSingleElement ()\r
                {\r
                        string intSubset = "<!ELEMENT root EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root />";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();\r
 \r
                        string xml2 = dtd + "<invalid />";\r
-                       xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml2);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        try {\r
                                dvr.Read ();    // invalid element.\r
                                Fail ("should be failed.");\r
-                       } catch (XmlException ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml3 = dtd + "<root>invalid PCDATA.</root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // invalid text\r
                                Fail ("should be failed.");\r
-                       } catch (XmlException ex) {\r
-                               if (!ex.Message.StartsWith ("Current element root does not allow"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml4 = dtd + "<root><invalid_child /></root>";\r
-                       xtr = new XmlTextReader (xml4, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml4);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // invalid child\r
                                Fail ("should be failed.");\r
-                       } catch (XmlException ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -78,48 +81,42 @@ namespace MonoTests.System.Xml
                        string intSubset = "<!ELEMENT root (foo)><!ELEMENT foo EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root />";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        try {\r
                                dvr.Read ();    // root: invalid end\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid end element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml2 = dtd + "<root>Test.</root>";\r
-                       xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml2);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // invalid end\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Current element root"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml3 = dtd + "<root><foo /></root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        dvr.Read ();    // foo\r
 \r
                        string xml4 = dtd + "<root><bar /></root>";\r
-                       xtr = new XmlTextReader (xml4, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml4);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // invalid element\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -129,14 +126,14 @@ namespace MonoTests.System.Xml
                        string intSubset = "<!ELEMENT root (#PCDATA | foo)*><!ELEMENT foo EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root />";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        dvr.Read ();    // end\r
 \r
                        string xml2 = dtd + "<root>Test.</root>";\r
-                       xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml2);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -144,7 +141,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // endelement root\r
 \r
                        string xml3 = dtd + "<root><foo/>Test.<foo></foo></root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -155,7 +152,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // valid endElement root\r
 \r
                        string xml4 = dtd + "<root>Test.<bar /></root>";\r
-                       xtr = new XmlTextReader (xml4, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml4);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -163,9 +160,7 @@ namespace MonoTests.System.Xml
                        try {\r
                                dvr.Read ();    // invalid element\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -175,7 +170,7 @@ namespace MonoTests.System.Xml
                        string intSubset = "<!ELEMENT root (foo, bar)><!ELEMENT foo EMPTY><!ELEMENT bar EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root><foo/><bar/></root>";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -184,7 +179,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        string xml2 = dtd + "<root><foo/></root>";\r
-                       xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml2);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -192,22 +187,18 @@ namespace MonoTests.System.Xml
                        try {\r
                                dvr.Read ();    // invalid end root\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid end element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml3 = dtd + "<root><bar/></root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // invalid element bar\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -217,7 +208,7 @@ namespace MonoTests.System.Xml
                        string intSubset = "<!ELEMENT root (foo|bar)><!ELEMENT foo EMPTY><!ELEMENT bar EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root><foo/><bar/></root>";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -225,13 +216,11 @@ namespace MonoTests.System.Xml
                        try {\r
                                dvr.Read ();    // invalid element bar\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Invalid start element"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
 \r
                        string xml2 = dtd + "<root><foo/></root>";\r
-                       xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml2);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -239,7 +228,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        string xml3 = dtd + "<root><bar/></root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -247,7 +236,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        string xml4 = dtd + "<root><foo/>text.<bar/></root>";\r
-                       xtr = new XmlTextReader (xml4, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml4);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -255,9 +244,7 @@ namespace MonoTests.System.Xml
                        try {\r
                                dvr.Read ();    // invalid text\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Current element root"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -267,13 +254,14 @@ namespace MonoTests.System.Xml
                        string intSubset = "<!ELEMENT root ANY><!ELEMENT foo EMPTY>";\r
                        string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
                        string xml1 = dtd + "<root />";\r
-                       xtr = new XmlTextReader (xml1, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml1);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // empty root.\r
                        dvr.Read ();    // end of document.\r
 \r
                        string xml2 = dtd + "<root><foo/></root>";\r
+                       xtr = PrepareXmlReader (xml2);\r
                        xtr = new XmlTextReader (xml2, XmlNodeType.Document, null);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
@@ -282,7 +270,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        string xml3 = dtd + "<root><foo /><foo></foo><foo/></root>";\r
-                       xtr = new XmlTextReader (xml3, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml3);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -292,16 +280,14 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        string xml4 = dtd + "<root><bar /></root>";\r
-                       xtr = new XmlTextReader (xml4, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml4);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        try {\r
                                dvr.Read ();    // bar: invalid (undeclared) element\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Element bar is not declared"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -320,7 +306,7 @@ namespace MonoTests.System.Xml
                        dvr.Read ();    // end root\r
 \r
                        xml = dtd + "<root><foo/><baz/></root>";\r
-                       xtr = new XmlTextReader (xml, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
@@ -340,35 +326,31 @@ namespace MonoTests.System.Xml
                        try {\r
                                dvr.Read ();    // missing attributes\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Required attribute root"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException ex) {\r
                        }\r
 \r
                        xml = dtd + "<root foo='value' />";\r
-                       xtr = new XmlTextReader (xml, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        dvr.Read ();    // end of document\r
 \r
                        xml = dtd + "<root foo='value' bar='2nd' />";\r
-                       xtr = new XmlTextReader (xml, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        dvr.Read ();    // root\r
                        dvr.Read ();    // end of document\r
 \r
                        xml = dtd + "<root foo='value' bar='2nd' baz='3rd' />";\r
-                       xtr = new XmlTextReader (xml, XmlNodeType.Document, null);\r
+                       xtr = PrepareXmlReader (xml);\r
                        dvr = new XmlValidatingReader (xtr);\r
                        dvr.Read ();    // DTD\r
                        try {\r
                                dvr.Read ();    // undeclared attribute baz\r
                                Fail ("should be failed.");\r
-                       } catch (Exception ex) {\r
-                               if (!ex.Message.StartsWith ("Attribute baz is not declared"))\r
-                                       throw ex;\r
+                       } catch (XmlSchemaException) {\r
                        }\r
                }\r
 \r
@@ -391,5 +373,35 @@ namespace MonoTests.System.Xml
                        AssertEquals ("bar", dvr.Name);\r
                        AssertEquals ("bar-def", dvr.Value);\r
                }\r
+\r
+               [Test]\r
+               public void TestValidationEvent ()\r
+               {\r
+                       string intSubset = "<!ELEMENT root EMPTY><!ATTLIST root foo CDATA 'foo-def' bar CDATA 'bar-def'>";\r
+                       string dtd = "<!DOCTYPE root [" + intSubset + "]>";\r
+                       string xml = dtd + "<foo><bar att='val' /></foo>";\r
+                       eventFired = false;\r
+                       dvr = new XmlValidatingReader (xml, XmlNodeType.Document, null);\r
+                       dvr.ValidationEventHandler += new ValidationEventHandler (OnInvalidityFound);\r
+                       dvr.ValidationType = ValidationType.DTD;\r
+                       dvr.Read ();    // DTD\r
+                       Assert (dvr.Read ());   // invalid foo\r
+                       Assert (eventFired);\r
+                       AssertEquals ("foo", dvr.Name);\r
+                       Assert (dvr.Read ());   // invalid bar\r
+                       AssertEquals ("bar", dvr.Name);\r
+                       Assert (dvr.MoveToFirstAttribute ());   // att\r
+                       AssertEquals ("att", dvr.Name);\r
+                       Assert (dvr.Read ());   // invalid end foo\r
+                       AssertEquals ("foo", dvr.Name);\r
+                       AssertEquals (XmlNodeType.EndElement, dvr.NodeType);\r
+                       Assert (!dvr.Read ());\r
+               }\r
+\r
+               private bool eventFired;\r
+               private void OnInvalidityFound (object o, ValidationEventArgs e)\r
+               {\r
+                       eventFired = true;\r
+               }\r
        }\r
 }\r