Some checks failed
gobuild / build (push) Failing after 6s
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.
46 lines
1.1 KiB
Go
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
|
|
}
|