language_test.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package language // import "miniflux.app/v2/internal/reader/language"
  4. import (
  5. "strings"
  6. "testing"
  7. )
  8. func TestNormalize(t *testing.T) {
  9. cases := []struct {
  10. in, want string
  11. }{
  12. {"", ""},
  13. {" ", ""},
  14. {"en", "en"},
  15. {"EN", "en"},
  16. {"en_US", "en-us"},
  17. {"EN-us", "en-us"},
  18. {"pt-BR", "pt-br"},
  19. {" fr-FR ", "fr-fr"},
  20. {"zh-hant-cn-x-private1-private2", "zh-hant-cn-x-private1-private2"},
  21. // Values outside the tag alphabet are rejected, not stripped.
  22. {"en US", ""},
  23. {"en-US, de-DE", ""},
  24. {"en\x00us", ""},
  25. {"en\u202eus", ""},
  26. {"français", ""},
  27. {`"><script>`, ""},
  28. // Non-ASCII input must be rejected even when Unicode case
  29. // folding would map it to ASCII (U+212A Kelvin sign -> "k",
  30. // U+0130 dotted capital I -> "i").
  31. {"KO", ""},
  32. {"İ-en", ""},
  33. // Values longer than 50 characters are rejected.
  34. {strings.Repeat("a", 51), ""},
  35. {"en-" + strings.Repeat("a", 100), ""},
  36. }
  37. for _, c := range cases {
  38. if got := Normalize(c.in); got != c.want {
  39. t.Errorf("Normalize(%q) = %q, want %q", c.in, got, c.want)
  40. }
  41. }
  42. }