78 lines
2.0 KiB
Go
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)
|
|
}
|