From 4ffb22e7f69f1c9c79b095d4e60bad3d97aac55b Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Thu, 18 Jun 2026 07:45:37 +0300 Subject: ik0 replace test seams with dependency injection --- internal/tmuxedit/send.go | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'internal/tmuxedit/send.go') diff --git a/internal/tmuxedit/send.go b/internal/tmuxedit/send.go index 7a6bce2..2af7074 100644 --- a/internal/tmuxedit/send.go +++ b/internal/tmuxedit/send.go @@ -7,30 +7,49 @@ import ( "time" ) -// sendKeys is the seam for `tmux send-keys`. Override in tests. -var sendKeys = func(paneID string, keys ...string) error { +func sendKeys(paneID string, keys ...string) error { + return tmuxEditDeps{}.send(paneID, keys...) +} + +func (d tmuxEditDeps) send(paneID string, keys ...string) error { + if d.sendKeys != nil { + return d.sendKeys(paneID, keys...) + } args := append([]string{"send-keys", "-t", paneID}, keys...) - _, err := runCommand("tmux", args...) + _, err := d.command("tmux", args...) if err != nil { return fmt.Errorf("send-keys failed: %w", err) } return nil } -// sendRepeatedKey is the seam for `tmux send-keys -N `. Override in -// tests. Uses -N for efficient bulk key repeats (e.g. 200 backspaces). -var sendRepeatedKey = func(paneID, key string, count int) error { +func sendRepeatedKey(paneID, key string, count int) error { + return tmuxEditDeps{}.sendRepeated(paneID, key, count) +} + +// sendRepeated uses `tmux send-keys -N ` for efficient bulk key repeats +// (e.g. 200 backspaces). +func (d tmuxEditDeps) sendRepeated(paneID, key string, count int) error { + if d.sendRepeatedKey != nil { + return d.sendRepeatedKey(paneID, key, count) + } args := []string{"send-keys", "-t", paneID, "-N", strconv.Itoa(count), key} - _, err := runCommand("tmux", args...) + _, err := d.command("tmux", args...) if err != nil { return fmt.Errorf("send-keys -N failed: %w", err) } return nil } -// sleepAfterClear pauses to let the TUI drain queued keystrokes (like bulk -// backspaces) before new text is sent. Override in tests to avoid delays. -var sleepAfterClear = func() { time.Sleep(300 * time.Millisecond) } +func sleepAfterClear() { tmuxEditDeps{}.sleep() } + +func (d tmuxEditDeps) sleep() { + if d.sleepAfterClear != nil { + d.sleepAfterClear() + return + } + time.Sleep(300 * time.Millisecond) +} // deduplicateText compares the original (pre-filled) text with what the user // returned from the editor. Returns empty string if unchanged (no-op), or -- cgit v1.2.3