mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-18 22:46:38 +08:00
75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
using Avalonia.Controls;
|
|
using Avalonia.Media;
|
|
using Shouldly;
|
|
using Xunit;
|
|
|
|
namespace AtomUI.Localization.Tests;
|
|
|
|
public class LanguageResourceProviderTests
|
|
{
|
|
[Fact]
|
|
public void Provider_Projects_FlowDirection_From_The_Current_Language_Revision()
|
|
{
|
|
var runtime = LanguageManagerTestRuntime.Create();
|
|
|
|
runtime.Provider.TryGetResource(
|
|
LanguageResourceKeys.FlowDirection,
|
|
null,
|
|
out var leftToRight).ShouldBeTrue();
|
|
runtime.Manager.ChangeLanguage(LanguageTags.ArSA);
|
|
runtime.Provider.TryGetResource(
|
|
LanguageResourceKeys.FlowDirection,
|
|
null,
|
|
out var rightToLeft).ShouldBeTrue();
|
|
|
|
leftToRight.ShouldBe(FlowDirection.LeftToRight);
|
|
rightToLeft.ShouldBe(FlowDirection.RightToLeft);
|
|
}
|
|
|
|
[Fact]
|
|
public void Provider_Resolves_The_Exact_Boxed_Enum_Key_From_The_Current_Snapshot()
|
|
{
|
|
var runtime = LanguageManagerTestRuntime.Create();
|
|
|
|
runtime.Provider.TryGetResource(RuntimeResourceKind.Value, null, out var english).ShouldBeTrue();
|
|
runtime.Manager.ChangeLanguage(LanguageTags.ZhCN);
|
|
runtime.Provider.TryGetResource(RuntimeResourceKind.Value, null, out var chinese).ShouldBeTrue();
|
|
|
|
english.ShouldBe("English");
|
|
chinese.ShouldBe("中文");
|
|
}
|
|
|
|
[Fact]
|
|
public void Provider_Rejects_Unknown_Keys_And_Different_Enum_Types()
|
|
{
|
|
var runtime = LanguageManagerTestRuntime.Create();
|
|
|
|
runtime.Provider.TryGetResource("Acme:Value", null, out var stringValue).ShouldBeFalse();
|
|
runtime.Provider.TryGetResource(OtherResourceKind.Value, null, out var enumValue).ShouldBeFalse();
|
|
|
|
stringValue.ShouldBeNull();
|
|
enumValue.ShouldBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Provider_Raises_Exactly_One_Host_Notification_Per_Committed_Change()
|
|
{
|
|
var runtime = LanguageManagerTestRuntime.Create();
|
|
var host = new Border();
|
|
host.Resources.MergedDictionaries.Add(runtime.Provider);
|
|
var notifications = 0;
|
|
((IResourceHost)host).ResourcesChanged += (_, _) => notifications++;
|
|
|
|
runtime.Manager.ChangeLanguage(LanguageTags.ZhCN);
|
|
runtime.Manager.ChangeLanguage(LanguageTags.ZhCN);
|
|
runtime.Manager.ChangeLanguage(LanguageTags.ArSA);
|
|
|
|
notifications.ShouldBe(2);
|
|
}
|
|
|
|
private enum OtherResourceKind
|
|
{
|
|
Value = 1
|
|
}
|
|
}
|