mirror of
https://github.com/rclone/rclone.git
synced 2024-12-21 11:06:55 +08:00
296ceadda6
This also factors the config questions into a state based mechanism so a backend can be configured using the same dialog as rclone config but remotely.
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package fs
|
||
|
||
import (
|
||
"fmt"
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
)
|
||
|
||
func TestStatePush(t *testing.T) {
|
||
assert.Equal(t, "", StatePush(""))
|
||
assert.Equal(t, "", StatePush("", ""))
|
||
assert.Equal(t, "a", StatePush("", "a"))
|
||
assert.Equal(t, "a,1,2,3", StatePush("", "a", "1,2,3"))
|
||
|
||
assert.Equal(t, "potato", StatePush("potato"))
|
||
assert.Equal(t, ",potato", StatePush("potato", ""))
|
||
assert.Equal(t, "a,potato", StatePush("potato", "a"))
|
||
assert.Equal(t, "a,1,2,3,potato", StatePush("potato", "a", "1,2,3"))
|
||
}
|
||
|
||
func TestStatePop(t *testing.T) {
|
||
state, value := StatePop("")
|
||
assert.Equal(t, "", value)
|
||
assert.Equal(t, "", state)
|
||
|
||
state, value = StatePop("a")
|
||
assert.Equal(t, "a", value)
|
||
assert.Equal(t, "", state)
|
||
|
||
state, value = StatePop("a,1,2,3")
|
||
assert.Equal(t, "a", value)
|
||
assert.Equal(t, "1,2,3", state)
|
||
|
||
state, value = StatePop("1,2,3,a")
|
||
assert.Equal(t, "1,2,3", value)
|
||
assert.Equal(t, "a", state)
|
||
}
|
||
|
||
func TestMatchProvider(t *testing.T) {
|
||
for _, test := range []struct {
|
||
config string
|
||
provider string
|
||
want bool
|
||
}{
|
||
{"", "", true},
|
||
{"one", "one", true},
|
||
{"one,two", "two", true},
|
||
{"one,two,three", "two", true},
|
||
{"one", "on", false},
|
||
{"one,two,three", "tw", false},
|
||
{"!one,two,three", "two", false},
|
||
{"!one,two,three", "four", true},
|
||
} {
|
||
what := fmt.Sprintf("%q,%q", test.config, test.provider)
|
||
got := MatchProvider(test.config, test.provider)
|
||
assert.Equal(t, test.want, got, what)
|
||
}
|
||
}
|