65 lines
2.0 KiB
Go
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 != "<b>Milk & eggs</b>" {
|
|
t.Fatalf("Escape() = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestFitMessageLeavesShortText(t *testing.T) {
|
|
text := "<b>Milk & 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) + "&" + "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)
|
|
}
|
|
}
|