}
}
#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 ();
+ }
}
}