package config import ( "os" "path/filepath" "testing" ) func TestDefaultValidate(t *testing.T) { cfg := Default() if err := cfg.Validate(); err != nil { t.Fatalf("default config invalid: %v", err) } } func TestLoadAndValidate(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "config.json") 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 { t.Fatalf("write config: %v", err) } cfg, err := Load(path) if err != nil { t.Fatalf("load config: %v", err) } if cfg.Audio.ToneLeftHz != 900 { t.Fatalf("unexpected left tone: %v", cfg.Audio.ToneLeftHz) } } func TestValidateRejectsBadFrequency(t *testing.T) { cfg := Default() cfg.FM.FrequencyMHz = 200 if err := cfg.Validate(); err == nil { t.Fatal("expected validation error") } } func TestValidateRejectsBadPreEmphasis(t *testing.T) { cfg := Default() cfg.FM.PreEmphasisUS = 150 if err := cfg.Validate(); err == nil { t.Fatal("expected validation error for preEmphasisUS > 100") } } func TestDefaultPreEmphasis(t *testing.T) { cfg := Default() if cfg.FM.PreEmphasisUS != 50 { t.Fatalf("expected default preEmphasisUS=50, got %.0f", cfg.FM.PreEmphasisUS) } } func TestDefaultFMModulation(t *testing.T) { cfg := Default() if !cfg.FM.FMModulationEnabled { t.Fatal("expected FM modulation enabled by default") } if cfg.FM.MaxDeviationHz != 75000 { t.Fatalf("expected default maxDeviationHz=75000, got %.0f", cfg.FM.MaxDeviationHz) } }