package shared
import (
"strings"
"testing"
"unicode/utf8"
)
func TestEscape(t *testing.T) {
if got := Escape(`Milk & eggs`); got != "<b>Milk & eggs</b>" {
t.Fatalf("Escape() = %q", got)
}
}
func TestFitMessageLeavesShortText(t *testing.T) {
text := "Milk & eggs"
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("" + 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, "…") {
t.Fatalf("FitMessage() does not close : %q", got[len(got)-20:])
}
}
func TestFitMessageDoesNotSplitEntity(t *testing.T) {
got := FitMessage(strings.Repeat("a", TelegramMessageLimit-2) + "&" + "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) + "tail")
if strings.HasSuffix(got, "<") || strings.HasSuffix(got, " TelegramMessageLimit {
t.Fatalf("FitMessage() is %d runes, limit %d",
utf8.RuneCountInString(got), TelegramMessageLimit)
}
}