mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-06-14 02:40:45 +08:00
feat(i18n): add UI-only memory label formatter
This commit is contained in:
88
tests/ui-label-formatter.mjs
Normal file
88
tests/ui-label-formatter.mjs
Normal file
@@ -0,0 +1,88 @@
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import { setLocale } from "../i18n/index.js";
|
||||
import {
|
||||
uiBuildRegionLine,
|
||||
uiBuildScopeMetaText,
|
||||
uiDescribeStoryTimeSpanDisplay,
|
||||
uiMemoryNodeTypeClass,
|
||||
uiOwnerTypeLabel,
|
||||
uiScopeBadgeText,
|
||||
uiTypeLabel,
|
||||
} from "../ui/ui-label-formatter.js";
|
||||
|
||||
setLocale("zh-CN");
|
||||
assert.equal(uiTypeLabel("event"), "事件");
|
||||
assert.equal(uiTypeLabel("pov_memory"), "主观记忆");
|
||||
assert.equal(uiTypeLabel("custom_type"), "custom_type");
|
||||
assert.equal(uiTypeLabel(""), "—");
|
||||
assert.equal(uiMemoryNodeTypeClass("character"), "type-character");
|
||||
assert.equal(uiMemoryNodeTypeClass("pov_memory"), "type-character");
|
||||
assert.equal(uiMemoryNodeTypeClass("event"), "type-event");
|
||||
assert.equal(uiOwnerTypeLabel("user"), "用户");
|
||||
assert.equal(uiOwnerTypeLabel("character"), "角色");
|
||||
assert.equal(
|
||||
uiScopeBadgeText({ layer: "pov", ownerType: "character", ownerName: "艾琳" }),
|
||||
"角色 POV · 艾琳",
|
||||
);
|
||||
assert.equal(
|
||||
uiScopeBadgeText({ layer: "objective", regionPrimary: "钟楼" }),
|
||||
"客观 · 钟楼",
|
||||
);
|
||||
assert.equal(
|
||||
uiBuildRegionLine({
|
||||
regionPrimary: "钟楼",
|
||||
regionPath: ["王城", "钟楼"],
|
||||
regionSecondary: ["地下室"],
|
||||
}),
|
||||
"主地区: 钟楼 | 地区路径: 王城 / 钟楼 | 次级地区: 地下室",
|
||||
);
|
||||
assert.equal(uiDescribeStoryTimeSpanDisplay({ mixed: true }), "混合时间");
|
||||
assert.equal(
|
||||
uiDescribeStoryTimeSpanDisplay({ startLabel: "第一章", endLabel: "第二章", mixed: true }),
|
||||
"第一章 → 第二章 · 混合",
|
||||
);
|
||||
assert.equal(
|
||||
uiBuildScopeMetaText({
|
||||
scope: { layer: "pov", ownerType: "user", ownerName: "玩家" },
|
||||
storyTimeSpan: { startLabel: "第一章", mixed: true },
|
||||
}),
|
||||
"用户 POV: 玩家 · 剧情时间: 第一章 · 混合",
|
||||
);
|
||||
|
||||
setLocale("en-US");
|
||||
assert.equal(uiTypeLabel("event"), "Event");
|
||||
assert.equal(uiTypeLabel("pov_memory"), "POV Memory");
|
||||
assert.equal(uiOwnerTypeLabel("user"), "User");
|
||||
assert.equal(uiOwnerTypeLabel("character"), "Character");
|
||||
assert.equal(
|
||||
uiScopeBadgeText({ layer: "pov", ownerType: "character", ownerName: "Eileen" }),
|
||||
"Character POV · Eileen",
|
||||
);
|
||||
assert.equal(
|
||||
uiScopeBadgeText({ layer: "objective", regionPrimary: "Clocktower" }),
|
||||
"Objective · Clocktower",
|
||||
);
|
||||
assert.equal(
|
||||
uiBuildRegionLine({
|
||||
regionPrimary: "Clocktower",
|
||||
regionPath: ["Capital", "Clocktower"],
|
||||
regionSecondary: ["Basement"],
|
||||
}),
|
||||
"Primary region: Clocktower | Region path: Capital / Clocktower | Secondary regions: Basement",
|
||||
);
|
||||
assert.equal(uiDescribeStoryTimeSpanDisplay({ mixed: true }), "Mixed time");
|
||||
assert.equal(
|
||||
uiDescribeStoryTimeSpanDisplay({ startLabel: "Chapter 1", endLabel: "Chapter 2", mixed: true }),
|
||||
"Chapter 1 → Chapter 2 · mixed",
|
||||
);
|
||||
assert.equal(
|
||||
uiBuildScopeMetaText({
|
||||
scope: { layer: "pov", ownerType: "user", ownerName: "Player" },
|
||||
storyTimeSpan: { startLabel: "Chapter 1", mixed: true },
|
||||
}),
|
||||
"User POV: Player · Story time: Chapter 1 · mixed",
|
||||
);
|
||||
|
||||
setLocale("zh-CN");
|
||||
console.log("ui label formatter tests passed");
|
||||
Reference in New Issue
Block a user