package vfscommon import ( "encoding/json" "testing" "github.com/rclone/rclone/fs" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // Check it satisfies the interfaces var ( _ fs.Flagger = (*FileMode)(nil) _ fs.FlaggerNP = FileMode(0) ) func TestFileModeString(t *testing.T) { for _, test := range []struct { in FileMode want string }{ {0, "000"}, {0666, "666"}, {02666, "2666"}, } { got := test.in.String() assert.Equal(t, test.want, got) } } func TestFileModeSet(t *testing.T) { for _, test := range []struct { in string want FileMode err bool }{ {"0", 0, false}, {"0666", 0666, false}, {"666", 0666, false}, {"2666", 02666, false}, {"999", 0, true}, } { got := FileMode(0) err := got.Set(test.in) if test.err { require.Error(t, err, test.in) } else { require.NoError(t, err, test.in) } assert.Equal(t, test.want, got) } } func TestFileModeUnmarshalJSON(t *testing.T) { for _, test := range []struct { in string want FileMode err bool }{ {`"0"`, 0, false}, {`"666"`, 0666, false}, {`"02666"`, 02666, false}, {`"999"`, 0, true}, {`438`, 0666, false}, {`"999"`, 0, true}, } { var ss FileMode err := json.Unmarshal([]byte(test.in), &ss) if test.err { require.Error(t, err, test.in) } else { require.NoError(t, err, test.in) } assert.Equal(t, test.want, ss, test.in) } }