/* @vitest-environment jsdom */ import { afterEach, describe, expect, test, vi } from 'vitest'; import { APP_HOME_TITLE, resolveAppTitleForSelectionStage, syncAppTitle, } from './appTitle'; const hostBridgeMock = vi.hoisted(() => ({ setHostAppTitle: vi.fn(), })); vi.mock('./host-bridge/hostBridge', () => ({ setHostAppTitle: hostBridgeMock.setHostAppTitle, })); afterEach(() => { document.title = ''; hostBridgeMock.setHostAppTitle.mockReset(); }); describe('appTitle', () => { test('按平台阶段生成可读页面标题', () => { expect(resolveAppTitleForSelectionStage('platform')).toBe(APP_HOME_TITLE); expect(resolveAppTitleForSelectionStage('creation-home')).toBe( APP_HOME_TITLE, ); expect(resolveAppTitleForSelectionStage('work-detail')).toBe( '作品详情 - 陶泥儿', ); expect(resolveAppTitleForSelectionStage('match3d-runtime')).toBe( '抓大鹅 - 陶泥儿', ); expect(resolveAppTitleForSelectionStage('puzzle-generating')).toBe( '拼图生成中 - 陶泥儿', ); }); test('同步浏览器标题并请求宿主窗口标题', () => { syncAppTitle(' 拼图 - 陶泥儿 '); expect(document.title).toBe('拼图 - 陶泥儿'); expect(hostBridgeMock.setHostAppTitle).toHaveBeenCalledWith({ title: '拼图 - 陶泥儿', }); }); test('空标题回退到品牌名', () => { syncAppTitle(' '); expect(document.title).toBe('陶泥儿'); expect(hostBridgeMock.setHostAppTitle).toHaveBeenCalledWith({ title: '陶泥儿', }); }); });