Fix DateTime.MinValue in HttpWebRequest.Date.
authorMartin Baulig <martin.baulig@gmail.com>
Tue, 26 Jun 2012 00:48:51 +0000 (02:48 +0200)
committerMartin Baulig <martin.baulig@gmail.com>
Tue, 26 Jun 2012 00:51:09 +0000 (02:51 +0200)
* HttpWebRequestTest.cs: Extend this by adding each DateTimeKind
  and testing the result.  This test now passes again.

mcs/class/System/System.Net/HttpWebRequest.cs
mcs/class/System/Test/System.Net/HttpWebRequestTest.cs

index 623824b5b68c233b52659ed16016d58369ee3ed1..80fdd69569df11388a4553c6a16ac6a5082e445b 100644 (file)
@@ -306,7 +306,10 @@ namespace System.Net
                                string date = webHeaders ["Date"];
                                if (date == null)
                                        return DateTime.MinValue;
-                               return DateTime.ParseExact (date, "r", CultureInfo.InvariantCulture).ToLocalTime ();
+                               DateTime parsed = DateTime.ParseExact (date, "r", CultureInfo.InvariantCulture);
+                               if (parsed.Equals (DateTime.MinValue))
+                                       return parsed;
+                               return parsed.ToLocalTime ();
                        }
                        set {
                                webHeaders.RemoveAndAdd ("Date", value.ToUniversalTime ().ToString ("r", CultureInfo.InvariantCulture));
index 3fc1a3fd40d766ae509567f1e09039cc8597df49..d435d6ff13bfc2a804b6982a357711a191e62a46 100644 (file)
@@ -2330,10 +2330,32 @@ namespace MonoTests.System.Net
                [Test]
                public void AddAndRemoveDate ()
                {
-                       HttpWebRequest req = (HttpWebRequest) WebRequest.Create ("http://go-mono.com");
-                       req.Date = DateTime.UtcNow;
+                       // Neil Armstrong set his foot on Moon
+                       var landing = new DateTime (1969, 7, 21, 2, 56, 0, DateTimeKind.Utc);
+                       Assert.AreEqual (621214377600000000, landing.Ticks);
+                       var unspecified = new DateTime (1969, 7, 21, 2, 56, 0);
+                       var local = landing.ToLocalTime ();
+
+                       var req = (HttpWebRequest)WebRequest.Create ("http://www.mono-project.com/");
+                       req.Date = landing;
+                       Assert.AreEqual (DateTimeKind.Local, req.Date.Kind);
+                       Assert.AreEqual (local.Ticks, req.Date.Ticks);
+                       Assert.AreEqual (local, req.Date);
+
+                       req.Date = unspecified;
+                       Assert.AreEqual (DateTimeKind.Local, req.Date.Kind);
+                       Assert.AreEqual (unspecified.Ticks, req.Date.Ticks);
+                       Assert.AreEqual (unspecified, req.Date);
+
+                       req.Date = local;
+                       Assert.AreEqual (DateTimeKind.Local, req.Date.Kind);
+                       Assert.AreEqual (local.Ticks, req.Date.Ticks);
+                       Assert.AreEqual (local, req.Date);
+
                        req.Date = DateTime.MinValue;
-                       Assert.AreEqual (DateTime.MinValue, req.Date);
+                       Assert.AreEqual (DateTimeKind.Unspecified, DateTime.MinValue.Kind);
+                       Assert.AreEqual (DateTimeKind.Unspecified, req.Date.Kind);
+                       Assert.AreEqual (0, req.Date.Ticks);
                }
 #endif
                class ListenerScope : IDisposable {