// // MonoTests.System.Xml.XmlValidatingReaderTests.cs // // Author: // Atsushi Enomoto // // (C)2003 Atsushi Enomoto // using System; using System.Xml; using NUnit.Framework; namespace MonoTests.System.Xml { [TestFixture] public class XmlValidatingReaderTests : Assertion { public XmlValidatingReaderTests () { } XmlTextReader xtr; XmlValidatingReader dvr; [Test] public void TestSingleElement () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); string xml2 = dtd + ""; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD try { dvr.Read (); // invalid element. Fail ("should be failed."); } catch (XmlException ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } string xml3 = dtd + "invalid PCDATA."; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // invalid text Fail ("should be failed."); } catch (XmlException ex) { if (!ex.Message.StartsWith ("Current element root does not allow")) throw ex; } string xml4 = dtd + ""; xtr = new XmlTextReader (xml4, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // invalid child Fail ("should be failed."); } catch (XmlException ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } } [Test] public void TestElementContent () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD try { dvr.Read (); // root: invalid end Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid end element")) throw ex; } string xml2 = dtd + "Test."; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // invalid end Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Current element root")) throw ex; } string xml3 = dtd + ""; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo string xml4 = dtd + ""; xtr = new XmlTextReader (xml4, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // invalid element Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } } [Test] public void TestMixedContent () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // end string xml2 = dtd + "Test."; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // valid PCDATA dvr.Read (); // endelement root string xml3 = dtd + "Test."; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // valid foo dvr.Read (); // valid #PCDATA dvr.Read (); // valid foo dvr.Read (); // valid endElement foo dvr.Read (); // valid endElement root string xml4 = dtd + "Test."; xtr = new XmlTextReader (xml4, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // valid #PCDATA try { dvr.Read (); // invalid element Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } } [Test] public void TestSequence () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // bar dvr.Read (); // end root string xml2 = dtd + ""; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo try { dvr.Read (); // invalid end root Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid end element")) throw ex; } string xml3 = dtd + ""; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // invalid element bar Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } } [Test] public void TestChoice () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo try { dvr.Read (); // invalid element bar Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Invalid start element")) throw ex; } string xml2 = dtd + ""; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // end root string xml3 = dtd + ""; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // bar dvr.Read (); // end root string xml4 = dtd + "text."; xtr = new XmlTextReader (xml4, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo try { dvr.Read (); // invalid text Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Current element root")) throw ex; } } [Test] public void TestAny () { string intSubset = ""; string dtd = ""; string xml1 = dtd + ""; xtr = new XmlTextReader (xml1, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // empty root. dvr.Read (); // end of document. string xml2 = dtd + ""; xtr = new XmlTextReader (xml2, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // end root string xml3 = dtd + ""; xtr = new XmlTextReader (xml3, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // foo dvr.Read (); // foo dvr.Read (); // end root string xml4 = dtd + ""; xtr = new XmlTextReader (xml4, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root try { dvr.Read (); // bar: invalid (undeclared) element Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Element bar is not declared")) throw ex; } } [Test] public void TestNonDeterministicContent () { string intSubset = ""; string dtd = ""; string xml = dtd + ""; xtr = new XmlTextReader (xml, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // bar dvr.Read (); // end root xml = dtd + ""; xtr = new XmlTextReader (xml, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // foo dvr.Read (); // end root } [Test] public void TestAttributes () { string intSubset = ""; string dtd = ""; string xml = dtd + ""; dvr = new XmlValidatingReader (xml, XmlNodeType.Document, null); dvr.ValidationType = ValidationType.DTD; dvr.Read (); // DTD try { dvr.Read (); // missing attributes Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Required attribute root")) throw ex; } xml = dtd + ""; xtr = new XmlTextReader (xml, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // end of document xml = dtd + ""; xtr = new XmlTextReader (xml, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD dvr.Read (); // root dvr.Read (); // end of document xml = dtd + ""; xtr = new XmlTextReader (xml, XmlNodeType.Document, null); dvr = new XmlValidatingReader (xtr); dvr.Read (); // DTD try { dvr.Read (); // undeclared attribute baz Fail ("should be failed."); } catch (Exception ex) { if (!ex.Message.StartsWith ("Attribute baz is not declared")) throw ex; } } [Test] public void TestAttributeDefaultContribution () { string intSubset = ""; string dtd = ""; string xml = dtd + ""; dvr = new XmlValidatingReader (xml, XmlNodeType.Document, null); dvr.ValidationType = ValidationType.DTD; dvr.Read (); // DTD dvr.Read (); AssertEquals (XmlNodeType.Element, dvr.NodeType); AssertEquals ("root", dvr.Name); Assert (dvr.MoveToFirstAttribute ()); AssertEquals ("foo", dvr.Name); AssertEquals ("foo-def", dvr.Value); Assert (dvr.MoveToNextAttribute ()); AssertEquals ("bar", dvr.Name); AssertEquals ("bar-def", dvr.Value); } } }