|
|
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")
|
|
|
}
|
|
|
}
|