ソースを参照

Fix unit tests culture (#13016)

Julien Lebosquain 2 年 前
コミット
e6c1670421

+ 2 - 3
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<InvariantCultureFixture>
+    [InvariantCulture]
+    public class BindingExpressionTests
     {
         [Fact]
         public async Task Should_Get_Simple_Property_Value()

+ 2 - 4
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<InvariantCultureFixture>
+    [InvariantCulture]
+    public class ExpressionObserverTests_DataValidation
     {
         ////[Fact]
         ////public void Doesnt_Send_DataValidationError_When_DataValidatation_Not_Enabled()

+ 2 - 1
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<InvariantCultureFixture>
+    [InvariantCulture]
+    public class DataAnnotationsValidationPluginTests
     {
         [Fact]
         public void Should_Match_Property_With_ValidatorAttribute()

+ 42 - 0
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;
+
+/// <summary>
+/// Runs tests in the invariant culture.
+/// </summary>
+/// <remarks>
+/// 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.
+/// </remarks>
+[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);
+    }
+}

+ 0 - 29
tests/Avalonia.UnitTests/InvariantCultureFixture.cs

@@ -1,29 +0,0 @@
-using System;
-using System.Globalization;
-using System.Threading;
-
-namespace Avalonia.UnitTests
-{
-    /// <summary>
-    /// Runs tests in the invariant culture.
-    /// </summary>
-    /// <remarks>
-    /// 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.
-    /// </remarks>
-    public class InvariantCultureFixture : IDisposable
-    {
-        private CultureInfo _restore;
-
-        public InvariantCultureFixture()
-        {
-            _restore = CultureInfo.CurrentCulture;
-            CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
-        }
-
-        public void Dispose()
-        {
-            CultureInfo.CurrentCulture = _restore;
-        }
-    }
-}