Merge pull request #1410 from alesliehughes/master
[mono.git] / mcs / class / System.Runtime.Serialization / Test / System.Runtime.Serialization / XmlObjectSerializerTest.cs
index 705233649cb0f07380aa6f29139234d6a2c89f5e..0fc956d862074bef6efc18df22ce0de563bbe21e 100755 (executable)
@@ -81,7 +81,7 @@ namespace MonoTests.System.Runtime.Serialization
                public void ConstructorKnownTypesNull ()
                {
                        // null knownTypes is allowed. Though the property is filled.
-                       Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), null).KnownTypes, "#1");
+                       Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), (IEnumerable<Type>)null).KnownTypes, "#1");
                        Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), "Foo", String.Empty, null).KnownTypes, "#2");
                        Assert.IsNotNull (new DataContractSerializer (typeof (Sample1), new XmlDictionary ().Add ("Foo"), XmlDictionaryString.Empty, null).KnownTypes, "#3");
                }
@@ -138,7 +138,8 @@ namespace MonoTests.System.Runtime.Serialization
                        ser.WriteObject (sw, 1);
                        string expected = "<int xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">1</int>";
                        byte[] buf = sw.ToArray ();
-                       Assert.AreEqual (expected, Encoding.UTF8.GetString (buf, 0, buf.Length));
+                       // Skip the utf8 bom
+                       Assert.AreEqual (expected, Encoding.UTF8.GetString (buf, 3, buf.Length - 3));
                }
 
                [Test]
@@ -813,6 +814,34 @@ namespace MonoTests.System.Runtime.Serialization
                        Assert.AreEqual (4, el.SelectNodes ("a:int", nsmgr).Count, "#4");
                }
 
+               [Test]
+               public void SerializeArrayOfAnyTypeGuid ()
+               {
+                       DataContractSerializer ser = new DataContractSerializer (typeof(object[]));
+                       StringWriter sw = new StringWriter ();
+                       using (XmlWriter w = XmlWriter.Create (sw, settings)) {
+                               ser.WriteObject (w, new object[] { Guid.Empty });
+                       }
+
+                       XmlComparer.AssertAreEqual (
+                               "<ArrayOfanyType xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"><anyType xmlns:d2p1=\"http://schemas.microsoft.com/2003/10/Serialization/\" i:type=\"d2p1:guid\">00000000-0000-0000-0000-000000000000</anyType></ArrayOfanyType>",
+                               sw.ToString ());
+               }
+
+               [Test]
+               public void SerializeArrayOfAnyTypeChar ()
+               {
+                       DataContractSerializer ser = new DataContractSerializer (typeof(object[]));
+                       StringWriter sw = new StringWriter ();
+                       using (XmlWriter w = XmlWriter.Create (sw, settings)) {
+                               ser.WriteObject (w, new object[] { new char () });
+                       }
+
+                       XmlComparer.AssertAreEqual (
+                               "<ArrayOfanyType xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"><anyType xmlns:d2p1=\"http://schemas.microsoft.com/2003/10/Serialization/\" i:type=\"d2p1:char\">0</anyType></ArrayOfanyType>",
+                               sw.ToString ());
+               }
+
                [Test]
                public void DeserializeEnum ()
                {
@@ -1539,6 +1568,7 @@ namespace MonoTests.System.Runtime.Serialization
                        var ds = new DataContractSerializer (typeof (DateTimeOffset));
                        var sw = new StringWriter ();
                        string xml = "<DateTimeOffset xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System'><DateTime>2011-03-01T02:05:06.078Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>".Replace ('\'', '"');
+                                               
                        var v = new DateTimeOffset (new DateTime (2011, 3, 1, 4, 5, 6, 78), TimeSpan.FromMinutes (120));
                        using (var xw = XmlWriter.Create (sw, settings)) {
                                ds.WriteObject (xw, v);
@@ -1546,6 +1576,21 @@ namespace MonoTests.System.Runtime.Serialization
                        Assert.AreEqual (xml, sw.ToString (), "#1");
                        Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
                }
+               
+               [Test]
+               public void DateTimeOffsetNullableSerialization ()
+               {
+                       var ds = new DataContractSerializer (typeof (DateTimeOffset?));
+                       var sw = new StringWriter ();
+                       string xml = "<DateTimeOffset xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\"><DateTime>2012-05-04T00:34:00Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>";
+                       
+                       var v = new DateTimeOffset (new DateTime (2012, 05, 04, 02, 34, 0), TimeSpan.FromMinutes (120));
+                       using (var xw = XmlWriter.Create (sw, settings)) {
+                               ds.WriteObject (xw, v);
+                       }
+                       Assert.AreEqual (xml, sw.ToString (), "#1");
+                       Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
+               }
 
                [Test]
                public void XmlDocumentSupport ()
@@ -1584,6 +1629,23 @@ namespace MonoTests.System.Runtime.Serialization
                        string xml = "<ArrayOfguid xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.microsoft.com/2003/10/Serialization/Arrays'><guid>00000000-0000-0000-0000-000000000000</guid></ArrayOfguid>".Replace ('\'', '"');
                        Assert.AreEqual (xml, sw.ToString (), "#1");
                }
+               
+               // bug #7957
+               [Test]
+               public void DeserializeEmptyDictionary ()
+               {
+                       string whatItGets = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+                               + "<MyData xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://sickhead.com/types/Example\">"
+                                       + "<Data xmlns:b=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\"/>"
+                                       + "<FirstId>b8a7eb6f-f593-4668-8178-07be9f7266d1</FirstId>"
+                                       + "<SecondId>ID-GOES-HERE</SecondId>"
+                                       + "</MyData>";
+                       var serializer = new DataContractSerializer (typeof (MyData));
+                       using (var stream = new MemoryStream (Encoding.UTF8.GetBytes (whatItGets)))
+                       {
+                               var data = serializer.ReadObject (stream);
+                       }
+               }
        }
        
        [DataContract]
@@ -2168,4 +2230,23 @@ namespace SLProto5_Different
        }
 }
 
+// bug #7957
+[DataContract(Namespace = "http://sickhead.com/types/Example")]
+public class MyData
+{
+       public MyData()
+       {
+               Data = new Dictionary<int, byte[]> ();
+       }
+
+       [DataMember]
+       public Guid FirstId { get; set; }
+
+       [DataMember]
+       public string SecondId { get; set; }
+
+       [DataMember]
+       public Dictionary<int, byte[]> Data { get; set; }
+}
+
 #endregion