Files
tia-love/internal/audio/audio_test.go
T

78 lines
2.0 KiB
Go

package audio
import (
"os"
"testing"
"time"
)
func TestInSSHSession(t *testing.T) {
t.Setenv("SSH_CONNECTION", "")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_TTY", "")
if InSSHSession() {
t.Fatal("harusnya false tanpa env SSH")
}
t.Setenv("SSH_CONNECTION", "10.0.0.1 22")
if !InSSHSession() {
t.Fatal("harusnya true dengan SSH_CONNECTION")
}
}
func TestEngineDisabledGraceful(t *testing.T) {
e := New(Options{Enabled: false})
if e.Ready() {
t.Fatal("engine disabled tidak boleh ready")
}
if got := e.Status(); got != "nonaktif" {
t.Fatalf("status: %q", got)
}
e.Play(Click) // tidak boleh panic
e.Play(Navigate)
}
func TestEngineSSHMute(t *testing.T) {
t.Setenv("SSH_CONNECTION", "10.0.0.1 22")
e := New(Options{Enabled: true, MuteOnSSH: true})
if !e.Muted() {
t.Fatal("harusnya muted di sesi SSH")
}
if got := e.Status(); got != "SSH auto-mute" {
t.Fatalf("status: %q", got)
}
e.Play(Click) // no-op
}
// TestEngineSpike — bukti Phase 0 (T-0.3). Jalankan manual:
//
// TIA_AUDIO_SPIKE=1 go test ./internal/audio/ -run TestEngineSpike -v -count=1
//
// Mengukur init (harus non-blocking) dan memastikan Play() cepat + tidak panic.
// Tanpa audio device, test tetap lulus sebagai bukti degradasi anggun.
func TestEngineSpike(t *testing.T) {
if os.Getenv("TIA_AUDIO_SPIKE") != "1" {
t.Skip("set TIA_AUDIO_SPIKE=1 untuk menjalankan spike audio")
}
t0 := time.Now()
e := New(Options{Enabled: true, Volume: 70})
t.Logf("New() kembali dalam %v (non-blocking)", time.Since(t0))
t1 := time.Now()
ok := e.WaitReady(5 * time.Second)
t.Logf("init+ready selesai dalam %v (ready=%v, status=%q, err=%v)", time.Since(t1), ok, e.Status(), e.Err())
if !ok {
// Skenario tanpa audio device: cukup buktikan tidak panic.
e.Play(Click)
return
}
for _, ev := range []Event{Click, Navigate, NotifySuccess} {
t2 := time.Now()
e.Play(ev)
t.Logf("Play(%s) kembali dalam %v", ev, time.Since(t2))
time.Sleep(150 * time.Millisecond)
}
time.Sleep(400 * time.Millisecond)
}