package util import "testing" func TestTruncateString(t *testing.T) { tests := []struct { name string input string max int expected string }{ {"shorter than the limit", "abc", 5, "abc"}, {"exactly at the limit", "abc", 3, "abc"}, {"longer than the limit", "abcdef", 3, "abc"}, {"max of one", "abc", 1, "a"}, {"max of zero", "abc", 0, ""}, {"negative max", "abc", -1, ""}, {"empty string", "", 3, ""}, {"multi-byte characters kept whole", "héllo", 3, "hél"}, {"multi-byte characters below the limit", "héllo", 99, "héllo"}, {"characters outside the basic plane", "a😀b", 2, "a😀"}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got := TruncateString(test.input, test.max) if got != test.expected { t.Errorf("expected %q got %q", test.expected, got) } }) } } func TestTruncateStringCountsCharactersNotBytes(t *testing.T) { // Each of these characters is two bytes long, so a byte-based cut at // three would leave half a character behind. got := TruncateString("äöü", 3) if got != "äöü" { t.Errorf("expected %q got %q", "äöü", got) } }