Fix timezone-related failures in System.Runtime.Tests (dotnet/corefx#35955)
authorStephen Toub <stoub@microsoft.com>
Mon, 11 Mar 2019 17:31:04 +0000 (13:31 -0400)
committerGitHub <noreply@github.com>
Mon, 11 Mar 2019 17:31:04 +0000 (13:31 -0400)
In timezones with a positive offset, several tests were failing due to going below the minimum supported values.

Commit migrated from https://github.com/dotnet/corefx/commit/8f50086da1ac1f2edd175d0a6cac7c6b596f4f36

src/libraries/System.Runtime/tests/System/DateTimeTests.cs

index 3b099b7..1212c80 100644 (file)
@@ -828,16 +828,18 @@ namespace System.Tests
 
         public static IEnumerable<object[]> ToBinary_TestData()
         {
-            DateTime local = new DateTime(10, DateTimeKind.Local);
-            TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(new DateTime(10));
+            const long Ticks = 123456789101112;
+
+            DateTime local = new DateTime(Ticks, DateTimeKind.Local);
+            TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(local);
             long localTicks = local.Ticks - offset.Ticks;
             if (localTicks < 0)
             {
                 localTicks |= 0x4000000000000000;
             }
 
-            yield return new object[] { new DateTime(10, DateTimeKind.Utc), 10 | ((long)DateTimeKind.Utc << 62) };
-            yield return new object[] { new DateTime(10, DateTimeKind.Unspecified), 10 | (( long)DateTimeKind.Unspecified << 62) };
+            yield return new object[] { new DateTime(Ticks, DateTimeKind.Utc), Ticks | ((long)DateTimeKind.Utc << 62) };
+            yield return new object[] { new DateTime(Ticks, DateTimeKind.Unspecified), Ticks | (( long)DateTimeKind.Unspecified << 62) };
             yield return new object[] { local, localTicks | ((long)DateTimeKind.Local << 62) };
 
             yield return new object[] { DateTime.MaxValue, 3155378975999999999 };
@@ -879,17 +881,23 @@ namespace System.Tests
 
         public static IEnumerable<object[]> ToFileTime_TestData()
         {
-            yield return new object[] { new DateTime(1601, 1, 1) };
-            yield return new object[] { new DateTime(1601, 1, 1).AddTicks(1) };
-            yield return new object[] { new DateTime(2018, 12, 24) };
-            yield return new object[] { new DateTime(2018, 11, 24, 17, 57, 30, 12) };
+            yield return new object[] { new DateTime(1601, 1, 1, 0, 0, 0, DateTimeKind.Utc) };
+            yield return new object[] { new DateTime(1601, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(1) };
+
+            yield return new object[] { new DateTime(2018, 12, 24, 0, 0, 0, DateTimeKind.Utc) };
+            yield return new object[] { new DateTime(2018, 11, 24, 17, 57, 30, 12, DateTimeKind.Utc) };
+
+            yield return new object[] { new DateTime(2018, 12, 24, 0, 0, 0, DateTimeKind.Local) };
+            yield return new object[] { new DateTime(2018, 11, 24, 17, 57, 30, 12, DateTimeKind.Local) };
         }
 
         [Theory]
         [MemberData(nameof(ToFileTime_TestData))]
         public void ToFileTime_Invoke_ReturnsExpected(DateTime date)
         {
-            Assert.Equal(date, DateTime.FromFileTime(date.ToFileTime()));
+            long fileTime = date.ToFileTime();
+            DateTime fromFileTime = date.Kind == DateTimeKind.Utc ? DateTime.FromFileTimeUtc(fileTime) : DateTime.FromFileTime(fileTime);
+            Assert.Equal(date, fromFileTime);
         }
 
         public static IEnumerable<object[]> ToFileTime_Overflow_TestData()