Added unit test for the bug #3258 (Serialize|Deserialize DateTimeOffset?)
authorVinicius Jarina <viniciusjarina@gmail.com>
Tue, 8 May 2012 19:09:05 +0000 (16:09 -0300)
committerVinicius Jarina <viniciusjarina@gmail.com>
Tue, 8 May 2012 19:53:15 +0000 (16:53 -0300)
mcs/class/System.Runtime.Serialization/System.Runtime.Serialization_test.dll.sources
mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/Bug3258Test.cs [new file with mode: 0644]
mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/XmlObjectSerializerTest.cs

index e5a927efed09133540d9b17a50b5634cb2dea09d..a1091401d54f8438be073e3e4f3db3afe62240ee 100644 (file)
@@ -1,6 +1,7 @@
 System.Runtime.Serialization/Bug666333Test.cs
 System.Runtime.Serialization/Bug675144Test.cs
 System.Runtime.Serialization/Bug2843Test.cs
+System.Runtime.Serialization/Bug3258Test.cs
 System.Runtime.Serialization/Bug695203Test.cs
 System.Runtime.Serialization/DataContractResolverTest.cs
 System.Runtime.Serialization/DataContractSerializerTest_DuplicateQName.cs
diff --git a/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/Bug3258Test.cs b/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/Bug3258Test.cs
new file mode 100644 (file)
index 0000000..1d9e123
--- /dev/null
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.Serialization;
+using System.Xml;
+
+using System.Text;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Runtime.Serialization
+{
+       [TestFixture]
+       public class Bug3258Test
+       {
+               [Test]
+               public void TestSerializeNullDateTimeOffsetNullable ()
+               {
+                        // Create the writer object.
+                       StringBuilder stringBuilder = new StringBuilder ();
+
+                       DateTimeOffset? dto = null;
+
+                       DataContractSerializer ser = new DataContractSerializer (typeof (DateTimeOffset?));
+
+                       using (var xw = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (new StringWriter (stringBuilder))))
+                       {
+                               ser.WriteObject (xw, dto);
+                       }
+
+                       string actualXml   = stringBuilder.ToString ();
+                       string expectedXml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><DateTimeOffset i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\" />";
+                       
+                       Assert.AreEqual (expectedXml, actualXml, "#1 Null DateTimeOffset? serialization error");
+
+                       using (var xr = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (actualXml))))
+                       {
+                               DateTimeOffset? actualDto = (DateTimeOffset?)ser.ReadObject (xr, true);
+
+                               Assert.AreEqual (dto, actualDto, "#2 Null DateTimeOffset? deserialization error");
+                               Assert.IsNull (actualDto, "#3 Null DateTimeOffset? deserialization error");
+                       }
+               }
+               
+               [Test]
+               public void TestSerializeDateTimeOffsetNullable ()
+               {
+                        // Create the writer object.
+                       StringBuilder stringBuilder = new StringBuilder ();
+
+                       DateTimeOffset? dto = new DateTimeOffset (2012, 05, 04, 02, 34, 00, new TimeSpan (-2, 0, 0));;
+
+                       DataContractSerializer ser = new DataContractSerializer (typeof (DateTimeOffset?));
+
+                       using (var xw = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (new StringWriter (stringBuilder))))
+                       {
+                               ser.WriteObject (xw, dto);
+                       }
+
+                       string actualXml   = stringBuilder.ToString ();
+                       string expectedXml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><DateTimeOffset xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\"><DateTime>2012-05-04T04:34:00Z</DateTime><OffsetMinutes>-120</OffsetMinutes></DateTimeOffset>";
+                       
+                       Assert.AreEqual (expectedXml, actualXml, "#1 Nullable DateTimeOffset serialization error");
+
+                       using (var xr = XmlDictionaryReader.CreateDictionaryReader(XmlReader.Create (new StringReader (actualXml))))
+                       {
+                               DateTimeOffset? actualDto = (DateTimeOffset?)ser.ReadObject (xr, true);
+
+                               Assert.AreEqual (dto, actualDto, "#2 Nullable DateTimeOffset deserialization error");
+                       }
+               }
+       }
+}
index 705233649cb0f07380aa6f29139234d6a2c89f5e..b494ff6512b890f9c4f3ab5caca6b5ba61a69848 100755 (executable)
@@ -1539,6 +1539,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 +1547,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 ()