Files

42 lines
1.1 KiB
Go
Raw Permalink Normal View History

package hotime
import "testing"
func TestTruncateUA_ShortUnchanged(t *testing.T) {
ua := "Mozilla/5.0 (Test)"
if got := truncateUA(ua, 200); got != ua {
t.Fatalf("短串不应被截断: got=%q want=%q", got, ua)
}
}
func TestTruncateUA_LongTruncatedTo200(t *testing.T) {
long := ""
for i := 0; i < 300; i++ {
long += "a"
}
got := truncateUA(long, 200)
if len([]rune(got)) != 200 {
t.Fatalf("截断后长度=%d want 200", len([]rune(got)))
}
if got != long[:200] {
t.Fatalf("ASCII 截断内容不符: got=%q", got)
}
}
func TestTruncateUA_MultiByteNotBroken(t *testing.T) {
// 前 199 个 ASCII + 1 个多字节字符("中"占 3 字节),max=200 时应完整保留该 rune 而非切碎字节
prefix := ""
for i := 0; i < 199; i++ {
prefix += "a"
}
long := prefix + "中" + "extra-should-be-cut"
got := truncateUA(long, 200)
runes := []rune(got)
if len(runes) != 200 {
t.Fatalf("按 rune 截断后应为 200 个字符, got=%d (%q)", len(runes), got)
}
if runes[199] != '中' {
t.Fatalf("第 200 个字符应为完整的 '中',实际=%q", string(runes[199]))
}
}