126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
package telegram
|
||
|
||
import (
|
||
"testing"
|
||
)
|
||
|
||
func TestTelegramMessageSender_splitMessageByWords(t *testing.T) {
|
||
sender := &TelegramMessageSender{}
|
||
|
||
tests := []struct {
|
||
name string
|
||
text string
|
||
maxLen int
|
||
expected []string
|
||
}{
|
||
{
|
||
name: "Short text should return as is",
|
||
text: "Привет мир",
|
||
maxLen: 25,
|
||
expected: []string{
|
||
"Привет мир",
|
||
},
|
||
},
|
||
{
|
||
name: "Text exactly at limit",
|
||
text: "Это тестовый текст который ровно соответствует лимиту",
|
||
maxLen: 35,
|
||
expected: []string{
|
||
"Это тестовый текст который ровно ",
|
||
"соответствует ",
|
||
"лимиту",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with word boundaries",
|
||
text: "Это очень длинный текст для проверки работы функции разделения сообщения",
|
||
maxLen: 25,
|
||
expected: []string{
|
||
"Это очень длинный текст ",
|
||
"для проверки работы ",
|
||
"функции разделения ",
|
||
"сообщения",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with long words",
|
||
text: "Этот текст содержит оченьдлинноеслово которое не должно быть разбито",
|
||
maxLen: 20,
|
||
expected: []string{
|
||
"Этот текст содержит ",
|
||
"оченьдлинноеслово ",
|
||
"которое не должно ",
|
||
"быть ",
|
||
"разбито",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with multiple spaces",
|
||
text: "Этот текст имеет много пробелов",
|
||
maxLen: 20,
|
||
expected: []string{
|
||
"Этот текст ",
|
||
"имеет много ",
|
||
"пробелов",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with Russian characters and punctuation",
|
||
text: "Привет! Как дела? Это тестовая строка для проверки работы функции.",
|
||
maxLen: 25,
|
||
expected: []string{
|
||
"Привет! Как дела? Это ",
|
||
"тестовая строка для ",
|
||
"проверки работы ",
|
||
"функции.",
|
||
},
|
||
},
|
||
{
|
||
name: "Single word longer than maxLen",
|
||
text: "Некотороедлинноеслово",
|
||
maxLen: 10,
|
||
expected: []string{
|
||
"Некотороед",
|
||
"линноеслов",
|
||
"о",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with mixed Russian and English",
|
||
text: "Привет Hello мир World текст для проверки",
|
||
maxLen: 20,
|
||
expected: []string{
|
||
"Привет Hello мир ",
|
||
"World текст для ",
|
||
"проверки",
|
||
},
|
||
},
|
||
{
|
||
name: "Text with special characters",
|
||
text: "Тест с символами: @#$%^&*()_+-=[]{}|;':\",./<>?",
|
||
maxLen: 25,
|
||
expected: []string{
|
||
"Тест с символами: ",
|
||
"@#$%^&*()_+-=[]{}|;':\",./",
|
||
"<>?",
|
||
},
|
||
},
|
||
}
|
||
|
||
for _, tt := range tests {
|
||
t.Run(tt.name, func(t *testing.T) {
|
||
result := sender.splitMessageByWords(tt.text, tt.maxLen)
|
||
if len(result) != len(tt.expected) {
|
||
t.Errorf("splitMessageByWords() length = %d, want %d", len(result), len(tt.expected))
|
||
return
|
||
}
|
||
|
||
for i, expectedPart := range tt.expected {
|
||
if result[i] != expectedPart {
|
||
t.Errorf("splitMessageByWords() part %d = %q, want %q", i, result[i], expectedPart)
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|