Files

69 lines
1.9 KiB
Go
Raw Permalink Normal View History

2026-05-06 11:05:20 +02:00
package main
import "testing"
func TestNormalizeChannelID(t *testing.T) {
cases := []struct {
in, want string
}{
{"Italia 1", "italia1"},
{"Italia 1.it", "italia1"},
{"italia 1", "italia1"},
{" Italia 1 ", "italia1"},
{"Italia-1", "italia1"},
{"Rai 1", "rai1"},
{"Rai 1.it", "rai1"},
{"ESPN.com", "espn"},
{"Channel 4.uk", "channel4"},
// Quality-marker stripping — open-epg shape vs. playlist shape.
{"Italia 1 HD.it", "italia1"},
{"Rai 1 HD.it", "rai1"},
{"TV8 HD.it", "tv8"},
{"NOVE HD", "nove"},
{"NOVE HD.it", "nove"},
{"20Mediaset HD.it", "20mediaset"},
{"Italia 1 Full HD", "italia1"},
{"Italia 1 4K", "italia1"},
// Channels that legitimately contain "HD" — no stripping unless trailing.
{"HD", "hd"},
{"HD Network", "hdnetwork"},
{"Sky HD Italia", "skyhditalia"},
{"", ""},
{" ", ""},
{".com", ""},
{"Foo.Bar", "foobar"}, // ".bar" is not a known suffix
{"foo.it.something", "fooitsomething"}, // mid-string ".it" is NOT stripped — only trailing suffix
{"Caffè 24", "caffè24"}, // unicode letter survives
}
for _, c := range cases {
if got := normalizeChannelID(c.in); got != c.want {
t.Errorf("normalizeChannelID(%q) = %q, want %q", c.in, got, c.want)
}
}
}
func TestBuildIDMap(t *testing.T) {
ids := []string{"Italia 1", "Rai 1", "Italia 1", "", " "}
m := buildIDMap(ids)
if got, want := m["italia1"], "Italia 1"; got != want {
t.Errorf("italia1 -> %q, want %q", got, want)
}
if got, want := m["rai1"], "Rai 1"; got != want {
t.Errorf("rai1 -> %q, want %q", got, want)
}
if len(m) != 2 {
t.Errorf("len(m) = %d, want 2 (empties dropped, dupes deduped)", len(m))
}
// First occurrence wins for the canonical mapping.
first := buildIDMap([]string{"Italia 1", "italia 1"})
if first["italia1"] != "Italia 1" {
t.Errorf("first-wins broken: got %q", first["italia1"])
}
}