Skip to content

Commit

Permalink
Fix DateTime looses significant digits in DynamicData (microsoft#875) (
Browse files Browse the repository at this point in the history
  • Loading branch information
jvrooyen committed Jul 8, 2021
1 parent 86845cf commit 3ce8458
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 3 deletions.
Expand Up @@ -17,7 +17,8 @@ internal static class DataSerializationHelper
private static readonly DataContractJsonSerializerSettings SerializerSettings = new DataContractJsonSerializerSettings()
{
UseSimpleDictionaryFormat = true,
EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Always
EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Always,
DateTimeFormat = new System.Runtime.Serialization.DateTimeFormat("O", System.Globalization.CultureInfo.InvariantCulture)
};

/// <summary>
Expand Down
@@ -0,0 +1,80 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.UnitTests
{
extern alias FrameworkV1;
extern alias FrameworkV2;

using System;
using FluentAssertions;
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Helpers;

using TestableImplementations;
using Assert = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
using CollectionAssert = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert;
using TestClass = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;
using TestCleanup = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute;
using TestInitialize = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute;
using TestMethod = FrameworkV1::Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;
using UTF = FrameworkV2::Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class DataSerializationHelperTests
{
[TestMethod]
public void DataSerializerShouldRoundTripDateTimeOffset()
{
var source = new DateTimeOffset(628381323438126060, TimeSpan.FromHours(-8));

var actual = DataSerializationHelper.Deserialize(
DataSerializationHelper.Serialize(new object[] { source }));

actual.Should().HaveCount(1);
actual[0].Should().BeOfType<DateTimeOffset>();
actual[0].As<DateTimeOffset>().Should().Be(source);
}

[TestMethod]
public void DataSerializerShouldRoundTripDateTime()
{
var source = new DateTime(628381323438126060);

var actual = DataSerializationHelper.Deserialize(
DataSerializationHelper.Serialize(new object[] { source }));

actual.Should().HaveCount(1);
actual[0].Should().BeOfType<DateTime>();
actual[0].As<DateTime>().Should().Be(source);
actual[0].As<DateTime>().Kind.Should().Be(source.Kind);
}

[TestMethod]
public void DataSerializerShouldRoundTripDateTimeOfKindLocal()
{
var source = new DateTime(628381323438126060, DateTimeKind.Local);

var actual = DataSerializationHelper.Deserialize(
DataSerializationHelper.Serialize(new object[] { source }));

actual.Should().HaveCount(1);
actual[0].Should().BeOfType<DateTime>();
actual[0].As<DateTime>().Should().Be(source);
actual[0].As<DateTime>().Kind.Should().Be(source.Kind);
}

[TestMethod]
public void DataSerializerShouldRoundTripDateTimeOfKindUtc()
{
var source = new DateTime(628381323438126060, DateTimeKind.Utc);

var actual = DataSerializationHelper.Deserialize(
DataSerializationHelper.Serialize(new object[] { source }));

actual.Should().HaveCount(1);
actual[0].Should().BeOfType<DateTime>();
actual[0].As<DateTime>().Should().Be(source);
actual[0].As<DateTime>().Kind.Should().Be(source.Kind);
}
}
}
Expand Up @@ -38,7 +38,7 @@
<Reference Include="System.Configuration" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />

<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<Aliases>FrameworkV1</Aliases>
<Private>True</Private>
Expand Down Expand Up @@ -83,7 +83,7 @@
<PackageReference Include="Microsoft.TestPlatform.ObjectModel" Version="$(MicrosoftNETTestSdkVersion)" />
<PackageReference Include="Moq" Version="$(MoqVersion)" />
<PackageReference Include="FluentAssertions" Version="$(FluentAssertionsVersion)" />

<PackageReference Include="StyleCop.Analyzers" Version="$(StyleCopAnalyzersVersion)" PrivateAssets="all">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand Down Expand Up @@ -116,6 +116,7 @@
<Compile Include="Extensions\TestContextExtensionsTests.cs" />
<Compile Include="Extensions\TestResultExtensionsTests.cs" />
<Compile Include="Extensions\UnitTestOutcomeExtensionsTests.cs" />
<Compile Include="Helpers\DataSerializationHelperTests.cs" />
<Compile Include="Helpers\DictionaryHelperTests.cs" />
<Compile Include="Helpers\ReflectHelperTests.cs" />
<Compile Include="Helpers\RunSettingsUtilitiesTests.cs" />
Expand Down

0 comments on commit 3ce8458

Please sign in to comment.