github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/fs/dirtree/dirtree_test.go (about)

     1  package dirtree
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/rclone/rclone/fstest/mockdir"
     7  	"github.com/rclone/rclone/fstest/mockobject"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestNew(t *testing.T) {
    13  	dt := New()
    14  	assert.Equal(t, "", dt.String())
    15  }
    16  
    17  func TestParentDir(t *testing.T) {
    18  	assert.Equal(t, "root/parent", parentDir("root/parent/file"))
    19  	assert.Equal(t, "parent", parentDir("parent/file"))
    20  	assert.Equal(t, "", parentDir("parent"))
    21  	assert.Equal(t, "", parentDir(""))
    22  }
    23  
    24  func TestDirTreeAdd(t *testing.T) {
    25  	dt := New()
    26  	o := mockobject.New("potato")
    27  	dt.Add(o)
    28  	assert.Equal(t, `/
    29    potato
    30  `, dt.String())
    31  	o = mockobject.New("dir/subdir/sausage")
    32  	dt.Add(o)
    33  	assert.Equal(t, `/
    34    potato
    35  dir/subdir/
    36    sausage
    37  `, dt.String())
    38  }
    39  
    40  func TestDirTreeAddDir(t *testing.T) {
    41  	dt := New()
    42  	d := mockdir.New("potato")
    43  	dt.Add(d)
    44  	assert.Equal(t, `/
    45    potato/
    46  `, dt.String())
    47  	d = mockdir.New("dir/subdir/sausage")
    48  	dt.AddDir(d)
    49  	assert.Equal(t, `/
    50    potato/
    51  dir/subdir/
    52    sausage/
    53  dir/subdir/sausage/
    54  `, dt.String())
    55  }
    56  
    57  func TestDirTreeAddEntry(t *testing.T) {
    58  	dt := New()
    59  
    60  	d := mockdir.New("dir/subdir/sausagedir")
    61  	dt.AddEntry(d)
    62  	o := mockobject.New("dir/subdir2/sausage2")
    63  	dt.AddEntry(o)
    64  
    65  	assert.Equal(t, `/
    66    dir/
    67  dir/
    68    subdir/
    69    subdir2/
    70  dir/subdir/
    71    sausagedir/
    72  dir/subdir/sausagedir/
    73  dir/subdir2/
    74    sausage2
    75  `, dt.String())
    76  }
    77  
    78  func TestDirTreeFind(t *testing.T) {
    79  	dt := New()
    80  
    81  	parent, foundObj := dt.Find("dir/subdir/sausage")
    82  	assert.Equal(t, "dir/subdir", parent)
    83  	assert.Nil(t, foundObj)
    84  
    85  	o := mockobject.New("dir/subdir/sausage")
    86  	dt.Add(o)
    87  
    88  	parent, foundObj = dt.Find("dir/subdir/sausage")
    89  	assert.Equal(t, "dir/subdir", parent)
    90  	assert.Equal(t, o, foundObj)
    91  }
    92  
    93  func TestDirTreeCheckParent(t *testing.T) {
    94  	dt := New()
    95  
    96  	o := mockobject.New("dir/subdir/sausage")
    97  	dt.Add(o)
    98  
    99  	assert.Equal(t, `dir/subdir/
   100    sausage
   101  `, dt.String())
   102  
   103  	dt.CheckParent("", "dir/subdir")
   104  
   105  	assert.Equal(t, `/
   106    dir/
   107  dir/
   108    subdir/
   109  dir/subdir/
   110    sausage
   111  `, dt.String())
   112  
   113  }
   114  
   115  func TestDirTreeCheckParents(t *testing.T) {
   116  	dt := New()
   117  
   118  	dt.Add(mockobject.New("dir/subdir/sausage"))
   119  	dt.Add(mockobject.New("dir/subdir2/sausage2"))
   120  
   121  	dt.CheckParents("")
   122  	dt.Sort() // sort since the exact order of adding parents is not defined
   123  
   124  	assert.Equal(t, `/
   125    dir/
   126  dir/
   127    subdir/
   128    subdir2/
   129  dir/subdir/
   130    sausage
   131  dir/subdir2/
   132    sausage2
   133  `, dt.String())
   134  }
   135  
   136  func TestDirTreeSort(t *testing.T) {
   137  	dt := New()
   138  
   139  	dt.Add(mockobject.New("dir/subdir/B"))
   140  	dt.Add(mockobject.New("dir/subdir/A"))
   141  
   142  	assert.Equal(t, `dir/subdir/
   143    B
   144    A
   145  `, dt.String())
   146  
   147  	dt.Sort()
   148  
   149  	assert.Equal(t, `dir/subdir/
   150    A
   151    B
   152  `, dt.String())
   153  }
   154  
   155  func TestDirTreeDirs(t *testing.T) {
   156  	dt := New()
   157  
   158  	dt.Add(mockobject.New("dir/subdir/sausage"))
   159  	dt.Add(mockobject.New("dir/subdir2/sausage2"))
   160  
   161  	dt.CheckParents("")
   162  
   163  	assert.Equal(t, []string{
   164  		"",
   165  		"dir",
   166  		"dir/subdir",
   167  		"dir/subdir2",
   168  	}, dt.Dirs())
   169  }
   170  
   171  func TestDirTreePrune(t *testing.T) {
   172  	dt := New()
   173  
   174  	dt.Add(mockobject.New("file"))
   175  	dt.Add(mockobject.New("dir/subdir/sausage"))
   176  	dt.Add(mockobject.New("dir/subdir2/sausage2"))
   177  	dt.Add(mockobject.New("dir/file"))
   178  	dt.Add(mockobject.New("dir2/file"))
   179  
   180  	dt.CheckParents("")
   181  
   182  	err := dt.Prune(map[string]bool{
   183  		"dir": true,
   184  	})
   185  	require.NoError(t, err)
   186  
   187  	assert.Equal(t, `/
   188    file
   189    dir2/
   190  dir2/
   191    file
   192  `, dt.String())
   193  
   194  }