1
0
mirror of https://github.com/rclone/rclone.git synced 2025-12-26 05:03:43 +00:00

lib/transform: refactor and add TimeFormat support

This commit is contained in:
nielash
2025-05-04 05:48:07 -04:00
parent 433ed18e91
commit 7b9f8eca00
17 changed files with 249 additions and 267 deletions

View File

@@ -3,6 +3,7 @@ package transform
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -10,6 +11,12 @@ import (
// sync tests are in fs/sync/sync_transform_test.go to avoid import cycle issues
func newOptions(s ...string) (context.Context, error) {
ctx := context.Background()
err := SetOptions(ctx, s...)
return ctx, err
}
func TestPath(t *testing.T) {
for _, test := range []struct {
path string
@@ -19,10 +26,10 @@ func TestPath(t *testing.T) {
{"toe/toe/toe", "tictactoe/tictactoe/tictactoe"},
{"a/b/c", "tictaca/tictacb/tictacc"},
} {
err := SetOptions(context.Background(), "all,prefix=tac", "all,prefix=tic")
ctx, err := newOptions("all,prefix=tac", "all,prefix=tic")
require.NoError(t, err)
got := Path(test.path, false)
got := Path(ctx, test.path, false)
assert.Equal(t, test.want, got)
}
}
@@ -34,10 +41,10 @@ func TestFileTagOnFile(t *testing.T) {
}{
{"a/b/c.txt", "a/b/1c.txt"},
} {
err := SetOptions(context.Background(), "file,prefix=1")
ctx, err := newOptions("file,prefix=1")
require.NoError(t, err)
got := Path(test.path, false)
got := Path(ctx, test.path, false)
assert.Equal(t, test.want, got)
}
}
@@ -49,10 +56,10 @@ func TestDirTagOnFile(t *testing.T) {
}{
{"a/b/c.txt", "1a/1b/c.txt"},
} {
err := SetOptions(context.Background(), "dir,prefix=1")
ctx, err := newOptions("dir,prefix=1")
require.NoError(t, err)
got := Path(test.path, false)
got := Path(ctx, test.path, false)
assert.Equal(t, test.want, got)
}
}
@@ -64,10 +71,10 @@ func TestAllTag(t *testing.T) {
}{
{"a/b/c.txt", "1a/1b/1c.txt"},
} {
err := SetOptions(context.Background(), "all,prefix=1")
ctx, err := newOptions("all,prefix=1")
require.NoError(t, err)
got := Path(test.path, false)
got := Path(ctx, test.path, false)
assert.Equal(t, test.want, got)
}
}
@@ -79,10 +86,10 @@ func TestFileTagOnDir(t *testing.T) {
}{
{"a/b", "a/b"},
} {
err := SetOptions(context.Background(), "file,prefix=1")
ctx, err := newOptions("file,prefix=1")
require.NoError(t, err)
got := Path(test.path, true)
got := Path(ctx, test.path, true)
assert.Equal(t, test.want, got)
}
}
@@ -94,10 +101,10 @@ func TestDirTagOnDir(t *testing.T) {
}{
{"a/b", "1a/1b"},
} {
err := SetOptions(context.Background(), "dir,prefix=1")
ctx, err := newOptions("dir,prefix=1")
require.NoError(t, err)
got := Path(test.path, true)
got := Path(ctx, test.path, true)
assert.Equal(t, test.want, got)
}
}
@@ -115,16 +122,21 @@ func TestVarious(t *testing.T) {
{"stories/The Quick Brown 🦊 Fox Went to the Café!.txt", "stories/The Quick Brown 🦊 Fox Went to the Café!.txt", []string{"all,nfc"}},
{"stories/The Quick Brown 🦊 Fox Went to the Café!.txt", "stories/The Quick Brown 🦊 Fox Went to the Café!.txt", []string{"all,nfd"}},
{"stories/The Quick Brown 🦊 Fox!.txt", "stories/The Quick Brown Fox!.txt", []string{"all,ascii"}},
{"stories/The Quick Brown 🦊 Fox!.txt", "stories/The+Quick+Brown+%F0%9F%A6%8A+Fox%21.txt", []string{"all,url"}},
{"stories/The Quick Brown Fox!.txt", "stories/The Quick Brown Fox!", []string{"all,trimsuffix=.txt"}},
{"stories/The Quick Brown Fox!.txt", "OLD_stories/OLD_The Quick Brown Fox!.txt", []string{"all,prefix=OLD_"}},
{"stories/The Quick Brown 🦊 Fox Went to the Café!.txt", "stories/The Quick Brown _ Fox Went to the Caf_!.txt", []string{"all,charmap=ISO-8859-7"}},
{"stories/The Quick Brown Fox: A Memoir [draft].txt", "stories/The Quick Brown Fox A Memoir draft.txt", []string{"all,encoder=Colon,SquareBracket"}},
{"stories/The Quick Brown 🦊 Fox Went to the Café!.txt", "stories/The Quick Brown 🦊 Fox", []string{"all,truncate=21"}},
{"stories/The Quick Brown Fox!.txt", "stories/The Quick Brown Fox!.txt", []string{"all,command=echo"}},
{"stories/The Quick Brown Fox!.txt", "stories/The Quick Brown Fox!.txt-" + time.Now().Local().Format("20060102"), []string{"date=-{YYYYMMDD}"}},
{"stories/The Quick Brown Fox!.txt", "stories/The Quick Brown Fox!.txt-" + time.Now().Local().Format("2006-01-02 0304PM"), []string{"date=-{macfriendlytime}"}},
{"stories/The Quick Brown Fox!.txt", "ababababababab/ababab ababababab ababababab ababab!abababab", []string{"all,regex=[\\.\\w]/ab"}},
} {
err := SetOptions(context.Background(), test.flags...)
ctx, err := newOptions(test.flags...)
require.NoError(t, err)
got := Path(test.path, false)
got := Path(ctx, test.path, false)
assert.Equal(t, test.want, got)
}
}