From 2101a6ef7126a41ec8a641a321e089ae3199b01c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Tegn=C3=A9r?= Date: Thu, 9 Jan 2025 16:57:27 +0100 Subject: [PATCH] Re added older net versions (for now). Removed timeprovider usage in anything older than net8. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Tegnér --- .github/workflows/csharp.yml | 13 +++++++------ Personnummer.Tests/CoordinationNumberTests.cs | 3 ++- Personnummer.Tests/Personnummer.Tests.csproj | 4 +--- Personnummer.Tests/PersonnummerTests.cs | 2 ++ Personnummer.Tests/TestTimeProvider.cs | 16 +++++++++++----- Personnummer/Personnummer.cs | 14 ++++++++++---- Personnummer/Personnummer.csproj | 2 +- 7 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index d739551..6870dbd 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -9,16 +9,17 @@ on: jobs: test: runs-on: ubuntu-latest - strategy: - matrix: - dotnet: [ '9.0.x' ] - name: Test dotnet ${{ matrix.dotnet-versions }} + name: Test dotnet steps: - uses: actions/checkout@v4 - - name: Set up dotnet. + - name: Set up dotnet 7. uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ matrix.dotnet }} + dotnet-version: '7.0.x' + - name: Set up dotnet 9. + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' - name: Build run: dotnet build - name: Run test suite diff --git a/Personnummer.Tests/CoordinationNumberTests.cs b/Personnummer.Tests/CoordinationNumberTests.cs index de5abee..2b08254 100644 --- a/Personnummer.Tests/CoordinationNumberTests.cs +++ b/Personnummer.Tests/CoordinationNumberTests.cs @@ -99,6 +99,7 @@ public void TestParseInvalidCn(PersonnummerData ssn) })); } +#if NET8_0_OR_GREATER [Theory] [ClassData(typeof(ValidCnDataProvider))] public void TestAgeCn(PersonnummerData ssn) @@ -117,7 +118,7 @@ public void TestAgeCn(PersonnummerData ssn) // Du to age not being possible to fetch from >100 year short format without separator, we aught to check this here. Assert.Equal(years > 99 ? years - 100 : years, Personnummer.Parse(ssn.ShortFormat, new Personnummer.Options { AllowCoordinationNumber = true, TimeProvider = timeProvider }).Age); } - +#endif [Theory] [ClassData(typeof(ValidCnDataProvider))] diff --git a/Personnummer.Tests/Personnummer.Tests.csproj b/Personnummer.Tests/Personnummer.Tests.csproj index e78ce5a..72fa234 100644 --- a/Personnummer.Tests/Personnummer.Tests.csproj +++ b/Personnummer.Tests/Personnummer.Tests.csproj @@ -6,15 +6,13 @@ latestmajor - net8.0;net9.0 + net9.0;net7.0 - - all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Personnummer.Tests/PersonnummerTests.cs b/Personnummer.Tests/PersonnummerTests.cs index 7dd3157..527e458 100644 --- a/Personnummer.Tests/PersonnummerTests.cs +++ b/Personnummer.Tests/PersonnummerTests.cs @@ -76,6 +76,7 @@ public void TestParseInvalid(PersonnummerData ssn) } +#if NET8_0_OR_GREATER // Requires TimeProvider. [Theory] [ClassData(typeof(ValidSsnDataProvider))] public void TestAge(PersonnummerData ssn) @@ -90,6 +91,7 @@ public void TestAge(PersonnummerData ssn) // Du to age not being possible to fetch from >100 year short format without separator, we aught to check this here. Assert.Equal(years > 99 ? years - 100 : years, Personnummer.Parse(ssn.ShortFormat, new Personnummer.Options { AllowCoordinationNumber = false, TimeProvider = timeProvider }).Age); } +#endif [Theory] [ClassData(typeof(ValidSsnDataProvider))] diff --git a/Personnummer.Tests/TestTimeProvider.cs b/Personnummer.Tests/TestTimeProvider.cs index f3e8179..9995295 100644 --- a/Personnummer.Tests/TestTimeProvider.cs +++ b/Personnummer.Tests/TestTimeProvider.cs @@ -2,19 +2,25 @@ namespace Personnummer.Tests; +#if NET8_0_OR_GREATER + /// /// TimeProvider which always returns the same date: 2025 01 01 00:00:01 with UTC timezone on local time. /// public class TestTimeProvider : TimeProvider { + internal DateTimeOffset Now { get; set; } = new( + new DateOnly(2025, 1, 5), + new TimeOnly(0, 0, 0, 1), + TimeSpan.Zero + ); + public override DateTimeOffset GetUtcNow() { - return new DateTimeOffset( - new DateOnly(2025, 1, 1), - new TimeOnly(0,0,0, 1), - TimeSpan.Zero - ); + return Now; } public override TimeZoneInfo LocalTimeZone { get; } = TimeZoneInfo.Utc; } + +#endif diff --git a/Personnummer/Personnummer.cs b/Personnummer/Personnummer.cs index 6de65c3..1d8a9a1 100644 --- a/Personnummer/Personnummer.cs +++ b/Personnummer/Personnummer.cs @@ -19,6 +19,7 @@ public Options() public bool AllowInterimNumber { get; set; } = false; +#if (NET8_0_OR_GREATER) /// /// TimeProvider to use in calculations which are time dependent.
/// Uses `GetLocalNow` method. @@ -26,7 +27,12 @@ public Options() /// Defaults to System provider. /// ///
- public TimeProvider TimeProvider { get; set; } = TimeProvider.System; + public TimeProvider TimeProvider { private get; init; } = TimeProvider.System; + + internal DateTimeOffset DateTimeNow => TimeProvider.GetLocalNow(); +#else + internal DateTimeOffset DateTimeNow => DateTimeOffset.Now; +#endif } #region Fields and Properties @@ -37,10 +43,10 @@ public int Age { get { - var now = _options.TimeProvider.GetLocalNow(); + var now = _options.DateTimeNow; var age = now.Year - Date.Year; - if (now.Month >= Date.Month && now.Day > Date.Day) + if (now.Month >= Date.Month && now.Day >= Date.Day) { age--; } @@ -124,7 +130,7 @@ public Personnummer(string ssn, Options? options = null) } else { - int born = TimeProvider.System.GetLocalNow().Year - int.Parse(decade); + int born = _options.DateTimeNow.Year - int.Parse(decade); if (groups["separator"].Value.Length != 0 && groups["separator"].Value == "+") { born -= 100; diff --git a/Personnummer/Personnummer.csproj b/Personnummer/Personnummer.csproj index a3752b4..4b03309 100644 --- a/Personnummer/Personnummer.csproj +++ b/Personnummer/Personnummer.csproj @@ -1,7 +1,7 @@  - net8.0;net9.0 + net7.0;net8.0;net9.0;netstandard2.1;net47;net48 Personnummer Johannes Tegnér, Personnummer Contributors Verify Swedish personal identity numbers.