2007-02-20 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Tue, 20 Feb 2007 07:38:35 +0000 (07:38 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Tue, 20 Feb 2007 07:38:35 +0000 (07:38 -0000)
* SerializationCodeGenerator.cs,
  XmlSerializationReaderInterpreter.cs :
  Handle attributes on non-empty elements as well. Fixed bug #80131.

* XmlSerializationReaderTests.cs : test non-empty element as well.

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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
mcs/class/System.XML/Test/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializationReaderTests.cs

index 9f162f419e0732b96ec7d60c513a20d19e9c30ef..47c490eda1143138cbb9f058b17a402c5e39a342 100644 (file)
@@ -1,3 +1,9 @@
+2007-02-20  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * SerializationCodeGenerator.cs,
+         XmlSerializationReaderInterpreter.cs :
+         Handle attributes on non-empty elements as well. Fixed bug #80131.
+
 2007-02-20  Atsushi Enomoto  <atsushi@ximian.com>
 
        * SerializationCodeGenerator.cs,
index 704978a86051fa9beeda3ca8c0cf1d4407146587..0167e359d2bb1bd8be33f6447b794eafb43c7a87 100644 (file)
@@ -1444,10 +1444,10 @@ namespace System.Xml.Serialization
                                        WriteLineInd ("{");
                                        WriteLine ("if (Reader.IsStartElement(" + GetLiteral(typeMap.ElementName) + ", " + GetLiteral(typeMap.Namespace) + "))");
                                        WriteLineInd ("{");
-                                       WriteLine ("if (Reader.IsEmptyElement)");
-                                       WriteLineInd ("{");
                                        bool dummy = false;
                                        GenerateReadAttributeMembers (typeMap, (ClassMap)typeMap.ObjectMap, "parameters", true, ref dummy);
+                                       WriteLine ("if (Reader.IsEmptyElement)");
+                                       WriteLineInd ("{");
                                        WriteLine ("Reader.Skip(); Reader.MoveToContent(); continue;");
                                        WriteLineUni ("}");
                                        WriteLine ("Reader.ReadStartElement();");
@@ -2061,6 +2061,7 @@ namespace System.Xml.Serialization
                                GenerateSetMemberValue (anyAttrMember, ob, "anyAttributeArray", isValueList);
                        }
                        WriteLine ("");
+                       WriteLine ("Reader.MoveToElement ();");
 
                        GenerateEndHook ();
                }
index 7f63147dfb256164b320b046142c699fe4696c68..367f1e79581a8cc7fd4beb2c0602ded142e26554 100644 (file)
@@ -144,8 +144,8 @@ namespace System.Xml.Serialization
                                        if (Reader.IsStartElement(typeMap.ElementName, typeMap.Namespace) 
                                            || _format == SerializationFormat.Encoded)  
                                        {
+                                               ReadAttributeMembers ((ClassMap)typeMap.ObjectMap, parameters, true);
                                                if (Reader.IsEmptyElement) {
-                                                       ReadAttributeMembers ((ClassMap)typeMap.ObjectMap, parameters, true);
                                                        Reader.Skip();
                                                        Reader.MoveToContent();
                                                        continue;
@@ -286,6 +286,7 @@ namespace System.Xml.Serialization
                                anyAttributeArray = ShrinkArray ((Array)anyAttributeArray, anyAttributeIndex, anyAttrMember.TypeData.Type.GetElementType(), true);
                                SetMemberValue (anyAttrMember, ob, anyAttributeArray, isValueList);
                        }
+                       Reader.MoveToElement ();
                }
 
                void ReadMembers (ClassMap map, object ob, bool isValueList, bool readByOrder)
index 3a988ee9c45a6f80e404fb491e5345571d5a275e..b5dab02b0eac07586e57df6085224b2f47defb45 100644 (file)
@@ -1,4 +1,8 @@
-2007-02-19  Atsushi Enomoto  <atsushi@ximian.com>
+2007-02-20  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlSerializationReaderTests.cs : test non-empty element as well.
+
+2007-02-20  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlSerializationReaderTests.cs : added test for out attribute
          parameters. It also tests empty root element.
index e9f21f0fae8a393194b72b1faa44de3cca72275c..5d094084251c1843a2a69570267e895037609460 100644 (file)
@@ -141,6 +141,12 @@ namespace MonoTests.System.XmlSerialization
                        Assert.IsNotNull (arr, "#1");
                        Assert.AreEqual (1, arr.Length, "#2");
                        Assert.AreEqual ("doh", arr [0], "#3");
+
+                       xml = "<elem xmlns='urn:x' hooray='doh'></elem>";
+                       arr = ser.Deserialize (new StringReader (xml)) as object [];
+                       Assert.IsNotNull (arr, "#4");
+                       Assert.AreEqual (1, arr.Length, "#5");
+                       Assert.AreEqual ("doh", arr [0], "#6");
                }
        }