New test.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlTextReaderTests.cs
index 4312bdbcd84d7fb0ba5a707b429ab95901654e03..6cade6b538c5f5875a217541c360196a3b246578 100644 (file)
@@ -1116,6 +1116,20 @@ namespace MonoTests.System.Xml
                        xtr.Read ();
                }
 
+               [Test] // bug #76102
+               public void SurrogateAtReaderByteCache ()
+               {
+                       XmlTextReader xtr = null;
+                       try {
+                               xtr = new XmlTextReader (File.OpenText ("Test/XmlFiles/76102.xml"));
+                               while (!xtr.EOF)
+                                       xtr.Read ();
+                       } finally {
+                               if (xtr != null)
+                                       xtr.Close ();
+                       }
+               }
+
                [Test] // bug #76247
                public void SurrogateRoundtrip ()
                {
@@ -1130,5 +1144,94 @@ namespace MonoTests.System.Xml
                                arr [i] = (int) line [i];
                        AssertEquals (new int [] {0xd862, 0xddc0}, arr);
                }
+
+               [Test]
+               [ExpectedException (typeof (XmlException))]
+               public void RejectEmptyNamespaceWithNonEmptyPrefix ()
+               {
+                       XmlTextReader xtr = new XmlTextReader ("<root xmlns:my='' />",
+                               XmlNodeType.Document, null);
+                       xtr.Read ();
+               }
+
+               [Test]
+               public void EncodingProperty ()
+               {
+                       string xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<root>\n<node>\nvalue\n</node>\n</root>";
+                       XmlTextReader xr = new XmlTextReader (xml, XmlNodeType.Document, null);
+                       AssertNull ("#1", xr.Encoding);
+                       xr.Read ();
+                       AssertEquals ("#2", Encoding.Unicode, xr.Encoding);
+               }
+
+               [Test]
+               public void WhitespaceHandlingSignificant ()
+               {
+                       XmlTextReader xtr = new XmlTextReader ("<root>  <child xml:space='preserve'>    <descendant xml:space='default'>    </descendant>   </child><child xml:space='default'>   </child>  </root>",
+                               XmlNodeType.Document, null);
+                       xtr.WhitespaceHandling = WhitespaceHandling.Significant;
+
+                       xtr.Read (); // root
+                       xtr.Read (); // child. skip whitespaces
+                       AssertEquals ("#1", XmlNodeType.Element, xtr.NodeType);
+                       xtr.Read (); // significant whitespaces
+                       AssertEquals ("#2", XmlNodeType.SignificantWhitespace, xtr.NodeType);
+                       xtr.Read ();
+                       AssertEquals ("#3", "descendant", xtr.LocalName);
+                       xtr.Read (); // end of descendant. skip whitespaces
+                       AssertEquals ("#4", XmlNodeType.EndElement, xtr.NodeType);
+                       xtr.Read (); // significant whitespaces
+                       AssertEquals ("#5", XmlNodeType.SignificantWhitespace, xtr.NodeType);
+                       xtr.Read (); // end of child
+                       xtr.Read (); // child
+                       xtr.Read (); // end of child. skip whitespaces
+                       AssertEquals ("#6", XmlNodeType.EndElement, xtr.NodeType);
+                       xtr.Read (); // end of root. skip whitespaces
+                       AssertEquals ("#7", XmlNodeType.EndElement, xtr.NodeType);
+               }
+
+               [Test]
+               public void WhitespaceHandlingNone ()
+               {
+                       XmlTextReader xtr = new XmlTextReader ("<root>  <child xml:space='preserve'>    <descendant xml:space='default'>    </descendant>   </child><child xml:space='default'>   </child>  </root>",
+                               XmlNodeType.Document, null);
+                       xtr.WhitespaceHandling = WhitespaceHandling.None;
+
+                       xtr.Read (); // root
+                       xtr.Read (); // child. skip whitespaces
+                       AssertEquals ("#1", XmlNodeType.Element, xtr.NodeType);
+                       xtr.Read (); // descendant. skip significant whitespaces
+                       AssertEquals ("#2", "descendant", xtr.LocalName);
+                       xtr.Read (); // end of descendant. skip whitespaces
+                       AssertEquals ("#3", XmlNodeType.EndElement, xtr.NodeType);
+                       xtr.Read (); // end of child. skip significant whitespaces
+                       xtr.Read (); // child
+                       xtr.Read (); // end of child. skip whitespaces
+                       AssertEquals ("#6", XmlNodeType.EndElement, xtr.NodeType);
+                       xtr.Read (); // end of root. skip whitespaces
+                       AssertEquals ("#7", XmlNodeType.EndElement, xtr.NodeType);
+               }
+
+               [Test]
+               public void WhitespacesAfterTextDeclaration ()
+               {
+                       XmlTextReader xtr = new XmlTextReader (
+                               "<?xml version='1.0' encoding='utf-8' ?> <x/>",
+                               XmlNodeType.Element,
+                               null);
+                       xtr.Read ();
+                       AssertEquals ("#1", XmlNodeType.Whitespace, xtr.NodeType);
+                       AssertEquals ("#2", " ", xtr.Value);
+               }
+
+               // bug #79683
+               [Test]
+               public void NotationPERef ()
+               {
+                       string xml = "<!DOCTYPE root SYSTEM 'Test/XmlFiles/79683.dtd'><root/>";
+                       XmlTextReader xtr = new XmlTextReader (xml, XmlNodeType.Document, null);
+                       while (!xtr.EOF)
+                               xtr.Read ();
+               }
        }
 }