Преглед изворни кода

[xml] XmlTextReader: Value was wrong after ReadAttributeValue() on xml declaration.

Atsushi Eno пре 11 година
родитељ
комит
976be34045

+ 1 - 1
mcs/class/System.XML/System.Xml/XmlTextReader.cs

@@ -716,7 +716,6 @@ namespace Mono.Xml2
 					if (valueCache != null)
 						return valueCache;
 					if (ValueBufferStart >= 0) {
-//Console.WriteLine (NodeType + " / " + ValueBuffer.Length + " / " + ValueBufferStart + " / " + ValueBufferEnd);
 						valueCache = Reader.valueBuffer.ToString (ValueBufferStart, ValueBufferEnd - ValueBufferStart);
 						return valueCache;
 					}
@@ -1800,6 +1799,7 @@ namespace Mono.Xml2
 				value,
 				false);
 			ati.Value = value;
+			ati.ValueTokenStartIndex = ati.ValueTokenEndIndex = currentAttributeValue;
 			attributeCount++;
 		}
 

+ 51 - 0
mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs

@@ -1382,5 +1382,56 @@ namespace MonoTests.System.Xml
 			var xtr = new XmlTextReader (ms);
 			xtr.Read ();
 		}
+		
+		[Test]
+		public void XmlDeclarationReadAttributeValue ()
+		{
+			const string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?><hello />";
+			var reader = new XmlTextReader (new StringReader (input));
+			reader.WhitespaceHandling = WhitespaceHandling.All;
+			reader.Read ();
+			
+			Assert.AreEqual ("1.0", reader.GetAttribute ("version"), "#0");
+			Assert.AreEqual ("utf-8", reader.GetAttribute ("encoding"), "#0-2");
+
+			Assert.IsTrue (reader.MoveToNextAttribute (), "#1");
+			Assert.AreEqual ("1.0", reader.Value, "#1-1");
+			Assert.IsTrue (reader.ReadAttributeValue (), "#2");
+			Assert.AreEqual ("1.0", reader.Value, "#3");
+			Assert.IsFalse (reader.ReadAttributeValue (), "#4");
+
+			Assert.IsTrue (reader.MoveToNextAttribute (), "#5");
+			Assert.AreEqual ("utf-8", reader.Value, "#5-1");
+			Assert.IsTrue (reader.ReadAttributeValue (), "#6");
+			Assert.AreEqual ("utf-8", reader.Value, "#7");
+			Assert.IsFalse (reader.ReadAttributeValue (), "#8");
+
+			Assert.IsFalse (reader.MoveToNextAttribute (), "#9");
+			Assert.IsFalse (reader.ReadAttributeValue (), "#10");
+		}
+		
+		[Test]
+		public void XmlDeclarationReadAttributeValue2 ()
+		{
+			const string input = "<?xml version=\"1.0\" encoding=\"utf-8\"?><hello />";
+			var reader = new XmlTextReader (new StringReader (input));
+			reader.WhitespaceHandling = WhitespaceHandling.All;
+			reader.Read ();
+			Assert.IsTrue (reader.MoveToNextAttribute (), "#1a");
+			Assert.IsTrue (reader.ReadAttributeValue (), "#1b");
+			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#1c");
+			Assert.AreEqual ("1.0", reader.Value, "#1d");
+			Assert.IsFalse (reader.ReadAttributeValue(), "#1e");
+
+			Assert.IsTrue (reader.MoveToNextAttribute(), "#2a");
+			Assert.IsTrue (reader.ReadAttributeValue(), "#2b");
+			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#2c");
+			Assert.AreEqual ("utf-8", reader.Value, "#2d");
+			Assert.IsFalse (reader.ReadAttributeValue(), "#2e");
+
+			Assert.IsFalse (reader.MoveToNextAttribute(), "#3");
+			Assert.IsFalse (reader.ReadAttributeValue(), "#4");
+			Assert.AreEqual (XmlNodeType.Text, reader.NodeType, "#5");
+		}
 	}
 }