gostations/internal/player/player_test.go
Greg Gauthier 2b688569c7
Some checks failed
gobuild / build (push) Failing after 6s
feat: add mpv IPC player with playback controls and winamp-style UI
Implement mpv JSON IPC backend for non-blocking playback, streamed
metadata (media-title/icy-title), and runtime controls (pause, mute,
volume, next/prev). Extend Player interface and wire a two-stage TUI
that switches to a dedicated playback view with keyboard shortcuts and
a styled hint bar. Fallback to legacy player when mpv is unavailable.
2026-06-05 23:13:01 +01:00

46 lines
1.1 KiB
Go

package player
import (
"testing"
)
func TestIsInstalled(t *testing.T) {
// These should almost always exist in a reasonable env
if !IsInstalled("sh") && !IsInstalled("bash") && !IsInstalled("ls") {
t.Log("warning: no common shell util found; IsInstalled may be too strict in this env")
}
if IsInstalled("definitely-not-a-real-command-xyz123") {
t.Error("nonexistent command reported as installed")
}
}
func TestLegacyPlayer_BadCommand(t *testing.T) {
p := NewLegacy("definitely-not-a-real-command-xyz123")
err := p.Play("http://example.com")
if err != nil {
// Current legacy impl swallows and prints; we accept nil or err
t.Logf("play bad cmd returned err (ok): %v", err)
}
_ = p.Stop()
}
func TestMpvInterfaceAndControls(t *testing.T) {
p := NewMpv("echo") // won't really play, but exercises creation + interface
_ = p.Play("http://example.com/stream")
_ = p.Pause()
_ = p.Resume()
_ = p.Mute()
_ = p.Unmute()
_ = p.Next()
_ = p.Prev()
_ = p.VolumeUp()
_ = p.VolumeDown()
if p.Metadata() != "" {
t.Log("mpv metadata (may be empty for echo stub)")
}
_ = p.Stop()
// must satisfy Player fully
var _ Player = p
}