Merge pull request #3562 from BrzVlad/fix-reverse-wbarrier
[mono.git] / mcs / class / corlib / Test / System / DateTimeOffsetTest.cs
index 3bc65a8204b3beb05743dd022ee26e45b11e4dc5..23df8da07c87f30f875654ed7516548b92e7ff3d 100644 (file)
@@ -176,7 +176,7 @@ namespace MonoTests.System {
                                Assert.AreEqual ("Thursday, Nov 01 2007 09:00:00 -07:00", dto.ToString (format, null as DateTimeFormatInfo), "ts1");
                        Assert.AreEqual ("Thursday, Nov 01 2007 09:00:00 -07:00", dto.ToString (format, CultureInfo.InvariantCulture), "ts2");
                        Assert.AreEqual ("jeudi, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("fr-FR")), "ts3");
-                       Assert.AreEqual ("jueves, nov 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4");
+                       Assert.AreEqual ("jueves, Nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4");
                }
 
                [Test]
@@ -261,8 +261,8 @@ namespace MonoTests.System {
                [Test]
                public void ParseExactCustomFormat ()
                {
-                       var dt = DateTimeOffset.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", "dddd, dd'-'MMM'-'yy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture);
-                       Assert.AreEqual (new DateTimeOffset (1994, 11, 6, 8, 49, 37, TimeZone.CurrentTimeZone.GetUtcOffset (DateTime.Now)), dt);
+                       var dt = DateTimeOffset.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", "dddd, dd'-'MMM'-'yy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+                       Assert.AreEqual (new DateTimeOffset (1994, 11, 6, 8, 49, 37, TimeSpan.Zero), dt);
                }
                
                [Test]
@@ -668,6 +668,60 @@ namespace MonoTests.System {
                        Assert.AreEqual (dto.Offset, dto2.Offset);
                        Assert.AreEqual (dt.AddDays (-60), dto2.DateTime);
                }
+
+               [Test]
+               public void TestPartialDateTimeParsing ()
+               {
+                       var now = DateTime.UtcNow;
+                       const DateTimeStyles style = DateTimeStyles.AssumeUniversal;
+
+                       //year
+                       var date = DateTimeOffset.ParseExact ("2003", "yyyy", CultureInfo.InvariantCulture, style);
+                       var expected = "01/01/2003 00:00:00 +00:00";
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+                       //month
+                       date = DateTimeOffset.ParseExact ("12", "MM", CultureInfo.InvariantCulture, style);
+                       expected = string.Format ("12/01/{0} 00:00:00 +00:00", now.Year);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+                       //day
+                       date = DateTimeOffset.ParseExact ("29", "dd", CultureInfo.InvariantCulture, style);
+                       expected = string.Format ("01/29/{0} 00:00:00 +00:00", now.Year);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+                       //hours
+                       date = DateTimeOffset.ParseExact ("06", "HH", CultureInfo.InvariantCulture, style);
+                       expected = string.Format ("{0:D2}/{1:D2}/{2} 06:00:00 +00:00", now.Month, now.Day, now.Year);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+                       //minutes
+                       date = DateTimeOffset.ParseExact ("45", "mm", CultureInfo.InvariantCulture, style);
+                       expected = string.Format ("{0:D2}/{1:D2}/{2} 00:45:00 +00:00", now.Month, now.Day, now.Year);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+                       //seconds
+                       date = DateTimeOffset.ParseExact ("45", "ss", CultureInfo.InvariantCulture, style);
+                       expected = string.Format ("{0:D2}/{1:D2}/{2} 00:00:45 +00:00", now.Month, now.Day, now.Year);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+               }
+
+               [Test]
+               public void TestDateOnlyWithTimeOffset ()
+               {
+                       var fp = CultureInfo.InvariantCulture;
+                       var date = DateTimeOffset.Parse("2013-11-07+11:00", fp, DateTimeStyles.AssumeUniversal);
+                       var expected = string.Format ("{0:D2}/{1:D2}/{2} 00:00:00 +11:00", 11, 7, 2013);
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+               }
+
+               [Test]
+               public void GMTDateTime ()
+               {
+                       var date = DateTimeOffset.Parse ("Wed, 10 Sep 2014 22:01:40 GMT", CultureInfo.InvariantCulture);
+                       var expected = "09/10/2014 22:01:40 +00:00";
+                       Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+               }
        }
 }