[xml] XmlDocument.ReadNode() should not special case XmlTextReader.
authorAtsushi Eno <atsushieno@gmail.com>
Fri, 31 Oct 2014 16:06:05 +0000 (00:06 +0800)
committerAtsushi Eno <atsushieno@gmail.com>
Fri, 31 Oct 2014 16:06:05 +0000 (00:06 +0800)
Added test case that proves this change (by baulig).

mcs/class/System.XML/System.Xml/XmlDocument.cs
mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs

index 4d1db5db58f0cf5c08c2597d9d08e26f191a2751..c93d68b5f37fb4db426918a5b8c06726d160b3bb 100644 (file)
@@ -858,20 +858,7 @@ namespace System.Xml
                [PermissionSet (SecurityAction.InheritanceDemand, Unrestricted = true)]
                public virtual XmlNode ReadNode (XmlReader reader)
                {
-                       if (PreserveWhitespace)
-                               return ReadNodeCore (reader);
-                       XmlTextReader xtr = reader as XmlTextReader;
-                       if (xtr != null && xtr.WhitespaceHandling ==
-                           WhitespaceHandling.All) {
-                               try {
-                                       xtr.WhitespaceHandling = WhitespaceHandling.Significant;
-                                       return ReadNodeCore (reader);
-                               } finally {
-                                       xtr.WhitespaceHandling = WhitespaceHandling.All;
-                               }
-                       }
-                       else
-                               return ReadNodeCore (reader);
+                       return ReadNodeCore (reader);
                }
 
                XmlNode ReadNodeCore (XmlReader reader)
index d0898923255140ab6beee3ce26027b81790a5692..596a808aac3d46ded22129990ded45f8d1866381 100644 (file)
@@ -1433,5 +1433,43 @@ namespace MonoTests.System.Xml
                        Assert.IsFalse (reader.ReadAttributeValue(), "#4");
                        Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#5");
                }
+               
+               [Test]
+               public void Whitespaces ()
+               {
+                       const string xml = "<?xml version=\"1.0\"?><test> <foo name=\"Hello\"> <value>World</value> </foo> <foo name=\"Foo\"><value>Bar</value></foo></test>";
+                       var reader = new XmlTextReader (new StringReader (xml));
+                       //reader.WhitespaceHandling = WhitespaceHandling.All;
+
+                       reader.Read ();
+                       Assert.AreEqual  (XmlNodeType.XmlDeclaration, reader.NodeType, "#1a");
+                       reader.Read ();
+                       Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "#1b");
+                       Assert.AreEqual ("test", reader.Name, "#1c");
+
+                       reader.Read ();
+                       if  (reader.NodeType == XmlNodeType.Whitespace)
+                               reader.Read ();
+
+                       Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "#2a");
+                       Assert.AreEqual ("foo", reader.Name, "#2b");
+
+                       var doc = new XmlDocument ();
+                       //doc.PreserveWhitespace = true;
+                       doc.ReadNode (reader);
+
+                       Assert.AreEqual (XmlNodeType.Whitespace, reader.NodeType, "#3");
+
+                       reader.Read ();
+                       if  (reader.NodeType == XmlNodeType.Whitespace)
+                               reader.Read ();
+
+                       Assert.AreEqual (XmlNodeType.Element, reader.NodeType, "#4");
+                       Assert.AreEqual ("foo", reader.Name, "#4b");
+
+                       doc.ReadNode (reader);
+
+                       Assert.AreEqual (XmlNodeType.EndElement, reader.NodeType, "#5");
+               }
        }
 }