mirror of
https://github.com/claunia/plist-cil.git
synced 2025-12-16 11:04:26 +00:00
85 lines
3.3 KiB
C#
85 lines
3.3 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Reflection;
|
|
using System.Threading;
|
|
using Xunit.Sdk;
|
|
|
|
/// <summary>
|
|
/// Apply this attribute to your test method to replace the <see cref="Thread.CurrentThread" />
|
|
/// <see cref="CultureInfo.CurrentCulture" /> and <see cref="CultureInfo.CurrentUICulture" /> with another culture.
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
|
|
public class UseCultureAttribute : BeforeAfterTestAttribute
|
|
{
|
|
readonly Lazy<CultureInfo> culture;
|
|
readonly Lazy<CultureInfo> uiCulture;
|
|
|
|
CultureInfo originalCulture;
|
|
CultureInfo originalUICulture;
|
|
|
|
/// <summary>Replaces the culture and UI culture of the current thread with <paramref name="culture" /></summary>
|
|
/// <param name="culture">The name of the culture.</param>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// This constructor overload uses <paramref name="culture" /> for both <see cref="Culture" /> and
|
|
/// <see cref="UICulture" />.
|
|
/// </para>
|
|
/// </remarks>
|
|
public UseCultureAttribute(string culture) : this(culture, culture) {}
|
|
|
|
/// <summary>
|
|
/// Replaces the culture and UI culture of the current thread with <paramref name="culture" /> and
|
|
/// <paramref name="uiCulture" />
|
|
/// </summary>
|
|
/// <param name="culture">The name of the culture.</param>
|
|
/// <param name="uiCulture">The name of the UI culture.</param>
|
|
public UseCultureAttribute(string culture, string uiCulture)
|
|
{
|
|
this.culture = new Lazy<CultureInfo>(() => new CultureInfo(culture));
|
|
this.uiCulture = new Lazy<CultureInfo>(() => new CultureInfo(uiCulture));
|
|
}
|
|
|
|
/// <summary>Gets the culture.</summary>
|
|
public CultureInfo Culture => culture.Value;
|
|
|
|
/// <summary>Gets the UI culture.</summary>
|
|
public CultureInfo UICulture => uiCulture.Value;
|
|
|
|
/// <summary>
|
|
/// Stores the current <see cref="Thread.CurrentPrincipal" /> <see cref="CultureInfo.CurrentCulture" /> and
|
|
/// <see cref="CultureInfo.CurrentUICulture" /> and replaces them with the new cultures defined in the constructor.
|
|
/// </summary>
|
|
/// <param name="methodUnderTest">The method under test</param>
|
|
public override void Before(MethodInfo methodUnderTest)
|
|
{
|
|
#if NETCORE
|
|
originalCulture = CultureInfo.CurrentCulture;
|
|
originalUICulture = CultureInfo.CurrentUICulture;
|
|
|
|
CultureInfo.CurrentCulture = Culture;
|
|
CultureInfo.CurrentUICulture = Culture;
|
|
#else
|
|
originalCulture = Thread.CurrentThread.CurrentCulture;
|
|
originalUICulture = Thread.CurrentThread.CurrentUICulture;
|
|
|
|
Thread.CurrentThread.CurrentCulture = Culture;
|
|
Thread.CurrentThread.CurrentUICulture = UICulture;
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Restores the original <see cref="CultureInfo.CurrentCulture" /> and
|
|
/// <see cref="CultureInfo.CurrentUICulture" /> to <see cref="Thread.CurrentPrincipal" />
|
|
/// </summary>
|
|
/// <param name="methodUnderTest">The method under test</param>
|
|
public override void After(MethodInfo methodUnderTest)
|
|
{
|
|
#if NETCORE
|
|
CultureInfo.CurrentCulture = originalCulture;
|
|
CultureInfo.CurrentUICulture = originalUICulture;
|
|
#else
|
|
Thread.CurrentThread.CurrentCulture = originalCulture;
|
|
Thread.CurrentThread.CurrentUICulture = originalUICulture;
|
|
#endif
|
|
}
|
|
} |