节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
2.41 KiB
Stardust
using System;
using System.Globalization;
using System.Runtime.CompilerServices;
using NewLife;
using Xunit;

namespace ServerTest;

/// <summary>数据层多语言词表测试。验证 31 种语言全部注册并可翻译</summary>
[Collection("Localization")]
public class LocalizationTests : IDisposable
{
    private static readonly String[] _locales =
    [
        "ar", "bn", "cs", "da", "de", "el", "es", "fa", "fi", "fr", "he", "hi", "hu", "id", "it", "ja", "ko",
        "ms", "nb", "nl", "pl", "pt", "ro", "ru", "sv", "th", "tr", "uk", "vi", "zh-Hans", "zh-Hant",
    ];

    private readonly CultureInfo? _old = Localization.Culture;

    /// <summary>恢复原始目标语言</summary>
    public void Dispose() => Localization.Culture = _old;

    [Fact(DisplayName = "星尘数据层的31种语言词表全部注册")]
    public void DataLocalesRegistered()
    {
        RuntimeHelpers.RunModuleConstructor(typeof(Stardust.Data.Configs.ConfigData).Module.ModuleHandle);

        Assert.Equal(31, _locales.Length);

        foreach (var code in _locales)
        {
            Localization.Culture = new CultureInfo(code);

            Assert.NotEqual("Action cannot be empty.", Localization.Translate("Action cannot be empty."));
            Assert.NotEqual("Domain cannot be empty.", Localization.Translate("Domain cannot be empty."));
        }

        Localization.Culture = new CultureInfo("zh-Hans");
        Assert.Equal("版本号不能为空", Localization.Translate("Version cannot be empty."));
        Assert.Equal("不能为空!", Localization.Translate("Cannot be empty."));
    }

    [Fact(DisplayName = "服务端词表注册并支持中文翻译")]
    public void ServerLocalesRegistered()
    {
        RuntimeHelpers.RunModuleConstructor(typeof(global::Stardust.Server.Startup).Module.ModuleHandle);

        Localization.Culture = new CultureInfo("zh-Hans");
        Assert.Equal("必须指定节点", Localization.Translate("Node must be specified."));
        Assert.Equal("未登录!", Localization.Translate("Not logged in."));

        Localization.Culture = new CultureInfo("zh-Hant");
        Assert.Equal("必須指定節點", Localization.Translate("Node must be specified."));
    }
}

/// <summary>多语言测试集合。Localization.Culture 是进程级全局状态,禁止与其它测试并行</summary>
[CollectionDefinition("Localization", DisableParallelization = true)]
public class LocalizationCollection { }