import { describe, expect, it } from "vitest"; import { readRuntimeUiLocaleFromContextSnapshot, resolveEffectiveRuntimeUiLocale, resolveEffectiveRuntimeUiLocaleForContextSnapshot, resolveRuntimeLocalizationPrompt, } from "../services/agent-runtime-localization.js"; describe("resolveEffectiveRuntimeUiLocale", () => { it("prefers the explicit request locale over the instance default", () => { expect(resolveEffectiveRuntimeUiLocale({ requestedUiLocale: "en-US", runtimeDefaultLocale: "zh-CN", })).toBe("en"); }); it("falls back to the stored runtime locale when no explicit request locale was provided", () => { expect(resolveEffectiveRuntimeUiLocale({ runtimeUiLocale: "en", runtimeDefaultLocale: "zh-CN", })).toBe("en"); }); it("uses the instance default locale when no request-scoped locale was provided", () => { expect(resolveEffectiveRuntimeUiLocale({ runtimeDefaultLocale: "en", })).toBe("en"); }); it("keeps zh-CN as the final fallback", () => { expect(resolveEffectiveRuntimeUiLocale({})).toBe("zh-CN"); }); }); describe("resolveEffectiveRuntimeUiLocaleForContextSnapshot", () => { it("reads runtimeUiLocale from the run context when present", () => { expect( resolveEffectiveRuntimeUiLocaleForContextSnapshot( { runtimeUiLocale: "en" }, "zh-CN", ), ).toBe("en"); }); it("falls back to the instance default locale for contexts without a stored runtimeUiLocale", () => { expect( resolveEffectiveRuntimeUiLocaleForContextSnapshot( {}, "en", ), ).toBe("en"); }); it("reads only the persisted runtime locale from the helper accessor", () => { expect(readRuntimeUiLocaleFromContextSnapshot({ runtimeUiLocale: "zh-CN" })).toBe("zh-CN"); expect(readRuntimeUiLocaleFromContextSnapshot({ requestedUiLocale: "en" })).toBeNull(); }); }); describe("resolveRuntimeLocalizationPrompt", () => { it("returns a concise zh-CN note for Windows PowerShell", () => { const note = resolveRuntimeLocalizationPrompt({ locale: "zh-CN", platform: "win32", shell: "C:\\Program Files\\PowerShell\\7\\pwsh.exe", }); expect(note).toContain("## 语言与运行时契约"); expect(note).toContain("所有面向用户的自然语言输出必须使用简体中文"); expect(note).toContain("宿主环境:Windows PowerShell。"); expect(note).toContain("CLI 契约:执行 Paperclip 命令一律使用 `penclip ...`"); expect(note).toContain("`paperclipai ...`"); expect(note).toContain("API 契约:优先使用 `penclip` CLI 完成 Paperclip 操作"); expect(note).toContain("只有在 CLI 无法覆盖时"); expect(note).not.toContain("Python / Node"); }); it("describes WSL precisely when the runtime is WSL", () => { const note = resolveRuntimeLocalizationPrompt({ locale: "zh-CN", platform: "linux", shell: "/bin/bash", env: { WSL_DISTRO_NAME: "Ubuntu" }, osRelease: "6.6.87.2-microsoft-standard-WSL2", }); expect(note).toContain("宿主环境:WSL bash。"); expect(note).toContain("优先使用 `penclip` CLI"); }); it("returns an English note with a detected POSIX shell label", () => { const note = resolveRuntimeLocalizationPrompt({ locale: "en", platform: "darwin", shell: "/bin/zsh", }); expect(note).toContain("## Language and Runtime Contract"); expect(note).toContain("all user-facing natural-language output must be in English"); expect(note).toContain("Host runtime: zsh on darwin."); expect(note).toContain("CLI contract: use `penclip ...` for Paperclip commands"); expect(note).toContain("`paperclipai ...`"); expect(note).toContain("API contract: prefer the `penclip` CLI for Paperclip operations"); expect(note).toContain("only call the HTTP API directly when the CLI cannot cover the action"); expect(note).not.toContain("Python / Node"); }); });