Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

tool_test.go 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. // Copyright 2020 The Gitea 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 base
  5. import (
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestEncodeMD5(t *testing.T) {
  10. assert.Equal(t,
  11. "3858f62230ac3c915f300c664312c63f",
  12. EncodeMD5("foobar"),
  13. )
  14. }
  15. func TestEncodeSha1(t *testing.T) {
  16. assert.Equal(t,
  17. "8843d7f92416211de9ebb963ff4ce28125932878",
  18. EncodeSha1("foobar"),
  19. )
  20. }
  21. func TestEncodeSha256(t *testing.T) {
  22. assert.Equal(t,
  23. "c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2",
  24. EncodeSha256("foobar"),
  25. )
  26. }
  27. func TestShortSha(t *testing.T) {
  28. assert.Equal(t, "veryverylo", ShortSha("veryverylong"))
  29. }
  30. func TestBasicAuthDecode(t *testing.T) {
  31. _, _, err := BasicAuthDecode("?")
  32. assert.Equal(t, "illegal base64 data at input byte 0", err.Error())
  33. user, pass, err := BasicAuthDecode("Zm9vOmJhcg==")
  34. assert.NoError(t, err)
  35. assert.Equal(t, "foo", user)
  36. assert.Equal(t, "bar", pass)
  37. _, _, err = BasicAuthDecode("aW52YWxpZA==")
  38. assert.Error(t, err)
  39. _, _, err = BasicAuthDecode("invalid")
  40. assert.Error(t, err)
  41. }
  42. func TestBasicAuthEncode(t *testing.T) {
  43. assert.Equal(t, "Zm9vOmJhcg==", BasicAuthEncode("foo", "bar"))
  44. }
  45. // TODO: Test PBKDF2()
  46. // TODO: Test VerifyTimeLimitCode()
  47. // TODO: Test CreateTimeLimitCode()
  48. func TestFileSize(t *testing.T) {
  49. var size int64 = 512
  50. assert.Equal(t, "512 B", FileSize(size))
  51. size *= 1024
  52. assert.Equal(t, "512 KiB", FileSize(size))
  53. size *= 1024
  54. assert.Equal(t, "512 MiB", FileSize(size))
  55. size *= 1024
  56. assert.Equal(t, "512 GiB", FileSize(size))
  57. size *= 1024
  58. assert.Equal(t, "512 TiB", FileSize(size))
  59. size *= 1024
  60. assert.Equal(t, "512 PiB", FileSize(size))
  61. size *= 4
  62. assert.Equal(t, "2.0 EiB", FileSize(size))
  63. }
  64. func TestSubtract(t *testing.T) {
  65. toFloat64 := func(n interface{}) float64 {
  66. switch v := n.(type) {
  67. case int:
  68. return float64(v)
  69. case int8:
  70. return float64(v)
  71. case int16:
  72. return float64(v)
  73. case int32:
  74. return float64(v)
  75. case int64:
  76. return float64(v)
  77. case float32:
  78. return float64(v)
  79. case float64:
  80. return v
  81. default:
  82. return 0.0
  83. }
  84. }
  85. values := []interface{}{
  86. int(-3),
  87. int8(14),
  88. int16(81),
  89. int32(-156),
  90. int64(1528),
  91. float32(3.5),
  92. float64(-15.348),
  93. }
  94. for _, left := range values {
  95. for _, right := range values {
  96. expected := toFloat64(left) - toFloat64(right)
  97. sub := Subtract(left, right)
  98. assert.InDelta(t, expected, sub, 1e-3)
  99. }
  100. }
  101. }
  102. func TestEllipsisString(t *testing.T) {
  103. assert.Equal(t, "...", EllipsisString("foobar", 0))
  104. assert.Equal(t, "...", EllipsisString("foobar", 1))
  105. assert.Equal(t, "...", EllipsisString("foobar", 2))
  106. assert.Equal(t, "...", EllipsisString("foobar", 3))
  107. assert.Equal(t, "f...", EllipsisString("foobar", 4))
  108. assert.Equal(t, "fo...", EllipsisString("foobar", 5))
  109. assert.Equal(t, "foobar", EllipsisString("foobar", 6))
  110. assert.Equal(t, "foobar", EllipsisString("foobar", 10))
  111. }
  112. func TestTruncateString(t *testing.T) {
  113. assert.Equal(t, "", TruncateString("foobar", 0))
  114. assert.Equal(t, "f", TruncateString("foobar", 1))
  115. assert.Equal(t, "fo", TruncateString("foobar", 2))
  116. assert.Equal(t, "foo", TruncateString("foobar", 3))
  117. assert.Equal(t, "foob", TruncateString("foobar", 4))
  118. assert.Equal(t, "fooba", TruncateString("foobar", 5))
  119. assert.Equal(t, "foobar", TruncateString("foobar", 6))
  120. assert.Equal(t, "foobar", TruncateString("foobar", 7))
  121. }
  122. func TestStringsToInt64s(t *testing.T) {
  123. testSuccess := func(input []string, expected []int64) {
  124. result, err := StringsToInt64s(input)
  125. assert.NoError(t, err)
  126. assert.Equal(t, expected, result)
  127. }
  128. testSuccess([]string{}, []int64{})
  129. testSuccess([]string{"-1234"}, []int64{-1234})
  130. testSuccess([]string{"1", "4", "16", "64", "256"},
  131. []int64{1, 4, 16, 64, 256})
  132. _, err := StringsToInt64s([]string{"-1", "a", "$"})
  133. assert.Error(t, err)
  134. }
  135. func TestInt64sToStrings(t *testing.T) {
  136. assert.Equal(t, []string{}, Int64sToStrings([]int64{}))
  137. assert.Equal(t,
  138. []string{"1", "4", "16", "64", "256"},
  139. Int64sToStrings([]int64{1, 4, 16, 64, 256}),
  140. )
  141. }
  142. func TestInt64sToMap(t *testing.T) {
  143. assert.Equal(t, map[int64]bool{}, Int64sToMap([]int64{}))
  144. assert.Equal(t,
  145. map[int64]bool{1: true, 4: true, 16: true},
  146. Int64sToMap([]int64{1, 4, 16}),
  147. )
  148. }
  149. func TestIsLetter(t *testing.T) {
  150. assert.True(t, IsLetter('a'))
  151. assert.True(t, IsLetter('e'))
  152. assert.True(t, IsLetter('q'))
  153. assert.True(t, IsLetter('z'))
  154. assert.True(t, IsLetter('A'))
  155. assert.True(t, IsLetter('E'))
  156. assert.True(t, IsLetter('Q'))
  157. assert.True(t, IsLetter('Z'))
  158. assert.True(t, IsLetter('_'))
  159. assert.False(t, IsLetter('-'))
  160. assert.False(t, IsLetter('1'))
  161. assert.False(t, IsLetter('$'))
  162. }
  163. func TestDetectContentTypeLongerThanSniffLen(t *testing.T) {
  164. // Pre-condition: Shorter than sniffLen detects SVG.
  165. assert.Equal(t, "image/svg+xml", DetectContentType([]byte(`<!-- Comment --><svg></svg>`)))
  166. // Longer than sniffLen detects something else.
  167. assert.Equal(t, "text/plain; charset=utf-8", DetectContentType([]byte(`<!--
  168. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  169. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  170. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  171. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  172. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  173. Comment Comment Comment Comment Comment Comment Comment Comment Comment Comment
  174. Comment Comment Comment --><svg></svg>`)))
  175. }
  176. func TestIsTextFile(t *testing.T) {
  177. assert.True(t, IsTextFile([]byte{}))
  178. assert.True(t, IsTextFile([]byte("lorem ipsum")))
  179. }
  180. func TestIsSVGImageFile(t *testing.T) {
  181. assert.True(t, IsSVGImageFile([]byte("<svg></svg>")))
  182. assert.True(t, IsSVGImageFile([]byte(" <svg></svg>")))
  183. assert.True(t, IsSVGImageFile([]byte(`<svg width="100"></svg>`)))
  184. assert.True(t, IsSVGImageFile([]byte("<svg/>")))
  185. assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?><svg></svg>`)))
  186. assert.True(t, IsSVGImageFile([]byte(`<!-- Comment -->
  187. <svg></svg>`)))
  188. assert.True(t, IsSVGImageFile([]byte(`<!-- Multiple -->
  189. <!-- Comments -->
  190. <svg></svg>`)))
  191. assert.True(t, IsSVGImageFile([]byte(`<!-- Multiline
  192. Comment -->
  193. <svg></svg>`)))
  194. assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
  195. <!-- Comment -->
  196. <svg></svg>`)))
  197. assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
  198. <!-- Multiple -->
  199. <!-- Comments -->
  200. <svg></svg>`)))
  201. assert.True(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
  202. <!-- Multline
  203. Comment -->
  204. <svg></svg>`)))
  205. assert.False(t, IsSVGImageFile([]byte{}))
  206. assert.False(t, IsSVGImageFile([]byte("svg")))
  207. assert.False(t, IsSVGImageFile([]byte("<svgfoo></svgfoo>")))
  208. assert.False(t, IsSVGImageFile([]byte("text<svg></svg>")))
  209. assert.False(t, IsSVGImageFile([]byte("<html><body><svg></svg></body></html>")))
  210. assert.False(t, IsSVGImageFile([]byte(`<script>"<svg></svg>"</script>`)))
  211. assert.False(t, IsSVGImageFile([]byte(`<!-- <svg></svg> inside comment -->
  212. <foo></foo>`)))
  213. assert.False(t, IsSVGImageFile([]byte(`<?xml version="1.0" encoding="UTF-8"?>
  214. <!-- <svg></svg> inside comment -->
  215. <foo></foo>`)))
  216. }
  217. func TestFormatNumberSI(t *testing.T) {
  218. assert.Equal(t, "125", FormatNumberSI(int(125)))
  219. assert.Equal(t, "1.3k", FormatNumberSI(int64(1317)))
  220. assert.Equal(t, "21.3M", FormatNumberSI(21317675))
  221. assert.Equal(t, "45.7G", FormatNumberSI(45721317675))
  222. assert.Equal(t, "", FormatNumberSI("test"))
  223. }
  224. // TODO: IsImageFile(), currently no idea how to test
  225. // TODO: IsPDFFile(), currently no idea how to test