github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/cutoffmode_test.go (about)

     1  package fs
     2  
     3  import (
     4  	"encoding/json"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // Check it satisfies the interfaces
    13  var (
    14  	_ flagger   = (*CutoffMode)(nil)
    15  	_ flaggerNP = CutoffMode(0)
    16  )
    17  
    18  func TestCutoffModeString(t *testing.T) {
    19  	for _, test := range []struct {
    20  		in   CutoffMode
    21  		want string
    22  	}{
    23  		{CutoffModeHard, "HARD"},
    24  		{CutoffModeSoft, "SOFT"},
    25  		{99, "Unknown(99)"},
    26  	} {
    27  		cm := test.in
    28  		got := cm.String()
    29  		assert.Equal(t, test.want, got, test.in)
    30  	}
    31  }
    32  
    33  func TestCutoffModeSet(t *testing.T) {
    34  	for _, test := range []struct {
    35  		in   string
    36  		want CutoffMode
    37  		err  bool
    38  	}{
    39  		{"hard", CutoffModeHard, false},
    40  		{"SOFT", CutoffModeSoft, false},
    41  		{"Cautious", CutoffModeCautious, false},
    42  		{"Potato", 0, true},
    43  	} {
    44  		cm := CutoffMode(0)
    45  		err := cm.Set(test.in)
    46  		if test.err {
    47  			require.Error(t, err, test.in)
    48  		} else {
    49  			require.NoError(t, err, test.in)
    50  		}
    51  		assert.Equal(t, test.want, cm, test.in)
    52  	}
    53  }
    54  
    55  func TestCutoffModeUnmarshalJSON(t *testing.T) {
    56  	for _, test := range []struct {
    57  		in   string
    58  		want CutoffMode
    59  		err  bool
    60  	}{
    61  		{`"hard"`, CutoffModeHard, false},
    62  		{`"SOFT"`, CutoffModeSoft, false},
    63  		{`"Cautious"`, CutoffModeCautious, false},
    64  		{`"Potato"`, 0, true},
    65  		{strconv.Itoa(int(CutoffModeHard)), CutoffModeHard, false},
    66  		{strconv.Itoa(int(CutoffModeSoft)), CutoffModeSoft, false},
    67  		{`99`, 0, true},
    68  		{`-99`, 0, true},
    69  	} {
    70  		var cm CutoffMode
    71  		err := json.Unmarshal([]byte(test.in), &cm)
    72  		if test.err {
    73  			require.Error(t, err, test.in)
    74  		} else {
    75  			require.NoError(t, err, test.in)
    76  		}
    77  		assert.Equal(t, test.want, cm, test.in)
    78  	}
    79  }