Files
2026-11-08 03:46:11 +00:00

65 lines
2.0 KiB
Go

package shared
import (
"strings"
"testing"
"unicode/utf8"
)
func TestEscape(t *testing.T) {
if got := Escape(`<b>Milk & eggs</b>`); got != "&lt;b&gt;Milk &amp; eggs&lt;/b&gt;" {
t.Fatalf("Escape() = %q", got)
}
}
func TestFitMessageLeavesShortText(t *testing.T) {
text := "<b>Milk &amp; eggs</b>"
if got := FitMessage(text); got != text {
t.Fatalf("FitMessage() = %q, want unchanged", got)
}
}
func TestFitMessageTruncatesPlainText(t *testing.T) {
got := FitMessage(strings.Repeat("a", TelegramMessageLimit+100))
if utf8.RuneCountInString(got) > TelegramMessageLimit {
t.Fatalf("FitMessage() is %d runes, limit %d",
utf8.RuneCountInString(got), TelegramMessageLimit)
}
if !strings.HasSuffix(got, "…") {
t.Fatal("FitMessage() does not end with an ellipsis")
}
}
func TestFitMessageClosesOpenTags(t *testing.T) {
got := FitMessage("<b>" + strings.Repeat("a", TelegramMessageLimit))
if utf8.RuneCountInString(got) > TelegramMessageLimit {
t.Fatalf("FitMessage() is %d runes, limit %d",
utf8.RuneCountInString(got), TelegramMessageLimit)
}
if !strings.HasSuffix(got, "</b>…") {
t.Fatalf("FitMessage() does not close <b>: %q", got[len(got)-20:])
}
}
func TestFitMessageDoesNotSplitEntity(t *testing.T) {
got := FitMessage(strings.Repeat("a", TelegramMessageLimit-2) + "&amp;" + "tail")
if utf8.RuneCountInString(got) > TelegramMessageLimit {
t.Fatalf("FitMessage() is %d runes, limit %d",
utf8.RuneCountInString(got), TelegramMessageLimit)
}
if strings.Contains(got, "&am…") || strings.HasSuffix(got, "&") {
t.Fatalf("FitMessage() split an entity: %q", got[len(got)-10:])
}
}
func TestFitMessageDoesNotSplitTag(t *testing.T) {
got := FitMessage(strings.Repeat("a", TelegramMessageLimit-3) + "<b>tail</b>")
if strings.HasSuffix(got, "<") || strings.HasSuffix(got, "<b") {
t.Fatalf("FitMessage() split a tag: %q", got[len(got)-10:])
}
if utf8.RuneCountInString(got) > TelegramMessageLimit {
t.Fatalf("FitMessage() is %d runes, limit %d",
utf8.RuneCountInString(got), TelegramMessageLimit)
}
}