translate_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package main
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. // 验证语言检测:中文→zh-CN,英文→en
  7. func TestDetectLang(t *testing.T) {
  8. cases := []struct {
  9. text string
  10. want string
  11. }{
  12. {"你好世界", "zh-CN"},
  13. {"Hello World", "en"},
  14. {"今天天气很好", "zh-CN"},
  15. {"The quick brown fox", "en"},
  16. {"混合Hello世界", "zh-CN"}, // 含中文即视为中文
  17. }
  18. for _, c := range cases {
  19. if got := detectLang(c.text); got != c.want {
  20. t.Errorf("detectLang(%q) = %q, want %q", c.text, got, c.want)
  21. }
  22. }
  23. }
  24. // 验证 429 限流提示
  25. func TestTranslateQuota(t *testing.T) {
  26. _, err := translateMyMemory("Hello World")
  27. if err == nil {
  28. t.Skip("MyMemory 未限流,跳过(可能已恢复配额)")
  29. }
  30. if !strings.Contains(err.Error(), "额度") {
  31. t.Errorf("限流错误应含「额度」提示,得到: %v", err)
  32. }
  33. }
  34. // 验证限流恢复时间解析
  35. func TestQuotaError(t *testing.T) {
  36. // 带恢复时间
  37. raw := "MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN 00 HOURS 20 MINUTES 16 SECONDS VISIT HTTPS://MYMEMORY.TRANSLATED.NET"
  38. err := quotaError(raw)
  39. if !strings.Contains(err.Error(), "额度") || !strings.Contains(err.Error(), "恢复") {
  40. t.Errorf("应提示恢复时间,得到: %v", err)
  41. }
  42. t.Logf("解析结果: %v", err)
  43. // 不带恢复时间
  44. err2 := quotaError("MYMEMORY WARNING")
  45. if !strings.Contains(err2.Error(), "额度") {
  46. t.Errorf("无恢复时间也应提示额度,得到: %v", err2)
  47. }
  48. }