import { CodeHighlightNode, CodeNode } from "@lexical/code"; import { AutoLinkNode, LinkNode } from "@lexical/link"; import { ListItemNode, ListNode } from "@lexical/list"; import { LexicalComposer } from "@lexical/react/LexicalComposer"; import { ContentEditable } from "@lexical/react/LexicalContentEditable"; import LexicalErrorBoundary from "@lexical/react/LexicalErrorBoundary"; import { RichTextPlugin } from "@lexical/react/LexicalRichTextPlugin"; import { HeadingNode, QuoteNode } from "@lexical/rich-text"; import { TableCellNode, TableNode, TableRowNode } from "@lexical/table"; import { render } from "@testing-library/react"; import { fireEvent, waitFor } from "@testing-library/react"; import { describe, it, expect } from "vitest"; import ExampleTheme from "../ExampleTheme"; import { VariableNode } from "../nodes/VariableNode"; import CustomEnterKeyPlugin from "./customEnterKeyPlugin"; const editorConfig = { theme: ExampleTheme, onError(error: Error) { throw error; }, namespace: "", nodes: [ HeadingNode, ListNode, ListItemNode, QuoteNode, CodeNode, CodeHighlightNode, TableNode, TableCellNode, TableRowNode, AutoLinkNode, LinkNode, VariableNode, ], }; const TestEditor = () => ( } placeholder={
Enter some text...
} ErrorBoundary={LexicalErrorBoundary} />
); describe("Editor", () => { describe("CustomEnterKeyPlugin", () => { let container: HTMLElement | null = null; beforeEach(() => { container = render().container; }); afterEach(() => { container = null; }); it("should insert a line break on Enter key press", async () => { if (container === null) { throw new Error("Container is null"); } const editorElement = container.querySelector('[contenteditable="true"]') as HTMLElement; editorElement.focus(); const paragraphElement = editorElement.querySelector("p") as HTMLElement; fireEvent.keyDown(editorElement, { key: "Enter", code: "Enter", keycode: 13 }); await waitFor(() => { const brElements = paragraphElement?.querySelectorAll("br"); expect(brElements?.length).toBe(1); }); }); }); });