wcwidth_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package wcwidth
  2. import (
  3. "testing"
  4. "src.elv.sh/pkg/tt"
  5. )
  6. var Args = tt.Args
  7. func TestOf(t *testing.T) {
  8. tt.Test(t, tt.Fn("Of", Of), tt.Table{
  9. Args("\u0301").Rets(0), // Combining acute accent
  10. Args("a").Rets(1),
  11. Args("Ω").Rets(1),
  12. Args("好").Rets(2),
  13. Args("か").Rets(2),
  14. Args("abc").Rets(3),
  15. Args("你好").Rets(4),
  16. })
  17. }
  18. func TestOverride(t *testing.T) {
  19. r := '❱'
  20. oldw := OfRune(r)
  21. w := oldw + 1
  22. Override(r, w)
  23. if OfRune(r) != w {
  24. t.Errorf("Wcwidth(%q) != %d after OverrideWcwidth", r, w)
  25. }
  26. Unoverride(r)
  27. if OfRune(r) != oldw {
  28. t.Errorf("Wcwidth(%q) != %d after UnoverrideWcwidth", r, oldw)
  29. }
  30. }
  31. func TestOverride_NegativeWidthRemovesOverride(t *testing.T) {
  32. Override('x', 2)
  33. Override('x', -1)
  34. if OfRune('x') != 1 {
  35. t.Errorf("Override with negative width did not remove override")
  36. }
  37. }
  38. func TestConcurrentOverride(t *testing.T) {
  39. go Override('x', 2)
  40. _ = OfRune('x')
  41. }
  42. func TestTrim(t *testing.T) {
  43. tt.Test(t, tt.Fn("Trim", Trim), tt.Table{
  44. Args("abc", 1).Rets("a"),
  45. Args("abc", 2).Rets("ab"),
  46. Args("abc", 3).Rets("abc"),
  47. Args("abc", 4).Rets("abc"),
  48. Args("你好", 1).Rets(""),
  49. Args("你好", 2).Rets("你"),
  50. Args("你好", 3).Rets("你"),
  51. Args("你好", 4).Rets("你好"),
  52. Args("你好", 5).Rets("你好"),
  53. })
  54. }
  55. func TestForce(t *testing.T) {
  56. tt.Test(t, tt.Fn("Force", Force), tt.Table{
  57. // Trimming
  58. Args("abc", 2).Rets("ab"),
  59. Args("你好", 2).Rets("你"),
  60. // Padding
  61. Args("abc", 4).Rets("abc "),
  62. Args("你好", 5).Rets("你好 "),
  63. // Trimming and Padding
  64. Args("你好", 3).Rets("你 "),
  65. })
  66. }
  67. func TestTrimEachLine(t *testing.T) {
  68. tt.Test(t, tt.Fn("TrimEachLine", TrimEachLine), tt.Table{
  69. Args("abcdefg\n你好", 3).Rets("abc\n你"),
  70. })
  71. }