New test.
[mono.git] / mcs / class / System.XML / Test / System.Xml / XmlTextReaderTests.cs
index f254ce7b7ee1aaf7af3638d54bfaf865eb436483..6cade6b538c5f5875a217541c360196a3b246578 100644 (file)
@@ -1083,5 +1083,155 @@ namespace MonoTests.System.Xml
                        }
                }
 #endif
+
+               [Test]
+               public void SurrogatePair ()
+               {
+                       string xml = @"<!DOCTYPE test [<!ELEMENT test ANY>
+               <!ENTITY % a '<!ENTITY ref " + "\"\uF090\u8080\"" + @">'>
+               %a;
+       ]>
+       <test>&ref;</test>";
+                       XmlValidatingReader r = new XmlValidatingReader (xml, XmlNodeType.Document, null);
+                       r.Read ();
+                       r.Read ();
+                       r.Read ();
+                       r.Read ();
+                       AssertEquals ("#1", 0xf090, (int) r.Value [0]);
+                       AssertEquals ("#1", 0x8080, (int) r.Value [1]);
+               }
+
+               [Test]
+               [ExpectedException (typeof (XmlException))]
+               public void EntityDeclarationNotWF ()
+               {
+                       string xml = @"<!DOCTYPE doc [
+                               <!ELEMENT doc (#PCDATA)>
+                               <!ENTITY e ''>
+                               <!ENTITY e '<foo&>'>
+                               ]>
+                               <doc>&e;</doc> ";
+                       XmlTextReader xtr = new XmlTextReader (xml,
+                               XmlNodeType.Document, null);
+                       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 ()
+               {
+                       byte [] data = new byte [] {0x3c, 0x61, 0x3e, 0xf0,
+                               0xa8, 0xa7, 0x80, 0x3c, 0x2f, 0x61, 0x3e};
+                       XmlTextReader xtr = new XmlTextReader (
+                               new MemoryStream (data));
+                       xtr.Read ();
+                       string line = xtr.ReadString ();
+                       int [] arr = new int [line.Length];
+                       for (int i = 0; i < line.Length; i++)
+                               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 ();
+               }
        }
 }