package handler import ( "strings" "testing" "unicode/utf8" "golang.org/x/text/unicode/norm" ) func TestIsValidHeroName_NFCCombiningY(t *testing.T) { // Й в NFD: и + U+0306; без NFC вторая руна не входит в блок кириллицы и имя отклонялось. raw := "\u0438\u0306a" nfc := norm.NFC.String(strings.TrimSpace(raw)) if nfc != "\u0439a" && utf8.RuneCountInString(nfc) != 2 { t.Fatalf("unexpected NFC: %q (%d runes)", nfc, utf8.RuneCountInString(nfc)) } if !isValidHeroName(nfc) { t.Fatal("expected valid name with й (NFC)") } } func TestIsValidHeroName_runeLengthNotBytes(t *testing.T) { // 9 кириллических букв = 18 байт UTF-8, но 9 символов — должно быть допустимо. name := "Абвгдейкz" if utf8.RuneCountInString(name) != 9 { t.Fatal("test setup") } if len(name) <= 16 { t.Fatal("test needs >16 bytes with <=16 runes") } if !isValidHeroName(name) { t.Fatal("expected valid: length limit is runes, not UTF-8 bytes") } }