diff --git a/pkg/id/id.go b/pkg/id/id.go index 2f3a9adda1b3ad0cccd15db8f14881d22533fb24..b9e579e33d63468e3d7830b5b127d1a0e81411c2 100644 --- a/pkg/id/id.go +++ b/pkg/id/id.go @@ -45,7 +45,7 @@ func ValidateName(name string) (string, error) { if trimmedName == "" { return trimmedName, ErrEmptyName } - if len(trimmedName) > MaxLengthName { + if len([]rune(trimmedName)) > MaxLengthName { return trimmedName, ErrLongName } return trimmedName, nil diff --git a/pkg/id/id_test.go b/pkg/id/id_test.go index f778e3a9d70b1711d05e983fcc2ac0c43bfd61ff..7e40efd02f07fe9db4bdda2b692577b5007199be 100644 --- a/pkg/id/id_test.go +++ b/pkg/id/id_test.go @@ -104,6 +104,18 @@ func TestValidateName(t *testing.T) { "test_1-2", false, }, + { + "Cyrillic name #1", + "1ывлдаывоаждывоажыовалывоалджыварщшуджлкцталиамтвалытм тывжалдыжлдвттлвтмыдытфджтмфвмт", + "1ывлдаывоаждывоажыовалывоалджыварщшуджлкцталиамтвалытм тывжалдыжлдвттлвтмыдытфджтмфвмт", + false, + }, + { + "Cyrillic name #2", + "Р РёРјСЃРєРёР№ император Константин I Великий РїРѕ достоинству оценил выгодное местоположение РїСЂРёРјРѕСЂСЃРєРѕРіРѕ Византия, расположенного РЅР° стыке Евро", + "Р РёРјСЃРєРёР№ император Константин I Великий РїРѕ достоинству оценил выгодное местоположение РїСЂРёРјРѕСЂСЃРєРѕРіРѕ Византия, расположенного РЅР° стыке Евро", + false, + }, { "Trimmed name #1", " test_1-3 ", @@ -117,11 +129,17 @@ func TestValidateName(t *testing.T) { false, }, { - "Fail, name to long", + "Fail, name to long #1", "ChKRLdvWi0wYYPazuBXrIRtNFy96qGrhBDkuKQNd6N2DPV86IGdXVkeTjWj7qezKreIFUp9IUn03A8WJTTORHkgXAvkPuDVM8tVMcnHbR2hznooJ3gGUsXpn4uXo2QhsviHPyUKmE10GnkCOv9FgAMILNoFVHnIiSHI3cjWlGJglpS9YAMXFB1phOIRF5yol3jmPE7EeU1uZPUw9C2PChuksGsOuJQov07Zom0b13r6wOJv8PZVa4IKmjDDLGKlq1", "ChKRLdvWi0wYYPazuBXrIRtNFy96qGrhBDkuKQNd6N2DPV86IGdXVkeTjWj7qezKreIFUp9IUn03A8WJTTORHkgXAvkPuDVM8tVMcnHbR2hznooJ3gGUsXpn4uXo2QhsviHPyUKmE10GnkCOv9FgAMILNoFVHnIiSHI3cjWlGJglpS9YAMXFB1phOIRF5yol3jmPE7EeU1uZPUw9C2PChuksGsOuJQov07Zom0b13r6wOJv8PZVa4IKmjDDLGKlq1", true, }, + { + "Fail, name to long #2", + "Рдентификаторы, различающиеся только регистром Р±СѓРєРІ, являются различными. Р’ языке существует СЂСЏРґ соглашений РѕР± использовании заглавных Рё строчных Р±СѓРєРІ. Р’ частности, РІ именах пакетов используются только строчные Р±СѓРєРІС‹. Р’СЃРµ ключевые слова Go пишутся РІ нижнем регистре. Переменные, начинающиеся СЃ заглавных Р±СѓРєРІ, являются экспортируемыми (public), Р° начинающиеся СЃРѕ строчных Р±СѓРєРІ — неэкспортируемыми (private).", + "Рдентификаторы, различающиеся только регистром Р±СѓРєРІ, являются различными. Р’ языке существует СЂСЏРґ соглашений РѕР± использовании заглавных Рё строчных Р±СѓРєРІ. Р’ частности, РІ именах пакетов используются только строчные Р±СѓРєРІС‹. Р’СЃРµ ключевые слова Go пишутся РІ нижнем регистре. Переменные, начинающиеся СЃ заглавных Р±СѓРєРІ, являются экспортируемыми (public), Р° начинающиеся СЃРѕ строчных Р±СѓРєРІ — неэкспортируемыми (private).", + true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {