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