aboutsummaryrefslogtreecommitdiff
path: root/fs/operations/listdirsorted_test.go
diff options
context:
space:
mode:
authorMichael Tews <michael@tews.dev>2026-03-24 15:13:58 +0100
committerMichael Tews <michael@tews.dev>2026-03-31 01:12:58 +0200
commit030cc6e5d9035dc8405bf28d6b3a96367b9a1400 (patch)
tree5e8f2e637431268716db317b422b58f2e6ab3c61 /fs/operations/listdirsorted_test.go
parent4538590b16cd4661d3d946bb98b1f61a28c30d19 (diff)
test: adds integration tests
Diffstat (limited to 'fs/operations/listdirsorted_test.go')
-rw-r--r--fs/operations/listdirsorted_test.go126
1 files changed, 126 insertions, 0 deletions
diff --git a/fs/operations/listdirsorted_test.go b/fs/operations/listdirsorted_test.go
new file mode 100644
index 0000000..4719d6c
--- /dev/null
+++ b/fs/operations/listdirsorted_test.go
@@ -0,0 +1,126 @@
+package operations_test
+
+import (
+ "context"
+ "testing"
+
+ "github.com/rclone/rclone/fs"
+ "github.com/rclone/rclone/fs/filter"
+ "github.com/rclone/rclone/fs/list"
+ "github.com/rclone/rclone/fstest"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// testListDirSorted is integration testing code in fs/list/list.go
+// which can't be tested there due to import loops.
+func testListDirSorted(t *testing.T, listFn func(ctx context.Context, f fs.Fs, includeAll bool, dir string) (entries fs.DirEntries, err error)) {
+ r := fstest.NewRun(t)
+
+ ctx := context.Background()
+ fi := filter.GetConfig(ctx)
+ fi.Opt.MaxSize = 10
+ defer func() {
+ fi.Opt.MaxSize = -1
+ }()
+
+ files := []fstest.Item{
+ r.WriteObject(context.Background(), "a.txt", "hello world", t1),
+ r.WriteObject(context.Background(), "zend.txt", "hello", t1),
+ r.WriteObject(context.Background(), "sub dir/hello world", "hello world", t1),
+ r.WriteObject(context.Background(), "sub dir/hello world2", "hello world", t1),
+ r.WriteObject(context.Background(), "sub dir/ignore dir/.ignore", "-", t1),
+ r.WriteObject(context.Background(), "sub dir/ignore dir/should be ignored", "to ignore", t1),
+ r.WriteObject(context.Background(), "sub dir/sub sub dir/hello world3", "hello world", t1),
+ }
+ r.CheckRemoteItems(t, files...)
+ var items fs.DirEntries
+ var err error
+
+ // Turn the DirEntry into a name, ending with a / if it is a
+ // dir
+ str := func(i int) string {
+ item := items[i]
+ name := item.Remote()
+ switch item.(type) {
+ case fs.Object:
+ case fs.Directory:
+ name += "/"
+ default:
+ t.Fatalf("Unknown type %+v", item)
+ }
+ return name
+ }
+
+ items, err = listFn(context.Background(), r.Fremote, true, "")
+ require.NoError(t, err)
+ require.Len(t, items, 3)
+ assert.Equal(t, "a.txt", str(0))
+ assert.Equal(t, "sub dir/", str(1))
+ assert.Equal(t, "zend.txt", str(2))
+
+ items, err = listFn(context.Background(), r.Fremote, false, "")
+ require.NoError(t, err)
+ require.Len(t, items, 2)
+ assert.Equal(t, "sub dir/", str(0))
+ assert.Equal(t, "zend.txt", str(1))
+
+ items, err = listFn(context.Background(), r.Fremote, true, "sub dir")
+ require.NoError(t, err)
+ require.Len(t, items, 4)
+ assert.Equal(t, "sub dir/hello world", str(0))
+ assert.Equal(t, "sub dir/hello world2", str(1))
+ assert.Equal(t, "sub dir/ignore dir/", str(2))
+ assert.Equal(t, "sub dir/sub sub dir/", str(3))
+
+ items, err = listFn(context.Background(), r.Fremote, false, "sub dir")
+ require.NoError(t, err)
+ require.Len(t, items, 2)
+ assert.Equal(t, "sub dir/ignore dir/", str(0))
+ assert.Equal(t, "sub dir/sub sub dir/", str(1))
+
+ // testing ignore file
+ fi.Opt.ExcludeFile = []string{".ignore"}
+
+ items, err = listFn(context.Background(), r.Fremote, false, "sub dir")
+ require.NoError(t, err)
+ require.Len(t, items, 1)
+ assert.Equal(t, "sub dir/sub sub dir/", str(0))
+
+ items, err = listFn(context.Background(), r.Fremote, false, "sub dir/ignore dir")
+ require.NoError(t, err)
+ require.Len(t, items, 0)
+
+ items, err = listFn(context.Background(), r.Fremote, true, "sub dir/ignore dir")
+ require.NoError(t, err)
+ require.Len(t, items, 2)
+ assert.Equal(t, "sub dir/ignore dir/.ignore", str(0))
+ assert.Equal(t, "sub dir/ignore dir/should be ignored", str(1))
+
+ fi.Opt.ExcludeFile = nil
+ items, err = listFn(context.Background(), r.Fremote, false, "sub dir/ignore dir")
+ require.NoError(t, err)
+ require.Len(t, items, 2)
+ assert.Equal(t, "sub dir/ignore dir/.ignore", str(0))
+ assert.Equal(t, "sub dir/ignore dir/should be ignored", str(1))
+}
+
+// TestListDirSorted is integration testing code in fs/list/list.go
+// which can't be tested there due to import loops.
+func TestListDirSorted(t *testing.T) {
+ testListDirSorted(t, list.DirSorted)
+}
+
+// TestListDirSortedFn is integration testing code in fs/list/list.go
+// which can't be tested there due to import loops.
+func TestListDirSortedFn(t *testing.T) {
+ listFn := func(ctx context.Context, f fs.Fs, includeAll bool, dir string) (entries fs.DirEntries, err error) {
+ callback := func(newEntries fs.DirEntries) error {
+ entries = append(entries, newEntries...)
+ return nil
+ }
+ err = list.DirSortedFn(ctx, f, includeAll, dir, callback, nil)
+ return entries, err
+ }
+ testListDirSorted(t, listFn)
+}