Files

67 lines
1.5 KiB
Go

package app
import (
"os"
"os/exec"
"path/filepath"
"testing"
)
func TestFFmpegArgs(t *testing.T) {
args := ffmpegArgs("/in/a.flac", "/out/a.mp3", "128k", "Neon Rain", "AI Radio")
joined := ""
for _, a := range args {
joined += a + " "
}
for _, want := range []string{
"-i /in/a.flac",
"libmp3lame",
"-b:a 128k",
"-ar 44100",
"-ac 2",
"-id3v2_version 3",
"-write_id3v1 1",
"-metadata title=Neon Rain",
"-metadata album=AI Radio",
"/out/a.mp3",
} {
if !contains(joined, want) {
t.Fatalf("args missing %q:\n%s", want, joined)
}
}
}
func contains(hay, needle string) bool {
return len(hay) >= len(needle) && (func() bool {
for i := 0; i+len(needle) <= len(hay); i++ {
if hay[i:i+len(needle)] == needle {
return true
}
}
return false
})()
}
// TestTranscodeReal actually runs ffmpeg if present; skips otherwise.
func TestTranscodeReal(t *testing.T) {
if _, err := exec.LookPath("ffmpeg"); err != nil {
t.Skip("ffmpeg not installed")
}
dir := t.TempDir()
src := filepath.Join(dir, "s.flac")
// generate a 1s sine flac
cmd := exec.Command("ffmpeg", "-y", "-hide_banner", "-loglevel", "error",
"-f", "lavfi", "-i", "sine=frequency=440:duration=1", "-c:a", "flac", src)
if err := cmd.Run(); err != nil {
t.Fatalf("fixture gen: %v", err)
}
dst := filepath.Join(dir, "s.mp3")
if err := Transcode(src, dst, "128k", "Test", "Station"); err != nil {
t.Fatalf("Transcode: %v", err)
}
st, err := os.Stat(dst)
if err != nil || st.Size() == 0 {
t.Fatal("mp3 not produced")
}
}