package profanity import "testing" func TestHeroNameIsProfane_english(t *testing.T) { if HeroNameIsProfane("Alice") { t.Fatal("expected clean name") } if !HeroNameIsProfane("fuckface") { t.Fatal("expected English profanity") } } func TestHeroNameIsProfane_russianPlain(t *testing.T) { for _, n := range []string{"ХУЙ", "хуй", "ХуЙ", "хуйло", "пиздец", "сука"} { if !HeroNameIsProfane(n) { t.Fatalf("expected profane: %q", n) } } } func TestHeroNameIsProfane_khersonNotBlocked(t *testing.T) { if HeroNameIsProfane("Херсон") { t.Fatal("did not expect city name to be blocked") } } func TestHeroNameIsProfane_mixedLatinCyrillic(t *testing.T) { cases := []string{ "xуй", // лат. x + кирил. уй "хyй", // кирил. х + лат. y + кирил. й "hуй", // лат. h → х "xyи", // лат. xy + кирил. и "cука", // лат. c → с } for _, n := range cases { if !HeroNameIsProfane(n) { t.Fatalf("expected profane (mixed script): %q", n) } } } func TestHeroNameIsProfane_digitHomoglyphs(t *testing.T) { // смешанный ник: кириллица + цифра вместо буквы (3 → з) if !HeroNameIsProfane("пи3да") { t.Fatal("expected 3→з to form пизда") } } func TestHeroNameIsProfane_cyrillicHomoglyphEnglish(t *testing.T) { if !HeroNameIsProfane("fu\u0441k") { // кириллическая «с» t.Fatal("expected spoof latin profanity to be caught") } }