lsf_test.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. package lsf
  2. import (
  3. "bytes"
  4. "context"
  5. "testing"
  6. _ "github.com/rclone/rclone/backend/local"
  7. "github.com/rclone/rclone/fs"
  8. "github.com/rclone/rclone/fs/list"
  9. "github.com/rclone/rclone/fs/operations"
  10. "github.com/rclone/rclone/fstest"
  11. "github.com/stretchr/testify/assert"
  12. "github.com/stretchr/testify/require"
  13. )
  14. func TestDefaultLsf(t *testing.T) {
  15. fstest.Initialise()
  16. buf := new(bytes.Buffer)
  17. f, err := fs.NewFs(context.Background(), "testfiles")
  18. require.NoError(t, err)
  19. err = Lsf(context.Background(), f, buf)
  20. require.NoError(t, err)
  21. assert.Equal(t, `file1
  22. file2
  23. file3
  24. subdir/
  25. `, buf.String())
  26. }
  27. func TestRecurseFlag(t *testing.T) {
  28. fstest.Initialise()
  29. buf := new(bytes.Buffer)
  30. f, err := fs.NewFs(context.Background(), "testfiles")
  31. require.NoError(t, err)
  32. recurse = true
  33. err = Lsf(context.Background(), f, buf)
  34. require.NoError(t, err)
  35. assert.Equal(t, `file1
  36. file2
  37. file3
  38. subdir/
  39. subdir/file1
  40. subdir/file2
  41. subdir/file3
  42. `, buf.String())
  43. recurse = false
  44. }
  45. func TestDirSlashFlag(t *testing.T) {
  46. fstest.Initialise()
  47. buf := new(bytes.Buffer)
  48. f, err := fs.NewFs(context.Background(), "testfiles")
  49. require.NoError(t, err)
  50. dirSlash = true
  51. format = "p"
  52. err = Lsf(context.Background(), f, buf)
  53. require.NoError(t, err)
  54. assert.Equal(t, `file1
  55. file2
  56. file3
  57. subdir/
  58. `, buf.String())
  59. buf = new(bytes.Buffer)
  60. dirSlash = false
  61. err = Lsf(context.Background(), f, buf)
  62. require.NoError(t, err)
  63. assert.Equal(t, `file1
  64. file2
  65. file3
  66. subdir
  67. `, buf.String())
  68. }
  69. func TestFormat(t *testing.T) {
  70. fstest.Initialise()
  71. f, err := fs.NewFs(context.Background(), "testfiles")
  72. require.NoError(t, err)
  73. buf := new(bytes.Buffer)
  74. format = "p"
  75. err = Lsf(context.Background(), f, buf)
  76. require.NoError(t, err)
  77. assert.Equal(t, `file1
  78. file2
  79. file3
  80. subdir
  81. `, buf.String())
  82. buf = new(bytes.Buffer)
  83. format = "s"
  84. err = Lsf(context.Background(), f, buf)
  85. require.NoError(t, err)
  86. assert.Equal(t, `0
  87. 321
  88. 1234
  89. -1
  90. `, buf.String())
  91. buf = new(bytes.Buffer)
  92. format = "hp"
  93. err = Lsf(context.Background(), f, buf)
  94. require.NoError(t, err)
  95. assert.Equal(t, `d41d8cd98f00b204e9800998ecf8427e;file1
  96. 409d6c19451dd39d4a94e42d2ff2c834;file2
  97. 9b4c8a5e36d3be7e2c4b1d75ded8c8a1;file3
  98. ;subdir
  99. `, buf.String())
  100. buf = new(bytes.Buffer)
  101. format = "p"
  102. filesOnly = true
  103. err = Lsf(context.Background(), f, buf)
  104. require.NoError(t, err)
  105. assert.Equal(t, `file1
  106. file2
  107. file3
  108. `, buf.String())
  109. filesOnly = false
  110. buf = new(bytes.Buffer)
  111. format = "p"
  112. dirsOnly = true
  113. err = Lsf(context.Background(), f, buf)
  114. require.NoError(t, err)
  115. assert.Equal(t, `subdir
  116. `, buf.String())
  117. dirsOnly = false
  118. buf = new(bytes.Buffer)
  119. format = "t"
  120. err = Lsf(context.Background(), f, buf)
  121. require.NoError(t, err)
  122. items, _ := list.DirSorted(context.Background(), f, true, "")
  123. var expectedOutput string
  124. for _, item := range items {
  125. expectedOutput += item.ModTime(context.Background()).Format("2006-01-02 15:04:05") + "\n"
  126. }
  127. assert.Equal(t, expectedOutput, buf.String())
  128. buf = new(bytes.Buffer)
  129. format = "sp"
  130. err = Lsf(context.Background(), f, buf)
  131. require.NoError(t, err)
  132. assert.Equal(t, `0;file1
  133. 321;file2
  134. 1234;file3
  135. -1;subdir
  136. `, buf.String())
  137. format = ""
  138. }
  139. func TestSeparator(t *testing.T) {
  140. fstest.Initialise()
  141. f, err := fs.NewFs(context.Background(), "testfiles")
  142. require.NoError(t, err)
  143. format = "ps"
  144. buf := new(bytes.Buffer)
  145. err = Lsf(context.Background(), f, buf)
  146. require.NoError(t, err)
  147. assert.Equal(t, `file1;0
  148. file2;321
  149. file3;1234
  150. subdir;-1
  151. `, buf.String())
  152. separator = "__SEP__"
  153. buf = new(bytes.Buffer)
  154. err = Lsf(context.Background(), f, buf)
  155. require.NoError(t, err)
  156. assert.Equal(t, `file1__SEP__0
  157. file2__SEP__321
  158. file3__SEP__1234
  159. subdir__SEP__-1
  160. `, buf.String())
  161. format = ""
  162. separator = ""
  163. }
  164. func TestWholeLsf(t *testing.T) {
  165. fstest.Initialise()
  166. f, err := fs.NewFs(context.Background(), "testfiles")
  167. require.NoError(t, err)
  168. format = "pst"
  169. separator = "_+_"
  170. recurse = true
  171. dirSlash = true
  172. buf := new(bytes.Buffer)
  173. err = Lsf(context.Background(), f, buf)
  174. require.NoError(t, err)
  175. items, _ := list.DirSorted(context.Background(), f, true, "")
  176. itemsInSubdir, _ := list.DirSorted(context.Background(), f, true, "subdir")
  177. var expectedOutput []string
  178. for _, item := range items {
  179. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format("2006-01-02 15:04:05"))
  180. }
  181. for _, item := range itemsInSubdir {
  182. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format("2006-01-02 15:04:05"))
  183. }
  184. assert.Equal(t, `file1_+_0_+_`+expectedOutput[0]+`
  185. file2_+_321_+_`+expectedOutput[1]+`
  186. file3_+_1234_+_`+expectedOutput[2]+`
  187. subdir/_+_-1_+_`+expectedOutput[3]+`
  188. subdir/file1_+_0_+_`+expectedOutput[4]+`
  189. subdir/file2_+_1_+_`+expectedOutput[5]+`
  190. subdir/file3_+_111_+_`+expectedOutput[6]+`
  191. `, buf.String())
  192. format = ""
  193. separator = ""
  194. recurse = false
  195. dirSlash = false
  196. }
  197. func TestTimeFormat(t *testing.T) {
  198. fstest.Initialise()
  199. f, err := fs.NewFs(context.Background(), "testfiles")
  200. require.NoError(t, err)
  201. format = "pst"
  202. separator = "_+_"
  203. recurse = true
  204. dirSlash = true
  205. timeFormat = "Jan 2, 2006 at 3:04pm (MST)"
  206. buf := new(bytes.Buffer)
  207. err = Lsf(context.Background(), f, buf)
  208. require.NoError(t, err)
  209. items, _ := list.DirSorted(context.Background(), f, true, "")
  210. itemsInSubdir, _ := list.DirSorted(context.Background(), f, true, "subdir")
  211. var expectedOutput []string
  212. for _, item := range items {
  213. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format(timeFormat))
  214. }
  215. for _, item := range itemsInSubdir {
  216. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format(timeFormat))
  217. }
  218. assert.Equal(t, `file1_+_0_+_`+expectedOutput[0]+`
  219. file2_+_321_+_`+expectedOutput[1]+`
  220. file3_+_1234_+_`+expectedOutput[2]+`
  221. subdir/_+_-1_+_`+expectedOutput[3]+`
  222. subdir/file1_+_0_+_`+expectedOutput[4]+`
  223. subdir/file2_+_1_+_`+expectedOutput[5]+`
  224. subdir/file3_+_111_+_`+expectedOutput[6]+`
  225. `, buf.String())
  226. format = ""
  227. separator = ""
  228. recurse = false
  229. dirSlash = false
  230. }
  231. func TestTimeFormatMax(t *testing.T) {
  232. fstest.Initialise()
  233. f, err := fs.NewFs(context.Background(), "testfiles")
  234. require.NoError(t, err)
  235. format = "pst"
  236. separator = "_+_"
  237. recurse = true
  238. dirSlash = true
  239. timeFormat = "max"
  240. precision := operations.FormatForLSFPrecision(f.Precision())
  241. buf := new(bytes.Buffer)
  242. err = Lsf(context.Background(), f, buf)
  243. require.NoError(t, err)
  244. items, _ := list.DirSorted(context.Background(), f, true, "")
  245. itemsInSubdir, _ := list.DirSorted(context.Background(), f, true, "subdir")
  246. var expectedOutput []string
  247. for _, item := range items {
  248. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format(precision))
  249. }
  250. for _, item := range itemsInSubdir {
  251. expectedOutput = append(expectedOutput, item.ModTime(context.Background()).Format(precision))
  252. }
  253. assert.Equal(t, `file1_+_0_+_`+expectedOutput[0]+`
  254. file2_+_321_+_`+expectedOutput[1]+`
  255. file3_+_1234_+_`+expectedOutput[2]+`
  256. subdir/_+_-1_+_`+expectedOutput[3]+`
  257. subdir/file1_+_0_+_`+expectedOutput[4]+`
  258. subdir/file2_+_1_+_`+expectedOutput[5]+`
  259. subdir/file3_+_111_+_`+expectedOutput[6]+`
  260. `, buf.String())
  261. format = ""
  262. separator = ""
  263. recurse = false
  264. dirSlash = false
  265. }