File: Utils\UseCultureAttributeTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Tests\Aspire.Hosting.Tests.csproj (Aspire.Hosting.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
// The original code was borrowed from https://github.com/xunit/samples.xunit/blob/main/v3/UseCultureExample/UseCultureAttributeTests.cs
// Licensed under http://www.apache.org/licenses/LICENSE-2.0.
 
using System.Globalization;
using Xunit;
 
namespace Aspire.TestUtilities.Tests;
 
public class UseCultureAttributeTests
{
    [Fact]
    public void GuardClauses()
    {
        Assert.Throws<ArgumentNullException>(() => new UseCultureAttribute(null!).Culture);
        Assert.Throws<ArgumentNullException>(() => new UseCultureAttribute("en-US", null!).UICulture);
    }
 
    [Theory]
    [InlineData("en-US")]
    [InlineData("da-DK")]
    [InlineData("de-DE")]
    public void CreatingWithCultureSetsCorrectCultureProperty(string culture)
    {
        var attr = new UseCultureAttribute(culture);
 
        Assert.Equal(culture, attr.Culture.Name);
    }
 
    [Theory]
    [InlineData("nl-BE")]
    [InlineData("fi-FI")]
    [InlineData("fr-CA")]
    public void CreatingWithCultureAndUICultureSetsCorrectCulturePropery(string culture)
    {
        var attr = new UseCultureAttribute(culture, "fr");
 
        Assert.Equal(culture, attr.Culture.Name);
    }
 
    [Theory]
    [InlineData("fr-FR")]
    [InlineData("es-ES")]
    [InlineData("zh-HK")]
    public void CreatingWithCultureSetsSameUICulture(string culture)
    {
        var attr = new UseCultureAttribute(culture);
 
        Assert.Equal(culture, attr.UICulture.Name);
    }
 
    [Theory]
    [InlineData("nl-NL")]
    [InlineData("de-AT")]
    [InlineData("en-GB")]
    public void CreatingWithCultureAndUICultureSetsCorrectUICulturePropery(string uiCulture)
    {
        var attr = new UseCultureAttribute("el-GR", uiCulture);
 
        Assert.Equal(uiCulture, attr.UICulture.Name);
    }
 
    [Theory]
    [InlineData("it-IT")]
    [InlineData("ja-JP")]
    [InlineData("nb-NO")]
    public void CultureIsChangedWithinTest(string culture)
    {
        var originalCulture = Thread.CurrentThread.CurrentCulture;
        var attr = new UseCultureAttribute(culture);
 
        attr.Before(null!, null!);
 
        Assert.Equal(attr.Culture, Thread.CurrentThread.CurrentCulture);
 
        attr.After(null!, null!);
 
        Assert.Equal(originalCulture, Thread.CurrentThread.CurrentCulture);
    }
 
    [Theory]
    [InlineData("pt-BR")]
    [InlineData("pa-IN")]
    [InlineData("rm-CH")]
    public void UICultureIsChangedWithinTest(string uiCulture)
    {
        var originalUICulture = Thread.CurrentThread.CurrentUICulture;
        var attr = new UseCultureAttribute("ru-RU", uiCulture);
 
        attr.Before(null!, null!);
 
        Assert.Equal(attr.UICulture, Thread.CurrentThread.CurrentUICulture);
 
        attr.After(null!, null!);
 
        Assert.Equal(originalUICulture, Thread.CurrentThread.CurrentUICulture);
    }
 
    [Fact, UseCulture("sv-SE")]
    public void AttributeChangesCultureToSwedishInTestMethod()
    {
        Assert.Equal("sv-SE", Thread.CurrentThread.CurrentCulture.Name);
    }
 
    [Fact, UseCulture("th-TH", "es-CL")]
    public void AttributeChangesUICultureToChileanSpanishInTestMethod()
    {
        Assert.Equal("es-CL", Thread.CurrentThread.CurrentUICulture.Name);
    }
 
    [Theory]
    [InlineData("it-IT", "IT")]
    [InlineData("ja-JP", "JP")]
    [InlineData("nb-NO", "NO")]
    public void RefreshCachedCultureRelatedInformationWithinTest(string culture, string region)
    {
        var originalCulture = Thread.CurrentThread.CurrentCulture;
        var attr = new UseCultureAttribute(culture);
 
        attr.Before(null!, null!);
 
        var ri = new RegionInfo(Thread.CurrentThread.CurrentCulture.LCID);
 
        Assert.Equal(attr.Culture, Thread.CurrentThread.CurrentCulture);
        Assert.Equal(ri.TwoLetterISORegionName, region);
 
        attr.After(null!, null!);
 
        Assert.Equal(originalCulture, Thread.CurrentThread.CurrentCulture);
    }
}