Spaces:
Paused
Paused
| import { describe, expect, it, vi } from "vitest"; | |
| import { createEditorSubmitHandler } from "./tui.js"; | |
| describe("createEditorSubmitHandler", () => { | |
| it("adds submitted messages to editor history", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage: vi.fn(), | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler("hello world"); | |
| expect(editor.setText).toHaveBeenCalledWith(""); | |
| expect(editor.addToHistory).toHaveBeenCalledWith("hello world"); | |
| }); | |
| it("trims input before adding to history", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage: vi.fn(), | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler(" hi "); | |
| expect(editor.addToHistory).toHaveBeenCalledWith("hi"); | |
| }); | |
| it("does not add empty-string submissions to history", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage: vi.fn(), | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler(""); | |
| expect(editor.addToHistory).not.toHaveBeenCalled(); | |
| }); | |
| it("does not add whitespace-only submissions to history", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage: vi.fn(), | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler(" "); | |
| expect(editor.addToHistory).not.toHaveBeenCalled(); | |
| }); | |
| it("routes slash commands to handleCommand", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handleCommand = vi.fn(); | |
| const sendMessage = vi.fn(); | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand, | |
| sendMessage, | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler("/models"); | |
| expect(editor.addToHistory).toHaveBeenCalledWith("/models"); | |
| expect(handleCommand).toHaveBeenCalledWith("/models"); | |
| expect(sendMessage).not.toHaveBeenCalled(); | |
| }); | |
| it("routes normal messages to sendMessage", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handleCommand = vi.fn(); | |
| const sendMessage = vi.fn(); | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand, | |
| sendMessage, | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler("hello"); | |
| expect(editor.addToHistory).toHaveBeenCalledWith("hello"); | |
| expect(sendMessage).toHaveBeenCalledWith("hello"); | |
| expect(handleCommand).not.toHaveBeenCalled(); | |
| }); | |
| it("routes bang-prefixed lines to handleBangLine", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const handleBangLine = vi.fn(); | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage: vi.fn(), | |
| handleBangLine, | |
| }); | |
| handler("!ls"); | |
| expect(handleBangLine).toHaveBeenCalledWith("!ls"); | |
| }); | |
| it("treats a lone ! as a normal message", () => { | |
| const editor = { | |
| setText: vi.fn(), | |
| addToHistory: vi.fn(), | |
| }; | |
| const sendMessage = vi.fn(); | |
| const handler = createEditorSubmitHandler({ | |
| editor, | |
| handleCommand: vi.fn(), | |
| sendMessage, | |
| handleBangLine: vi.fn(), | |
| }); | |
| handler("!"); | |
| expect(sendMessage).toHaveBeenCalledWith("!"); | |
| }); | |
| }); | |