Skip to content

Commit 2a310cc

Browse files
Add UseCultureAttribute (#9)
1 parent f4755a9 commit 2a310cc

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: 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: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Globalization;
2+
using Xunit;
3+
4+
namespace Exercism.Tests.Tests
5+
{
6+
[UseCulture("en-US")]
7+
public class UseCultureAttributeTests
8+
{
9+
[Fact]
10+
[UseCulture("nl-NL")]
11+
public void SpecifyCulture()
12+
{
13+
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
14+
Assert.Equal("nl-NL", CultureInfo.CurrentUICulture.Name);
15+
}
16+
17+
[Fact]
18+
[UseCulture("nl-NL", "nl-BE")]
19+
public void SpecifyCultureAndUiCulture()
20+
{
21+
Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
22+
Assert.Equal("nl-BE", CultureInfo.CurrentUICulture.Name);
23+
}
24+
25+
[Fact]
26+
[UseCulture]
27+
public void DontSpecifyCulture()
28+
{
29+
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentCulture);
30+
Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentUICulture);
31+
}
32+
33+
[Fact]
34+
public void InheritCultureFromClass()
35+
{
36+
Assert.Equal("en-US", CultureInfo.CurrentCulture.Name);
37+
Assert.Equal("en-US", CultureInfo.CurrentUICulture.Name);
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)