Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

63 lines
1.6KB

  1. package config
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. )
  7. func TestDefaultValidate(t *testing.T) {
  8. cfg := Default()
  9. if err := cfg.Validate(); err != nil {
  10. t.Fatalf("default config invalid: %v", err)
  11. }
  12. }
  13. func TestLoadAndValidate(t *testing.T) {
  14. dir := t.TempDir()
  15. path := filepath.Join(dir, "config.json")
  16. if err := os.WriteFile(path, []byte(`{"audio":{"toneLeftHz":900,"toneRightHz":1700,"toneAmplitude":0.3},"fm":{"frequencyMHz":99.9},"backend":{"kind":"file","outputPath":"out.f32"},"control":{"listenAddress":"127.0.0.1:8088"}}`), 0o644); err != nil {
  17. t.Fatalf("write config: %v", err)
  18. }
  19. cfg, err := Load(path)
  20. if err != nil {
  21. t.Fatalf("load config: %v", err)
  22. }
  23. if cfg.Audio.ToneLeftHz != 900 {
  24. t.Fatalf("unexpected left tone: %v", cfg.Audio.ToneLeftHz)
  25. }
  26. }
  27. func TestValidateRejectsBadFrequency(t *testing.T) {
  28. cfg := Default()
  29. cfg.FM.FrequencyMHz = 200
  30. if err := cfg.Validate(); err == nil {
  31. t.Fatal("expected validation error")
  32. }
  33. }
  34. func TestValidateRejectsBadPreEmphasis(t *testing.T) {
  35. cfg := Default()
  36. cfg.FM.PreEmphasisUS = 150
  37. if err := cfg.Validate(); err == nil {
  38. t.Fatal("expected validation error for preEmphasisUS > 100")
  39. }
  40. }
  41. func TestDefaultPreEmphasis(t *testing.T) {
  42. cfg := Default()
  43. if cfg.FM.PreEmphasisUS != 50 {
  44. t.Fatalf("expected default preEmphasisUS=50, got %.0f", cfg.FM.PreEmphasisUS)
  45. }
  46. }
  47. func TestDefaultFMModulation(t *testing.T) {
  48. cfg := Default()
  49. if !cfg.FM.FMModulationEnabled {
  50. t.Fatal("expected FM modulation enabled by default")
  51. }
  52. if cfg.FM.MaxDeviationHz != 75000 {
  53. t.Fatalf("expected default maxDeviationHz=75000, got %.0f", cfg.FM.MaxDeviationHz)
  54. }
  55. }