Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 line
1.5KB

  1. package icecast
  2. import "testing"
  3. func TestMapStreamTitleToRadioTextSanitizeAndTruncate(t *testing.T) {
  4. got := mapStreamTitleToRadioText(" Artist\t-\nSong \u2603 ", RadioTextOptions{
  5. Enabled: true,
  6. Prefix: "Now: ",
  7. MaxLen: 13,
  8. })
  9. if got != "Now: Artist -" {
  10. t.Fatalf("mapped=%q want %q", got, "Now: Artist -")
  11. }
  12. }
  13. func TestMapStreamTitleToRadioTextDisabledReturnsEmpty(t *testing.T) {
  14. got := mapStreamTitleToRadioText("Artist - Song", RadioTextOptions{Enabled: false})
  15. if got != "" {
  16. t.Fatalf("mapped=%q want empty", got)
  17. }
  18. }
  19. func TestRadioTextRelayOnlyOnChange(t *testing.T) {
  20. calls := 0
  21. last := ""
  22. relay := NewRadioTextRelay(RadioTextOptions{
  23. Enabled: true,
  24. OnlyOnChange: true,
  25. }, "", func(rt string) error {
  26. calls++
  27. last = rt
  28. return nil
  29. })
  30. if err := relay.HandleStreamTitle("Artist - Song"); err != nil {
  31. t.Fatalf("first handle: %v", err)
  32. }
  33. if err := relay.HandleStreamTitle("Artist - Song"); err != nil {
  34. t.Fatalf("second handle: %v", err)
  35. }
  36. if calls != 1 {
  37. t.Fatalf("calls=%d want 1", calls)
  38. }
  39. if last != "Artist - Song" {
  40. t.Fatalf("last=%q want %q", last, "Artist - Song")
  41. }
  42. }
  43. func TestRadioTextRelayInitialSuppressesSameUpdate(t *testing.T) {
  44. calls := 0
  45. relay := NewRadioTextRelay(RadioTextOptions{
  46. Enabled: true,
  47. OnlyOnChange: true,
  48. }, "Station default", func(string) error {
  49. calls++
  50. return nil
  51. })
  52. if err := relay.HandleStreamTitle("Station default"); err != nil {
  53. t.Fatalf("handle: %v", err)
  54. }
  55. if calls != 0 {
  56. t.Fatalf("calls=%d want 0", calls)
  57. }
  58. }