From e6c1670421aec2ddf4c9a1b29b37cc3e7fdd3eb1 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Mon, 25 Sep 2023 21:50:21 +0200 Subject: [PATCH] Fix unit tests culture (#13016) --- .../Data/Core/BindingExpressionTests.cs | 5 +-- .../ExpressionObserverTests_DataValidation.cs | 6 +-- .../DataAnnotationsValidationPluginTests.cs | 3 +- .../InvariantCultureAttribute.cs | 42 +++++++++++++++++++ .../InvariantCultureFixture.cs | 29 ------------- 5 files changed, 48 insertions(+), 37 deletions(-) create mode 100644 tests/Avalonia.UnitTests/InvariantCultureAttribute.cs delete mode 100644 tests/Avalonia.UnitTests/InvariantCultureFixture.cs diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs b/tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs index 23d8207dd0..f56b188a2f 100644 --- a/tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs +++ b/tests/Avalonia.Base.UnitTests/Data/Core/BindingExpressionTests.cs @@ -2,19 +2,18 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Reactive.Linq; -using System.Threading; using System.Threading.Tasks; using Avalonia.Data; using Avalonia.Data.Converters; using Avalonia.Data.Core; -using Avalonia.Markup.Parsers; using Avalonia.UnitTests; using Moq; using Xunit; namespace Avalonia.Base.UnitTests.Data.Core { - public class BindingExpressionTests : IClassFixture + [InvariantCulture] + public class BindingExpressionTests { [Fact] public async Task Should_Get_Simple_Property_Value() diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs index 2a8bbaae79..d1417ea766 100644 --- a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs +++ b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_DataValidation.cs @@ -1,18 +1,16 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Reactive.Linq; using Avalonia.Data; using Avalonia.Data.Core; -using Avalonia.Markup.Parsers; using Avalonia.Threading; using Avalonia.UnitTests; using Xunit; namespace Avalonia.Base.UnitTests.Data.Core { - public class ExpressionObserverTests_DataValidation : IClassFixture + [InvariantCulture] + public class ExpressionObserverTests_DataValidation { ////[Fact] ////public void Doesnt_Send_DataValidationError_When_DataValidatation_Not_Enabled() diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs index 574ecd2ca4..7570fe9539 100644 --- a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs +++ b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs @@ -9,7 +9,8 @@ using Xunit; namespace Avalonia.Base.UnitTests.Data.Core.Plugins { - public class DataAnnotationsValidationPluginTests : IClassFixture + [InvariantCulture] + public class DataAnnotationsValidationPluginTests { [Fact] public void Should_Match_Property_With_ValidatorAttribute() diff --git a/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs b/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs new file mode 100644 index 0000000000..b21e364c1e --- /dev/null +++ b/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs @@ -0,0 +1,42 @@ +#nullable enable + +using System; +using System.Globalization; +using System.Reflection; +using Xunit.Sdk; + +namespace Avalonia.UnitTests; + +/// +/// Runs tests in the invariant culture. +/// +/// +/// Some tests check exception messages, and those from the .NET framework will be translated. +/// Some tests are formatting numbers, expecting a dot as a decimal point. +/// Use this fixture to set the current culture to the invariant culture. +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] +public sealed class InvariantCultureAttribute : BeforeAfterTestAttribute +{ + private CultureInfo? _previousCulture; + private CultureInfo? _previousUICulture; + + public override void Before(MethodInfo methodUnderTest) + { + base.Before(methodUnderTest); + + _previousCulture = CultureInfo.CurrentCulture; + _previousUICulture = CultureInfo.CurrentUICulture; + + CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; + CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture; + } + + public override void After(MethodInfo methodUnderTest) + { + CultureInfo.CurrentCulture = _previousCulture!; + CultureInfo.CurrentUICulture = _previousUICulture!; + + base.After(methodUnderTest); + } +} diff --git a/tests/Avalonia.UnitTests/InvariantCultureFixture.cs b/tests/Avalonia.UnitTests/InvariantCultureFixture.cs deleted file mode 100644 index c46dca5de6..0000000000 --- a/tests/Avalonia.UnitTests/InvariantCultureFixture.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Globalization; -using System.Threading; - -namespace Avalonia.UnitTests -{ - /// - /// Runs tests in the invariant culture. - /// - /// - /// Some tests check exception messages, and those from the .NET framework will be translated. - /// Use this fixture to set the current culture to the invariant culture. - /// - public class InvariantCultureFixture : IDisposable - { - private CultureInfo _restore; - - public InvariantCultureFixture() - { - _restore = CultureInfo.CurrentCulture; - CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; - } - - public void Dispose() - { - CultureInfo.CurrentCulture = _restore; - } - } -}