676bd524ee
示例来自微信:  before: - firefox:  - edge:  after: - firefox:   - edge:  - 使用 Lexical + OverlayScrollbars 实现统一可控的滑动条样式, 取代原来的textarea Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/149 Co-authored-by: 王德宇 <kvtodev@outlook.com> Co-committed-by: 王德宇 <kvtodev@outlook.com>
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
/* @vitest-environment jsdom */
|
|
|
|
import { fireEvent, render, screen } from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
import { useState } from 'react';
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
import { EditorAgentDraftTextarea } from './EditorAgentDraftTextarea.tsx';
|
|
|
|
beforeEach(() => {
|
|
vi.stubGlobal(
|
|
'ResizeObserver',
|
|
class ResizeObserver {
|
|
observe() {}
|
|
unobserve() {}
|
|
disconnect() {}
|
|
},
|
|
);
|
|
});
|
|
|
|
function DraftHarness({
|
|
onPaste,
|
|
onSubmitRequest,
|
|
}: {
|
|
onPaste?: (event: ClipboardEvent) => void;
|
|
onSubmitRequest: () => void;
|
|
}) {
|
|
const [value, setValue] = useState('');
|
|
return (
|
|
<EditorAgentDraftTextarea
|
|
value={value}
|
|
onValueChange={setValue}
|
|
onPaste={onPaste}
|
|
onSubmitRequest={onSubmitRequest}
|
|
/>
|
|
);
|
|
}
|
|
|
|
describe('EditorAgentDraftTextarea', () => {
|
|
it('forwards controlled draft edits and paste events', async () => {
|
|
const user = userEvent.setup();
|
|
const onPaste = vi.fn((event: ClipboardEvent) => event.preventDefault());
|
|
render(<DraftHarness onPaste={onPaste} onSubmitRequest={vi.fn()} />);
|
|
|
|
const editor = screen.getByRole('textbox', {
|
|
name: '发送给画布 Agent',
|
|
});
|
|
await user.click(editor);
|
|
fireEvent.paste(editor, {
|
|
clipboardData: {
|
|
files: [],
|
|
getData: () => '',
|
|
items: [],
|
|
types: [],
|
|
},
|
|
});
|
|
expect(onPaste).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it('submits on Enter but preserves Shift+Enter and IME confirmation', async () => {
|
|
const user = userEvent.setup();
|
|
const onSubmitRequest = vi.fn();
|
|
const { container } = render(
|
|
<DraftHarness onSubmitRequest={onSubmitRequest} />,
|
|
);
|
|
|
|
const editor = screen.getByRole('textbox', {
|
|
name: '发送给画布 Agent',
|
|
});
|
|
await user.click(editor);
|
|
fireEvent.keyDown(editor, { key: 'Enter', shiftKey: true });
|
|
expect(onSubmitRequest).not.toHaveBeenCalled();
|
|
|
|
fireEvent.keyDown(editor, {
|
|
key: 'Enter',
|
|
isComposing: true,
|
|
keyCode: 229,
|
|
});
|
|
expect(onSubmitRequest).not.toHaveBeenCalled();
|
|
|
|
fireEvent.keyDown(editor, { key: 'Enter' });
|
|
expect(onSubmitRequest).toHaveBeenCalledTimes(1);
|
|
expect(container.querySelector('form')).toBeNull();
|
|
expect(container.querySelector('textarea')).toBeNull();
|
|
});
|
|
});
|