| 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"); |
| }); |
| }); |
|
|