Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

55 wiersze
1.3KB

  1. package decoder
  2. import (
  3. "context"
  4. "errors"
  5. "io"
  6. "testing"
  7. "github.com/jan/fm-rds-tx/internal/ingest"
  8. )
  9. type fakeDecoder struct{ name string }
  10. func (d *fakeDecoder) Name() string { return d.name }
  11. func (d *fakeDecoder) DecodeStream(_ context.Context, _ io.Reader, _ StreamMeta, _ func(ingest.PCMChunk) error) error {
  12. return nil
  13. }
  14. func TestRegistrySelectByContentType(t *testing.T) {
  15. r := NewRegistry()
  16. r.Register("mp3", func() Decoder { return &fakeDecoder{name: "mp3"} })
  17. r.Register("oggvorbis", func() Decoder { return &fakeDecoder{name: "ogg"} })
  18. r.Register("aac", func() Decoder { return &fakeDecoder{name: "aac"} })
  19. tests := []struct {
  20. ct string
  21. want string
  22. }{
  23. {"audio/mpeg", "mp3"},
  24. {"audio/mpeg; charset=utf-8", "mp3"},
  25. {"application/ogg", "ogg"},
  26. {"audio/ogg;codecs=vorbis", "ogg"},
  27. {"audio/aac", "aac"},
  28. {"audio/aacp", "aac"},
  29. }
  30. for _, tt := range tests {
  31. dec, err := r.SelectByContentType(tt.ct)
  32. if err != nil {
  33. t.Fatalf("content-type %s: %v", tt.ct, err)
  34. }
  35. if dec.Name() != tt.want {
  36. t.Fatalf("content-type %s: got %s want %s", tt.ct, dec.Name(), tt.want)
  37. }
  38. }
  39. }
  40. func TestRegistrySelectByContentTypeUnsupported(t *testing.T) {
  41. r := NewRegistry()
  42. _, err := r.SelectByContentType("application/octet-stream")
  43. if !errors.Is(err, ErrUnsupported) {
  44. t.Fatalf("expected ErrUnsupported, got %v", err)
  45. }
  46. }