|
- package mp3
-
- import (
- "bytes"
- "context"
- "errors"
- "os"
- "path/filepath"
- "testing"
-
- "github.com/jan/fm-rds-tx/internal/ingest"
- "github.com/jan/fm-rds-tx/internal/ingest/decoder"
- )
-
- func TestDecodeStream(t *testing.T) {
- tonePath := filepath.Join("testdata", "tone_44k_stereo.mp3")
- data, err := os.ReadFile(tonePath)
- if err != nil {
- t.Fatalf("read fixture: %v", err)
- }
-
- var chunks []ingest.PCMChunk
- d := New()
- err = d.DecodeStream(context.Background(), bytes.NewReader(data), decoder.StreamMeta{
- ContentType: "audio/mpeg",
- SourceID: "mp3-test",
- }, func(c ingest.PCMChunk) error {
- chunks = append(chunks, c)
- return nil
- })
- if err != nil {
- t.Fatalf("decode: %v", err)
- }
- if len(chunks) == 0 {
- t.Fatal("expected chunks")
- }
- if chunks[0].Channels != 2 {
- t.Fatalf("channels=%d want 2", chunks[0].Channels)
- }
- if chunks[0].SampleRateHz != 44100 {
- t.Fatalf("sampleRate=%d want 44100", chunks[0].SampleRateHz)
- }
- if len(chunks[0].Samples) == 0 {
- t.Fatal("expected samples in first chunk")
- }
- }
-
- func TestDecodeStreamNilReader(t *testing.T) {
- err := New().DecodeStream(context.Background(), nil, decoder.StreamMeta{}, func(ingest.PCMChunk) error { return nil })
- if !errors.Is(err, decoder.ErrUnsupported) {
- t.Fatalf("expected unsupported, got %v", err)
- }
- }
-
- func TestDecodeStreamNilEmit(t *testing.T) {
- err := New().DecodeStream(context.Background(), bytes.NewReader([]byte("not-mp3")), decoder.StreamMeta{}, nil)
- if !errors.Is(err, decoder.ErrUnsupported) {
- t.Fatalf("expected unsupported, got %v", err)
- }
- }
|