Skip to content

Commit 7bcdc7b

Browse files
Add UseCultureAttribute
1 parent f4755a9 commit 7bcdc7b

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-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: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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()
18+
{
19+
_culture = CultureInfo.InvariantCulture;
20+
_uiCulture = CultureInfo.InvariantCulture;
21+
}
22+
23+
public UseCultureAttribute(string culture)
24+
: this(culture, culture)
25+
{
26+
}
27+
28+
public UseCultureAttribute(string culture, string uiCulture)
29+
{
30+
_culture = new CultureInfo(culture, false);
31+
_uiCulture = new CultureInfo(uiCulture, false);
32+
}
33+
34+
public override void Before(MethodInfo methodUnderTest)
35+
{
36+
_originalCulture = CultureInfo.CurrentCulture;
37+
_originalUiCulture = CultureInfo.CurrentUICulture;
38+
39+
CultureInfo.CurrentCulture = _culture;
40+
CultureInfo.CurrentUICulture = _uiCulture;
41+
}
42+
43+
public override void After(MethodInfo methodUnderTest)
44+
{
45+
CultureInfo.CurrentCulture = _originalCulture;
46+
CultureInfo.CurrentUICulture = _originalUiCulture;
47+
}
48+
}
49+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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("es-ES")]
18+
public void UseCultureDefinedOnMethod()
19+
{
20+
Assert.Equal("24/7/2021 10:24:00", new DateTime(2021, 7, 24, 10, 24, 0).ToString());
21+
}
22+
23+
[Fact]
24+
public void NoCultureAttributeOnMethodInheritsClassCultureAndUICulture()
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+
[Fact]
47+
[UseCulture]
48+
public void NoArgumentsUsesInvariantCulture()
49+
{
50+
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentCulture);
51+
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentUICulture);
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)