2008-01-26 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Sat, 26 Jan 2008 10:01:07 +0000 (10:01 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Sat, 26 Jan 2008 10:01:07 +0000 (10:01 -0000)
* XNodeReader.cs : fixed GetAttribute() that wrongly resulted in
  returning "" instead of null. Fixed bug #335975.

* XNodeReaderTest.cs : test for bug #335975.

svn path=/trunk/mcs/; revision=93981

mcs/class/System.Xml.Linq/System.Xml.Linq/ChangeLog
mcs/class/System.Xml.Linq/System.Xml.Linq/XNodeReader.cs
mcs/class/System.Xml.Linq/Test/System.Xml.Linq/ChangeLog
mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XNodeReaderTest.cs

index 915b1368b00952e4f32998b81c496335df9c97aa..b30296191973eaaccb2531ac250e2c9c894cb34d 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-26  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XNodeReader.cs : fixed GetAttribute() that wrongly resulted in
+         returning "" instead of null. Fixed bug #335975.
+
 2007-11-27  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XStreamingElement.cs : implement some members.
index 0cf3db03fd2450040c9dfc01fff8148805794a4d..9ed4b74d77764571773bb576b08efa194f88b25d 100644 (file)
@@ -234,6 +234,8 @@ namespace System.Xml.Linq
 
                public override string Value {
                        get {
+                               if (ReadState != ReadState.Interactive)
+                                       return String.Empty;
                                XAttribute a = GetCurrentAttribute ();
                                if (a != null)
                                        return a.Value;
@@ -385,9 +387,9 @@ namespace System.Xml.Linq
                {
                        int a_bak = attr;
                        bool av_bak = attr_value;
-                       MoveToElement ();
-                       MoveToAttribute (i);
                        try {
+                               MoveToElement ();
+                               MoveToAttribute (i);
                                return Value;
                        } finally {
                                attr = a_bak;
@@ -399,10 +401,9 @@ namespace System.Xml.Linq
                {
                        int a_bak = attr;
                        bool av_bak = attr_value;
-                       MoveToElement ();
-                       MoveToAttribute (name);
                        try {
-                               return Value;
+                               MoveToElement ();
+                               return MoveToAttribute (name) ? Value : null;
                        } finally {
                                attr = a_bak;
                                attr_value = av_bak;
@@ -413,10 +414,9 @@ namespace System.Xml.Linq
                {
                        int a_bak = attr;
                        bool av_bak = attr_value;
-                       MoveToElement ();
-                       MoveToAttribute (local, ns);
                        try {
-                               return Value;
+                               MoveToElement ();
+                               return MoveToAttribute (local, ns) ? Value : null;
                        } finally {
                                attr = a_bak;
                                attr_value = av_bak;
index 88971522fbb8f5728e9e4756301acf76e056c0a4..9fbae9b5ea0f86adaff1b110ab629d17d80e6101 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-26  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XNodeReaderTest.cs : test for bug #335975.
+
 2007-10-26  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XTextTest.cs : added test for ToString().
index e20abc6045c8abf1d9cac274c5722494138439ad..12c10fdb58fee7fd1210a5da28fd28765179622f 100644 (file)
@@ -65,5 +65,19 @@ namespace MonoTests.System.Xml.Linq
                        xw.Close ();
                        Assert.AreEqual (xml.Replace ('\'', '"'), sw.ToString ());
                }
+
+               [Test]
+               public void GetAttribute ()
+               {
+                       // bug #335975
+                       var rdr = new StringReader ("<root><val>Value</val></root>");
+                       var xDoc = XDocument.Load (rdr);
+                       XmlReader r = xDoc.CreateReader ();
+                       Assert.AreEqual (String.Empty, r.Value, "#1");
+                       Assert.IsNull (r.GetAttribute ("nil", "http://www.w3.org/2001/XMLSchema-instance"), "#2");
+                       r.Read ();
+                       Assert.AreEqual (String.Empty, r.Value, "#3");
+                       Assert.IsNull (r.GetAttribute ("nil", "http://www.w3.org/2001/XMLSchema-instance"), "#4");
+               }
        }
 }