Merge pull request #925 from ermshiperete/novell-bug-602934
[mono.git] / mcs / class / System.XML / Test / System.Xml.Serialization / XmlSerializationReaderTests.cs
index cdd34e148043b21a1f334a53f6e6e1cd3760848a..53e29d209c771ddf41db4af7f2d82c0097a4ea01 100644 (file)
@@ -3,12 +3,15 @@
 //
 // Author:
 //     Gert Driesen (drieseng@users.sourceforge.net)
+//     Atsushi Enomoto (atsushi@ximian.com)
 //
-//  (C) 2006 Novell
+//  (C) 2006 Gert Driesen
+//  Copyright (C) 2007 Novell, Inc.
 // 
 
 using System;
 using System.Collections;
+using System.IO;
 using System.Xml.Serialization;
 
 using NUnit.Framework;
@@ -118,6 +121,89 @@ namespace MonoTests.System.XmlSerialization
                {
                        ToEnum ("", (Hashtable) null, "DoesNotMatter");
                }
+
+               [Test]
+#if ONLY_1_1
+               [Category ("NotDotNet")] // hangs on .NET 1.1
+#endif
+               public void HandleOutAttributeParameters ()
+               {
+                       XmlReflectionMember m = new XmlReflectionMember ();
+                       m.MemberName = "hooray";
+                       m.MemberType = typeof (string);
+                       m.XmlAttributes = new XmlAttributes ();
+                       m.XmlAttributes.XmlAttribute = new XmlAttributeAttribute ();
+                       XmlReflectionImporter imp = new XmlReflectionImporter ();
+                       XmlMembersMapping map = imp.ImportMembersMapping (
+                               "elem", "urn:x", new XmlReflectionMember [] {m}, true);
+                       XmlSerializer ser = XmlSerializer.FromMappings (
+                               new XmlMapping [] {map}) [0];
+                       string xml = "<elem xmlns='urn:x' hooray='doh' />";
+                       object [] arr = ser.Deserialize (new StringReader (xml))
+                               as object [];
+                       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");
+               }
+
+               [Test]
+               public void ExplicitlyOrderedMembers1 ()
+               {
+                       var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType1));
+                       var result = (ExplicitlyOrderedMembersType1) xs.Deserialize(new StringReader (@"
+<root>
+       <child>Hello</child>
+       <child>World</child>
+       <child0>test</child0>
+</root>"));
+                       Assert.AreEqual ("Hello", result.Child1, "#1");
+                       Assert.AreEqual ("World", result.Child2, "#2");
+                       Assert.AreEqual ("test", result.Child0, "#3");
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void ExplicitlyOrderedMembers2 ()
+               {
+                       new XmlSerializer (typeof (ExplicitlyOrderedMembersType2));
+               }
+
+               [Test]
+               public void ExplicitlyOrderedMembers3 ()
+               {
+                       var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType3));
+                       var result = (ExplicitlyOrderedMembersType3) xs.Deserialize(new StringReader (@"
+<root>
+       <child>Hello</child>
+       <child>World</child>
+       <child0>test</child0>
+</root>"));
+                       Assert.AreEqual ("Hello", result.Child1, "#1");
+                       Assert.AreEqual ("World", result.Child2, "#2");
+                       Assert.IsNull (result.Child0, "#3"); // not "test"
+               }
+
+               [Test]
+               public void ExplicitlyOrderedMembers4 ()
+               {
+                       var xs = new XmlSerializer (typeof (ExplicitlyOrderedMembersType4));
+                       //Would result in an Inconsistent XML sequence error , see Bug 707434
+                       var result = (ExplicitlyOrderedMembersType4) xs.Deserialize(new StringReader (@"
+<root>
+       <child>Hello</child>
+       <child>World</child>
+       <child0>test</child0>
+</root>"));
+                       Assert.AreEqual ("Hello", result.Child1, "#1");
+                       Assert.AreEqual ("World", result.Child2, "#2");
+                       Assert.IsNull (result.Child0, "#3"); // not "test"
+               }
        }
 
        public class XmlSerializarionReaderTester : XmlSerializationReader