/* @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 ( ); } describe('EditorAgentDraftTextarea', () => { it('forwards controlled draft edits and paste events', async () => { const user = userEvent.setup(); const onPaste = vi.fn((event: ClipboardEvent) => event.preventDefault()); render(); 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( , ); 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(); }); });