mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-07 00:39:00 +08:00
- 在 GodotLocalizationSettingsTests 中添加核心本地化接口引用 - 为 GodotLocalizationSettings 添加架构依赖项 - 配置 Godot 全局命名空间以便更简单的 API 访问 - 更新测试文件中的设置数据抽象层依赖项 - 简化 Godot 项目中的全局 using 指令结构
74 lines
2.6 KiB
C#
74 lines
2.6 KiB
C#
using GFramework.Core.Abstractions.Localization;
|
|
using GFramework.Game.Abstractions.Setting;
|
|
using GFramework.Game.Abstractions.Setting.Data;
|
|
using GFramework.Godot.Setting;
|
|
using GFramework.Godot.Setting.Data;
|
|
|
|
namespace GFramework.Game.Tests.Setting;
|
|
|
|
/// <summary>
|
|
/// 覆盖 Godot 本地化设置应用器的语言同步行为,防止持久化语言仅影响 Godot 而未同步框架管理器。
|
|
/// </summary>
|
|
[TestFixture]
|
|
public sealed class GodotLocalizationSettingsTests
|
|
{
|
|
[Test]
|
|
public async Task Apply_ShouldSyncEnglishToGodotLocaleAndFrameworkLanguage()
|
|
{
|
|
var manager = new Mock<ILocalizationManager>(MockBehavior.Strict);
|
|
manager.Setup(it => it.SetLanguage("eng"));
|
|
string? appliedLocale = null;
|
|
|
|
var applicator = CreateApplicator("English", manager.Object, locale => appliedLocale = locale);
|
|
|
|
await applicator.Apply();
|
|
|
|
Assert.That(appliedLocale, Is.EqualTo("en"));
|
|
manager.Verify(it => it.SetLanguage("eng"), Times.Once);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Apply_ShouldSyncChineseToGodotLocaleAndFrameworkLanguage()
|
|
{
|
|
var manager = new Mock<ILocalizationManager>(MockBehavior.Strict);
|
|
manager.Setup(it => it.SetLanguage("zhs"));
|
|
string? appliedLocale = null;
|
|
|
|
var applicator = CreateApplicator("简体中文", manager.Object, locale => appliedLocale = locale);
|
|
|
|
await applicator.Apply();
|
|
|
|
Assert.That(appliedLocale, Is.EqualTo("zh_CN"));
|
|
manager.Verify(it => it.SetLanguage("zhs"), Times.Once);
|
|
}
|
|
|
|
[Test]
|
|
public async Task Apply_ShouldFallbackUnknownLanguageToEnglish()
|
|
{
|
|
var manager = new Mock<ILocalizationManager>(MockBehavior.Strict);
|
|
manager.Setup(it => it.SetLanguage("eng"));
|
|
string? appliedLocale = null;
|
|
|
|
var applicator = CreateApplicator("Esperanto", manager.Object, locale => appliedLocale = locale);
|
|
|
|
await applicator.Apply();
|
|
|
|
Assert.That(appliedLocale, Is.EqualTo("en"));
|
|
manager.Verify(it => it.SetLanguage("eng"), Times.Once);
|
|
}
|
|
|
|
private static GodotLocalizationSettings CreateApplicator(
|
|
string language,
|
|
ILocalizationManager manager,
|
|
Action<string> applyGodotLocale)
|
|
{
|
|
var settingsModel = new Mock<ISettingsModel>(MockBehavior.Strict);
|
|
settingsModel.Setup(it => it.GetData<LocalizationSettings>()).Returns(new LocalizationSettings
|
|
{
|
|
Language = language
|
|
});
|
|
|
|
return new GodotLocalizationSettings(settingsModel.Object, new LocalizationMap(), () => manager,
|
|
applyGodotLocale);
|
|
}
|
|
} |