Skip to content

Commit

Permalink
Fix DateTime.MinValue in HttpWebRequest.Date.
Browse files Browse the repository at this point in the history
* HttpWebRequestTest.cs: Extend this by adding each DateTimeKind
  and testing the result.  This test now passes again.
  • Loading branch information
baulig committed Jun 26, 2012
1 parent cdd89cb commit abab46b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
5 changes: 4 additions & 1 deletion mcs/class/System/System.Net/HttpWebRequest.cs
Expand Up @@ -306,7 +306,10 @@ public DecompressionMethods AutomaticDecompression
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));
Expand Down
28 changes: 25 additions & 3 deletions mcs/class/System/Test/System.Net/HttpWebRequestTest.cs
Expand Up @@ -2330,10 +2330,32 @@ public void UtcDate ()
[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 {
Expand Down

0 comments on commit abab46b

Please sign in to comment.