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