//\r
using System;\r
using System.Xml;\r
+using System.Xml.Schema;\r
using NUnit.Framework;\r
\r
namespace MonoTests.System.Xml\r
{\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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