strutil_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2020 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package strutil
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestToUpperFirst(t *testing.T) {
  10. tests := []struct {
  11. name string
  12. s string
  13. expStr string
  14. }{
  15. {
  16. name: "empty string",
  17. },
  18. {
  19. name: "first letter is a digit",
  20. s: "123 let's go",
  21. expStr: "123 let's go",
  22. },
  23. {
  24. name: "lower to upper",
  25. s: "this is a sentence",
  26. expStr: "This is a sentence",
  27. },
  28. {
  29. name: "already in upper case",
  30. s: "Let's go",
  31. expStr: "Let's go",
  32. },
  33. }
  34. for _, test := range tests {
  35. t.Run(test.name, func(t *testing.T) {
  36. assert.Equal(t, test.expStr, ToUpperFirst(test.s))
  37. })
  38. }
  39. }
  40. func TestRandomChars(t *testing.T) {
  41. cache := make(map[string]bool)
  42. for i := 0; i < 100; i++ {
  43. chars, err := RandomChars(10)
  44. if err != nil {
  45. t.Fatal(err)
  46. }
  47. if cache[chars] {
  48. t.Fatalf("Duplicated chars %q", chars)
  49. }
  50. cache[chars] = true
  51. }
  52. }
  53. func TestEllipsis(t *testing.T) {
  54. tests := []struct {
  55. name string
  56. str string
  57. threshold int
  58. want string
  59. }{
  60. {
  61. name: "empty string and zero threshold",
  62. str: "",
  63. threshold: 0,
  64. want: "",
  65. },
  66. {
  67. name: "smaller length than threshold",
  68. str: "ab",
  69. threshold: 3,
  70. want: "ab",
  71. },
  72. {
  73. name: "same length as threshold",
  74. str: "abc",
  75. threshold: 3,
  76. want: "abc",
  77. },
  78. {
  79. name: "greater length than threshold",
  80. str: "ab",
  81. threshold: 1,
  82. want: "a...",
  83. },
  84. }
  85. for _, test := range tests {
  86. t.Run(test.name, func(t *testing.T) {
  87. got := Ellipsis(test.str, test.threshold)
  88. assert.Equal(t, test.want, got)
  89. })
  90. }
  91. }
  92. func TestTruncate(t *testing.T) {
  93. tests := []struct {
  94. name string
  95. str string
  96. limit int
  97. want string
  98. }{
  99. {
  100. name: "empty string with zero limit",
  101. str: "",
  102. limit: 0,
  103. want: "",
  104. },
  105. {
  106. name: "smaller length than limit",
  107. str: "ab",
  108. limit: 3,
  109. want: "ab",
  110. },
  111. {
  112. name: "same length as limit",
  113. str: "abc",
  114. limit: 3,
  115. want: "abc",
  116. },
  117. {
  118. name: "greater length than limit",
  119. str: "ab",
  120. limit: 1,
  121. want: "a",
  122. },
  123. }
  124. for _, test := range tests {
  125. t.Run(test.name, func(t *testing.T) {
  126. got := Truncate(test.str, test.limit)
  127. assert.Equal(t, test.want, got)
  128. })
  129. }
  130. }