diff options
| author | Paul Buetow <paul@buetow.org> | 2025-09-07 11:27:43 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-09-07 11:27:43 +0300 |
| commit | 0d424adfc64da1c61296c66a99162ec68cc4f8d0 (patch) | |
| tree | 2aaaad9e6c5c1886809d213a4bf4f0fe8a5bc3c8 /internal/tmux/tmux_test.go | |
| parent | 8889949ad3851bfbf36ff5b73128286d67c88201 (diff) | |
hexai-action: integrate tmux orchestration; add internal/tmux; tests+docs; bump version to v0.7.0v0.7.0
Diffstat (limited to 'internal/tmux/tmux_test.go')
| -rw-r--r-- | internal/tmux/tmux_test.go | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/internal/tmux/tmux_test.go b/internal/tmux/tmux_test.go new file mode 100644 index 0000000..b18c8a3 --- /dev/null +++ b/internal/tmux/tmux_test.go @@ -0,0 +1,82 @@ +package tmux + +import ( + "errors" + "os" + "os/exec" + "testing" +) + +func TestInSession(t *testing.T) { + t.Setenv("TMUX", "/tmp/tmux-123,123,0") + if !InSession() { + t.Fatal("expected InSession true when TMUX is set") + } + t.Setenv("TMUX", "") + if InSession() { + t.Fatal("expected InSession false when TMUX is empty") + } +} + +func TestHasBinary_UsesLookPath(t *testing.T) { + old := lookPath + t.Cleanup(func() { lookPath = old }) + lookPath = func(file string) (string, error) { return "/bin/tmux", nil } + if !HasBinary() { + t.Fatal("expected HasBinary true when lookPath succeeds") + } + lookPath = func(file string) (string, error) { return "", errors.New("nope") } + if HasBinary() { + t.Fatal("expected HasBinary false when lookPath fails") + } +} + +func TestSplitRun_AssemblesArgs(t *testing.T) { + captured := struct{ name string; args []string }{} + oldCmd := command + t.Cleanup(func() { command = oldCmd }) + command = func(name string, args ...string) *exec.Cmd { + captured.name = name + captured.args = append([]string(nil), args...) + // Use a benign command that exits 0 + return exec.Command("true") + } + opts := SplitOpts{Target: ":.", Vertical: true, Percent: 40} + argv := []string{"/path/to/bin", "-flag", "value with spaces", "and'quote"} + if err := SplitRun(opts, argv); err != nil { + t.Fatalf("SplitRun error: %v", err) + } + if captured.name != "tmux" { + t.Fatalf("expected tmux, got %q", captured.name) + } + wantFlags := map[string]bool{"split-window": true, "-v": true, "-p": true, "40": true, "-t": true, ":.": true} + for _, a := range captured.args[:len(captured.args)-1] { + if wantFlags[a] { + delete(wantFlags, a) + } + } + if len(wantFlags) != 0 { + t.Fatalf("missing expected flags: %v", wantFlags) + } + last := captured.args[len(captured.args)-1] + if last == "" || last == argv[0] { + t.Fatalf("expected last arg to be joined command string, got %q", last) + } + _ = os.Unsetenv("TMUX") +} + +func TestAvailable(t *testing.T) { + oldLook := lookPath + t.Cleanup(func() { lookPath = oldLook }) + // Present binary + TMUX set -> available + lookPath = func(file string) (string, error) { return "/bin/tmux", nil } + t.Setenv("TMUX", "/tmp/tmux-1,1,1") + if !Available() { + t.Fatal("expected Available true with TMUX + binary") + } + // No binary -> not available + lookPath = func(file string) (string, error) { return "", errors.New("nope") } + if Available() { + t.Fatal("expected Available false without binary") + } +} |
