Files
muxplex/muxterm/pool_test.go
T

91 lines
1.8 KiB
Go

package main
import (
"os/exec"
"testing"
"time"
)
func TestNewPool(t *testing.T) {
p := NewPool()
if p == nil {
t.Fatal("NewPool returned nil")
}
}
func TestPool_Get_NoSession(t *testing.T) {
p := NewPool()
s := p.Get("nonexistent")
if s != nil {
t.Fatal("Get on empty pool should return nil")
}
}
func TestPool_IsAlive_NoSession(t *testing.T) {
p := NewPool()
if p.IsAlive("nonexistent") {
t.Fatal("IsAlive on empty pool should return false")
}
}
func TestPool_CloseAll_Empty(t *testing.T) {
p := NewPool()
p.CloseAll() // must not panic
}
func TestPool_Attach_Real(t *testing.T) {
if testing.Short() {
t.Skip("skipping integration test in short mode")
}
name := "test-muxterm"
// Ensure the tmux session exists.
exec.Command("tmux", "kill-session", "-t", name).Run()
cmd := exec.Command("tmux", "new-session", "-d", "-s", name, "-x", "80", "-y", "24")
if err := cmd.Run(); err != nil {
t.Fatalf("failed to create tmux session %q: %v", name, err)
}
defer exec.Command("tmux", "kill-session", "-t", name).Run()
p := NewPool()
defer p.CloseAll()
// Attach
sess, err := p.Attach(name, 80, 24)
if err != nil {
t.Fatalf("Attach failed: %v", err)
}
if sess == nil {
t.Fatal("Attach returned nil session")
}
if sess.PTY == nil {
t.Fatal("Session PTY is nil")
}
// IsAlive
if !p.IsAlive(name) {
t.Fatal("IsAlive should return true after Attach")
}
// Resize
err = p.Resize(name, 120, 40)
if err != nil {
t.Fatalf("Resize failed: %v", err)
}
resized := p.Get(name)
if resized.Cols != 120 {
t.Errorf("After resize Cols = %d, want 120", resized.Cols)
}
if resized.Rows != 40 {
t.Errorf("After resize Rows = %d, want 40", resized.Rows)
}
// Cleanup
p.CloseAll()
time.Sleep(100 * time.Millisecond)
if p.IsAlive(name) {
t.Fatal("IsAlive should return false after CloseAll")
}
}