import { describe, expect, it, vi } from "vitest"; import { createEditorSubmitHandler } from "./tui.js"; describe("createEditorSubmitHandler", () => { it("routes lines starting with ! to handleBangLine", () => { const editor = { setText: vi.fn(), addToHistory: vi.fn(), }; const handleCommand = vi.fn(); const sendMessage = vi.fn(); const handleBangLine = vi.fn(); const onSubmit = createEditorSubmitHandler({ editor, handleCommand, sendMessage, handleBangLine, }); onSubmit("!ls"); expect(handleBangLine).toHaveBeenCalledTimes(1); expect(handleBangLine).toHaveBeenCalledWith("!ls"); expect(sendMessage).not.toHaveBeenCalled(); expect(handleCommand).not.toHaveBeenCalled(); }); it("treats a lone ! as a normal message", () => { const editor = { setText: vi.fn(), addToHistory: vi.fn(), }; const handleCommand = vi.fn(); const sendMessage = vi.fn(); const handleBangLine = vi.fn(); const onSubmit = createEditorSubmitHandler({ editor, handleCommand, sendMessage, handleBangLine, }); onSubmit("!"); expect(handleBangLine).not.toHaveBeenCalled(); expect(sendMessage).toHaveBeenCalledTimes(1); expect(sendMessage).toHaveBeenCalledWith("!"); }); it("does not treat leading whitespace before ! as a bang command", () => { const editor = { setText: vi.fn(), addToHistory: vi.fn(), }; const handleCommand = vi.fn(); const sendMessage = vi.fn(); const handleBangLine = vi.fn(); const onSubmit = createEditorSubmitHandler({ editor, handleCommand, sendMessage, handleBangLine, }); onSubmit(" !ls"); expect(handleBangLine).not.toHaveBeenCalled(); expect(sendMessage).toHaveBeenCalledWith("!ls"); expect(editor.addToHistory).toHaveBeenCalledWith("!ls"); }); it("trims normal messages before sending and adding to history", () => { const editor = { setText: vi.fn(), addToHistory: vi.fn(), }; const handleCommand = vi.fn(); const sendMessage = vi.fn(); const handleBangLine = vi.fn(); const onSubmit = createEditorSubmitHandler({ editor, handleCommand, sendMessage, handleBangLine, }); onSubmit(" hello "); expect(sendMessage).toHaveBeenCalledWith("hello"); expect(editor.addToHistory).toHaveBeenCalledWith("hello"); }); });