Files
Genarrative/src/components/common/UnifiedModal.test.tsx
T
kdletters e22cb1d06b 收口统一弹窗关闭按钮
新增 PlatformModalCloseButton pixel 变体承接像素风关闭入口

将 UnifiedModal 头部关闭按钮迁移到 PlatformModalCloseButton

补充平台态和像素态关闭按钮测试

更新 PlatformUiKit 文档和 Hermes 决策记录
2026-06-10 13:19:55 +08:00

84 lines
2.3 KiB
TypeScript

/* @vitest-environment jsdom */
import { fireEvent, render, screen } from '@testing-library/react';
import { expect, test, vi } from 'vitest';
import { UnifiedModal } from './UnifiedModal';
test('renders an accessible platform modal', () => {
render(
<UnifiedModal open title="统一弹窗" onClose={() => {}} portal={false}>
<div>窗口内容</div>
</UnifiedModal>,
);
expect(screen.getByRole('dialog', { name: '统一弹窗' })).toBeTruthy();
expect(screen.getByText('窗口内容')).toBeTruthy();
expect(screen.getByRole('button', { name: '关闭' }).className).toContain(
'platform-icon-button',
);
});
test('closes through backdrop and escape', () => {
const onClose = vi.fn();
const { rerender } = render(
<UnifiedModal open title="统一弹窗" onClose={onClose} portal={false}>
<div>窗口内容</div>
</UnifiedModal>,
);
fireEvent.click(screen.getByRole('dialog').parentElement as HTMLElement);
expect(onClose).toHaveBeenCalledTimes(1);
rerender(
<UnifiedModal open title="统一弹窗" onClose={onClose} portal={false}>
<div>窗口内容</div>
</UnifiedModal>,
);
fireEvent.keyDown(window, { key: 'Escape' });
expect(onClose).toHaveBeenCalledTimes(2);
});
test('respects closeDisabled for every default close path', () => {
const onClose = vi.fn();
render(
<UnifiedModal
open
title="生成中"
onClose={onClose}
closeDisabled
portal={false}
>
<div>窗口内容</div>
</UnifiedModal>,
);
fireEvent.click(screen.getByRole('dialog').parentElement as HTMLElement);
fireEvent.keyDown(window, { key: 'Escape' });
fireEvent.click(screen.getByRole('button', { name: '关闭' }));
expect(onClose).not.toHaveBeenCalled();
});
test('uses shared pixel close button chrome', () => {
render(
<UnifiedModal
open
title="像素弹窗"
onClose={() => {}}
variant="pixel"
portal={false}
>
<div>窗口内容</div>
</UnifiedModal>,
);
const closeButton = screen.getByRole('button', { name: '关闭' });
expect(screen.getByRole('dialog', { name: '像素弹窗' }).className).toContain(
'pixel-modal-shell',
);
expect(closeButton.className).toContain('bg-black/20');
expect(closeButton.className).toContain('text-zinc-400');
});