Merge pull request #3809 from lateralusX/jlorenss/win-api-family-support-cleanup
[mono.git] / mcs / class / System.Xml.Linq / Test / System.Xml.Linq / XElementTest.cs
index 69c3f23f164399459fc91ce79d4d8079535d0c3a..f93bbabc3d88e21bca92fc48e741c150f261a945 100644 (file)
@@ -29,6 +29,7 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
 using System.Linq;
+using System.Text;
 using System.Threading;
 using System.Xml;
 using System.Xml.Linq;
@@ -2083,7 +2084,6 @@ namespace MonoTests.System.Xml.Linq
                        public XElement Content;
                }
 
-#if NET_4_5
                [Test]
                // Bug #12571
                public void DeserializeXElement ()
@@ -2098,7 +2098,27 @@ namespace MonoTests.System.Xml.Linq
                        var xe = (SerializableClass)res;
                        Assert.AreEqual (xe.Content.ToString (), "<Data />", "#3");
                }
-#endif
+
+               [XmlType ("Root")]
+               public class DeserializeXElementArray_Data
+               {
+                       [XmlAnyElement]
+                       public XElement[] Content;
+               }
+
+               [Test]
+               public void DeserializeXElementArray ()
+               {
+                       var xmlString = "<Root><Data /></Root>";
+
+                       var serializer = new XmlSerializer (typeof (DeserializeXElementArray_Data));
+                       var res = serializer.Deserialize (new StringReader (xmlString));
+
+                       Assert.IsNotNull (res, "#1");
+                       Assert.AreEqual (typeof (DeserializeXElementArray_Data), res.GetType (), "#2");
+                       var xe = (DeserializeXElementArray_Data)res;
+                       Assert.AreEqual (xe.Content [0].ToString (), "<Data />", "#3");
+               }
 
                [Test] // Bug #20151
                public void XElementFromArrayWithNullValuesAsObject ()
@@ -2107,5 +2127,48 @@ namespace MonoTests.System.Xml.Linq
                        var el = new XElement ("test", (object)content);
                        Assert.AreEqual ("<test>content1content2</test>", el.ToString ());
                }
+
+               [Test] // bug #14856
+               public void PossibleDuplicateNamespaces ()
+               {
+            string testXML =
+                "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
+                "<TestElement xmlns=\"http://www.test.com/TestNamespace\" />";
+
+            using (var stream = new MemoryStream (Encoding.UTF8.GetBytes (testXML)))
+            {
+                var root = XElement.Load (stream);
+                using (var savedStream = new MemoryStream ())
+                {
+                    var options = SaveOptions.None;
+
+                    // Comment out this line to make it not crash.
+                    options |= SaveOptions.OmitDuplicateNamespaces;
+
+                    root.Save (savedStream, options);
+                    savedStream.Flush ();
+                    savedStream.Position = 0;
+
+                    var settings = new XmlReaderSettings { IgnoreComments = true, IgnoreWhitespace = true };
+                    using (var xmlReader = XmlReader.Create (savedStream, settings))
+                    {
+                        while (xmlReader.Read ())
+                        {
+                        }
+                    }
+                }
+            }
+               }
+
+               [Test]
+               public void ParseVsReadXml ()
+               {
+                       var p = XElement.Parse ("<root xmlns='urn:foo'><foo><xxx /></foo><x:bar xmlns:x='urn:bar'><yyy /></x:bar><baz xmlns=''><zzz /></baz></root>");
+                       var r = XElement.Parse ("<foo />");
+                       XmlReader xr = XmlReader.Create (new StringReader ("<root xmlns='urn:foo'><foo><xxx /></foo><x:bar xmlns:x='urn:bar'><yyy /></x:bar><baz xmlns=''><zzz /></baz></root>"), new XmlReaderSettings ());
+                       ((IXmlSerializable)r).ReadXml (xr);
+
+                       Assert.IsTrue (XNode.DeepEquals (p, r), "The XElements were not equal.\nParse() expected:\n{0}\n\nBut ReadXml() was:\n{1}\n", p, r);
+               }
        }
 }