diff --git a/Source/Testably.Abstractions.Interface/ITimeSystem.cs b/Source/Testably.Abstractions.Interface/ITimeSystem.cs index cb959c5a3..b61f5e610 100644 --- a/Source/Testably.Abstractions.Interface/ITimeSystem.cs +++ b/Source/Testably.Abstractions.Interface/ITimeSystem.cs @@ -12,6 +12,11 @@ public interface ITimeSystem /// IDateTime DateTime { get; } + /// + /// Abstractions for . + /// + IDateTimeOffset DateTimeOffset { get; } + #if FEATURE_PERIODIC_TIMER /// /// Abstractions for . diff --git a/Source/Testably.Abstractions.Interface/TimeSystem/IDateTimeOffset.cs b/Source/Testably.Abstractions.Interface/TimeSystem/IDateTimeOffset.cs new file mode 100644 index 000000000..13ef7832b --- /dev/null +++ b/Source/Testably.Abstractions.Interface/TimeSystem/IDateTimeOffset.cs @@ -0,0 +1,34 @@ +using System; + +namespace Testably.Abstractions.TimeSystem; + +/// +/// Abstractions for . +/// +public interface IDateTimeOffset : ITimeSystemEntity +{ + /// + DateTimeOffset MaxValue { get; } + + /// + DateTimeOffset MinValue { get; } + + #pragma warning disable MA0202 // Branches differ only in XML doc comments +#if NETSTANDARD2_0 + /// + /// The value of this constant is equivalent to 00:00:00.0000000 UTC, January 1, 1970, in the Gregorian calendar. + /// defines the point in time when Unix time is equal to 0. + /// + DateTimeOffset UnixEpoch { get; } +#else + /// + DateTimeOffset UnixEpoch { get; } +#endif + #pragma warning restore MA0202 + + /// + DateTimeOffset Now { get; } + + /// + DateTimeOffset UtcNow { get; } +} diff --git a/Source/Testably.Abstractions/RealTimeSystem.cs b/Source/Testably.Abstractions/RealTimeSystem.cs index 3fbd3a179..269897ca5 100644 --- a/Source/Testably.Abstractions/RealTimeSystem.cs +++ b/Source/Testably.Abstractions/RealTimeSystem.cs @@ -16,6 +16,7 @@ public sealed class RealTimeSystem : ITimeSystem public RealTimeSystem() { DateTime = new DateTimeWrapper(this); + DateTimeOffset = new DateTimeOffsetWrapper(this); #if FEATURE_PERIODIC_TIMER PeriodicTimer = new PeriodicTimerFactory(this); #endif @@ -31,6 +32,9 @@ public RealTimeSystem() /// public IDateTime DateTime { get; } + /// + public IDateTimeOffset DateTimeOffset { get; } + #if FEATURE_PERIODIC_TIMER /// public IPeriodicTimerFactory PeriodicTimer { get; } diff --git a/Source/Testably.Abstractions/TimeSystem/DateTimeOffsetWrapper.cs b/Source/Testably.Abstractions/TimeSystem/DateTimeOffsetWrapper.cs new file mode 100644 index 000000000..32d5957a1 --- /dev/null +++ b/Source/Testably.Abstractions/TimeSystem/DateTimeOffsetWrapper.cs @@ -0,0 +1,44 @@ +using System; + +namespace Testably.Abstractions.TimeSystem; + +internal sealed class DateTimeOffsetWrapper : IDateTimeOffset +{ + internal DateTimeOffsetWrapper(RealTimeSystem timeSystem) + { + TimeSystem = timeSystem; + } + + #region IDateTimeOffset Members + + /// + public DateTimeOffset MaxValue + => DateTimeOffset.MaxValue; + + /// + public DateTimeOffset MinValue + => DateTimeOffset.MinValue; + +#if NETSTANDARD2_0 + /// + public DateTimeOffset UnixEpoch + => new(1970, 1, 1, 0, 0, 0, TimeSpan.Zero); +#else + /// + public DateTimeOffset UnixEpoch + => DateTimeOffset.UnixEpoch; +#endif + + /// + public DateTimeOffset Now + => DateTimeOffset.Now; + + /// + public DateTimeOffset UtcNow + => DateTimeOffset.UtcNow; + + /// + public ITimeSystem TimeSystem { get; } + + #endregion +} diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net10.0.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net10.0.txt index da5ef1df4..e6f139530 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net10.0.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net10.0.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net6.0.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net6.0.txt index ffd57a9cd..3c4ec8518 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net6.0.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net6.0.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } public Testably.Abstractions.TimeSystem.IThread Thread { get; } diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net8.0.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net8.0.txt index 87768f232..02023951d 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net8.0.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net8.0.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net9.0.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net9.0.txt index 4ed96274c..a78be5033 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net9.0.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_net9.0.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.0.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.0.txt index dbcc82f77..5f0b5abad 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.0.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.0.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } public Testably.Abstractions.TimeSystem.IThread Thread { get; } diff --git a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.1.txt b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.1.txt index 2b0baa8b3..6f12a09d1 100644 --- a/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.1.txt +++ b/Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions_netstandard2.1.txt @@ -27,6 +27,7 @@ namespace Testably.Abstractions { public RealTimeSystem() { } public Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + public Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } public Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } public Testably.Abstractions.TimeSystem.ITask Task { get; } public Testably.Abstractions.TimeSystem.IThread Thread { get; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net10.0.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net10.0.txt index 472f042f3..341ecc0cd 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net10.0.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net10.0.txt @@ -67,6 +67,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } @@ -143,6 +144,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IPeriodicTimer : System.IDisposable, Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Period { get; set; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net6.0.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net6.0.txt index 6e7297252..f07e8f7dd 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net6.0.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net6.0.txt @@ -49,6 +49,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } Testably.Abstractions.TimeSystem.IThread Thread { get; } @@ -106,6 +107,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IStopwatch : Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Elapsed { get; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net8.0.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net8.0.txt index 10f488927..3cbec46c6 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net8.0.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net8.0.txt @@ -58,6 +58,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } @@ -125,6 +126,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IPeriodicTimer : System.IDisposable, Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Period { get; set; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net9.0.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net9.0.txt index 016f7f9c0..5b7cb60eb 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net9.0.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_net9.0.txt @@ -60,6 +60,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IPeriodicTimerFactory PeriodicTimer { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } @@ -129,6 +130,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IPeriodicTimer : System.IDisposable, Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Period { get; set; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.0.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.0.txt index 2c3d1ba70..e07740c28 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.0.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.0.txt @@ -36,6 +36,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } Testably.Abstractions.TimeSystem.IThread Thread { get; } @@ -80,6 +81,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IStopwatch : Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Elapsed { get; } diff --git a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.1.txt b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.1.txt index 6d0f951fa..622c95aec 100644 --- a/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.1.txt +++ b/Tests/Api/Testably.Abstractions.Core.Api.Tests/Expected/Testably.Abstractions.Interface_netstandard2.1.txt @@ -45,6 +45,7 @@ namespace Testably.Abstractions public interface ITimeSystem { Testably.Abstractions.TimeSystem.IDateTime DateTime { get; } + Testably.Abstractions.TimeSystem.IDateTimeOffset DateTimeOffset { get; } Testably.Abstractions.TimeSystem.IStopwatchFactory Stopwatch { get; } Testably.Abstractions.TimeSystem.ITask Task { get; } Testably.Abstractions.TimeSystem.IThread Thread { get; } @@ -98,6 +99,14 @@ namespace Testably.Abstractions.TimeSystem System.DateTime UnixEpoch { get; } System.DateTime UtcNow { get; } } + public interface IDateTimeOffset : Testably.Abstractions.TimeSystem.ITimeSystemEntity + { + System.DateTimeOffset MaxValue { get; } + System.DateTimeOffset MinValue { get; } + System.DateTimeOffset Now { get; } + System.DateTimeOffset UnixEpoch { get; } + System.DateTimeOffset UtcNow { get; } + } public interface IStopwatch : Testably.Abstractions.TimeSystem.ITimeSystemEntity { System.TimeSpan Elapsed { get; } diff --git a/Tests/Testably.Abstractions.Parity.Tests/ParityTests.cs b/Tests/Testably.Abstractions.Parity.Tests/ParityTests.cs index 8d919441f..c0b34871b 100644 --- a/Tests/Testably.Abstractions.Parity.Tests/ParityTests.cs +++ b/Tests/Testably.Abstractions.Parity.Tests/ParityTests.cs @@ -15,6 +15,26 @@ public abstract class ParityTests( { public TestHelpers.Parity Parity { get; } = parity; + [Test] + public async Task IDateTime_EnsureParityWith_DateTime() + { + List parityErrors = Parity.DateTime + .GetErrorsToStaticType( + typeof(DateTime)); + + await That(parityErrors).IsEmpty(); + } + + [Test] + public async Task IDateTimeOffset_EnsureParityWith_DateTimeOffset() + { + List parityErrors = Parity.DateTimeOffset + .GetErrorsToStaticType( + typeof(DateTimeOffset)); + + await That(parityErrors).IsEmpty(); + } + [Test] public async Task IDirectory_EnsureParityWith_Directory() { diff --git a/Tests/Testably.Abstractions.Parity.Tests/TestHelpers/Parity.cs b/Tests/Testably.Abstractions.Parity.Tests/TestHelpers/Parity.cs index 373e885c0..fdcb2877b 100644 --- a/Tests/Testably.Abstractions.Parity.Tests/TestHelpers/Parity.cs +++ b/Tests/Testably.Abstractions.Parity.Tests/TestHelpers/Parity.cs @@ -4,6 +4,7 @@ using System.IO; using System.IO.Compression; using System.Linq; +using System.Reflection; using System.Threading; namespace Testably.Abstractions.Parity.Tests.TestHelpers; @@ -18,6 +19,36 @@ public class Parity }, }); + public ParityCheck DateTime { get; } = new(excludeMethods: + [ + typeof(DateTime).GetMethod(nameof(System.DateTime.Compare)), + typeof(DateTime).GetMethod(nameof(System.DateTime.DaysInMonth)), + typeof(DateTime).GetMethod(nameof(System.DateTime.Equals), BindingFlags.Static | BindingFlags.Public), + typeof(DateTime).GetMethod(nameof(System.DateTime.FromBinary)), + typeof(DateTime).GetMethod(nameof(System.DateTime.FromFileTime)), + typeof(DateTime).GetMethod(nameof(System.DateTime.FromFileTimeUtc)), + typeof(DateTime).GetMethod(nameof(System.DateTime.FromOADate)), + typeof(DateTime).GetMethod(nameof(System.DateTime.IsLeapYear)), + typeof(DateTime).GetMethod(nameof(System.DateTime.SpecifyKind)), + ..typeof(DateTime).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTime.Parse), StringComparison.Ordinal)), + ..typeof(DateTime).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTime.ParseExact), StringComparison.Ordinal)), + ..typeof(DateTime).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTime.TryParse), StringComparison.Ordinal)), + ..typeof(DateTime).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTime.TryParseExact), StringComparison.Ordinal)), + ]); + + public ParityCheck DateTimeOffset { get; } = new(excludeMethods: + [ + typeof(DateTimeOffset).GetMethod(nameof(System.DateTimeOffset.Compare)), + typeof(DateTimeOffset).GetMethod(nameof(System.DateTimeOffset.Equals), BindingFlags.Static | BindingFlags.Public), + typeof(DateTimeOffset).GetMethod(nameof(System.DateTimeOffset.FromFileTime)), + typeof(DateTimeOffset).GetMethod(nameof(System.DateTimeOffset.FromUnixTimeMilliseconds)), + typeof(DateTimeOffset).GetMethod(nameof(System.DateTimeOffset.FromUnixTimeSeconds)), + ..typeof(DateTimeOffset).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTimeOffset.Parse), StringComparison.Ordinal)), + ..typeof(DateTimeOffset).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTimeOffset.ParseExact), StringComparison.Ordinal)), + ..typeof(DateTimeOffset).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTimeOffset.TryParse), StringComparison.Ordinal)), + ..typeof(DateTimeOffset).GetMethods().Where(x => string.Equals(x.Name, nameof(System.DateTimeOffset.TryParseExact), StringComparison.Ordinal)), + ]); + public ParityCheck Directory { get; } = new(); public ParityCheck DirectoryInfo { get; } = new(excludeMethods: new[]