Skip to content

Commit 37509e1

Browse files
Add UseCultureAttribute
1 parent f4755a9 commit 37509e1

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

src/Exercism.Tests/Exercism.Tests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@
1818
<None Include="images\icon.png" Pack="true" PackagePath="icon.png" />
1919
</ItemGroup>
2020

21+
<ItemGroup>
22+
<PackageReference Include="xunit.extensibility.core" Version="2.4.1" />
23+
</ItemGroup>
24+
2125
</Project>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Globalization;
3+
using System.Reflection;
4+
using Xunit.Sdk;
5+
6+
namespace Exercism.Tests
7+
{
8+
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
9+
public class UseCultureAttribute : BeforeAfterTestAttribute
10+
{
11+
private readonly CultureInfo _culture;
12+
private readonly CultureInfo _uiCulture;
13+
14+
private CultureInfo _originalCulture;
15+
private CultureInfo _originalUiCulture;
16+
17+
public UseCultureAttribute(string culture)
18+
: this(culture, culture)
19+
{
20+
}
21+
22+
public UseCultureAttribute(string culture, string uiCulture)
23+
{
24+
_culture = new CultureInfo(culture, false);
25+
_uiCulture = new CultureInfo(uiCulture, false);
26+
}
27+
28+
public override void Before(MethodInfo methodUnderTest)
29+
{
30+
_originalCulture = CultureInfo.CurrentCulture;
31+
_originalUiCulture = CultureInfo.CurrentUICulture;
32+
33+
CultureInfo.CurrentCulture = _culture;
34+
CultureInfo.CurrentUICulture = _uiCulture;
35+
}
36+
37+
public override void After(MethodInfo methodUnderTest)
38+
{
39+
CultureInfo.CurrentCulture = _originalCulture;
40+
CultureInfo.CurrentUICulture = _originalUiCulture;
41+
}
42+
}
43+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using System.Globalization;
3+
using Xunit;
4+
5+
namespace Exercism.Tests.Tests
6+
{
7+
[UseCulture("en-US")]
8+
public class UseCultureAttributeTests
9+
{
10+
[Fact]
11+
public void UseCultureDefinedOnClass()
12+
{
13+
Assert.Equal("7/24/2021 10:24:00 AM", new DateTime(2021, 7, 24, 10, 24, 0).ToString());
14+
}
15+
16+
[Fact]
17+
[UseCulture("nl-NL")]
18+
public void UseCultureDefinedOnMethod()
19+
{
20+
Assert.Equal("24-07-2021 10:24:00", new DateTime(2021, 7, 24, 10, 24, 0).ToString());
21+
}
22+
23+
[Fact]
24+
public void NoArgumentUsesClassCultureAndUICulture()
25+
{
26+
Assert.Equal("en-US", CultureInfo.CurrentCulture.Name);
27+
Assert.Equal("en-US", CultureInfo.CurrentUICulture.Name);
28+
}
29+
30+
[Fact]
31+
[UseCulture("nl-NL")]
32+
public void SetCultureAndUICultureUsingSingleCulture()
33+
{
34+
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
35+
Assert.Equal("nl-NL", CultureInfo.CurrentUICulture.Name);
36+
}
37+
38+
[Fact]
39+
[UseCulture("nl-NL", "nl-BE")]
40+
public void SetCultureAndUICultureUsingSeparateCultures()
41+
{
42+
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
43+
Assert.Equal("nl-BE", CultureInfo.CurrentUICulture.Name);
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)