gopkg.in/essentialkaos/ek.v3@v3.5.1/fsutil/fs_test.go (about)

     1  package fsutil
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     6  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"os"
    12  	"sort"
    13  	"testing"
    14  
    15  	check "pkg.re/check.v1"
    16  )
    17  
    18  // ////////////////////////////////////////////////////////////////////////////////// //
    19  
    20  type FSSuite struct{}
    21  
    22  // ////////////////////////////////////////////////////////////////////////////////// //
    23  
    24  func Test(t *testing.T) { check.TestingT(t) }
    25  
    26  // ////////////////////////////////////////////////////////////////////////////////// //
    27  
    28  var _ = check.Suite(&FSSuite{})
    29  
    30  // ////////////////////////////////////////////////////////////////////////////////// //
    31  
    32  func (s *FSSuite) TestList(c *check.C) {
    33  	tmpDir := c.MkDir()
    34  
    35  	os.Mkdir(tmpDir+"/.dir0", 0755)
    36  
    37  	os.Create(tmpDir + "/.file0")
    38  	os.Create(tmpDir + "/file1.mp3")
    39  	os.Create(tmpDir + "/file2.jpg")
    40  
    41  	os.Mkdir(tmpDir+"/dir1", 0755)
    42  	os.Mkdir(tmpDir+"/dir2", 0755)
    43  
    44  	os.Create(tmpDir + "/dir1/file3.mp3")
    45  	os.Create(tmpDir + "/dir2/file4.wav")
    46  
    47  	os.Mkdir(tmpDir+"/dir1/dir3", 0755)
    48  
    49  	listing1 := List(tmpDir, false)
    50  	listing2 := List(tmpDir, true)
    51  	listing3 := ListAll(tmpDir, false)
    52  	listing4 := ListAll(tmpDir, true)
    53  	listing5 := ListAllDirs(tmpDir, false)
    54  	listing6 := ListAllDirs(tmpDir, true)
    55  	listing7 := ListAllFiles(tmpDir, false)
    56  	listing8 := ListAllFiles(tmpDir, true)
    57  	listing9 := ListAllFiles(tmpDir, true, &ListingFilter{MatchPatterns: []string{"*.mp3", "*.wav"}})
    58  	listing10 := ListAllFiles(tmpDir, true, &ListingFilter{NotMatchPatterns: []string{"*.mp3"}})
    59  	listing11 := List(tmpDir, true, &ListingFilter{Perms: "DR"})
    60  	listing12 := List(tmpDir, true, &ListingFilter{NotPerms: "DR"})
    61  
    62  	sort.Strings(listing1)
    63  	sort.Strings(listing2)
    64  	sort.Strings(listing3)
    65  	sort.Strings(listing4)
    66  	sort.Strings(listing5)
    67  	sort.Strings(listing6)
    68  	sort.Strings(listing7)
    69  	sort.Strings(listing8)
    70  	sort.Strings(listing9)
    71  	sort.Strings(listing10)
    72  	sort.Strings(listing11)
    73  	sort.Strings(listing12)
    74  
    75  	c.Assert(
    76  		listing1,
    77  		check.DeepEquals,
    78  		[]string{".dir0", ".file0", "dir1", "dir2", "file1.mp3", "file2.jpg"},
    79  	)
    80  
    81  	c.Assert(
    82  		listing2,
    83  		check.DeepEquals,
    84  		[]string{"dir1", "dir2", "file1.mp3", "file2.jpg"},
    85  	)
    86  
    87  	c.Assert(
    88  		listing3,
    89  		check.DeepEquals,
    90  		[]string{".dir0", ".file0", "dir1", "dir1/dir3", "dir1/file3.mp3", "dir2", "dir2/file4.wav", "file1.mp3", "file2.jpg"},
    91  	)
    92  
    93  	c.Assert(
    94  		listing4,
    95  		check.DeepEquals,
    96  		[]string{"dir1", "dir1/dir3", "dir1/file3.mp3", "dir2", "dir2/file4.wav", "file1.mp3", "file2.jpg"},
    97  	)
    98  
    99  	c.Assert(
   100  		listing5,
   101  		check.DeepEquals,
   102  		[]string{".dir0", "dir1", "dir1/dir3", "dir2"},
   103  	)
   104  
   105  	c.Assert(
   106  		listing6,
   107  		check.DeepEquals,
   108  		[]string{"dir1", "dir1/dir3", "dir2"},
   109  	)
   110  
   111  	c.Assert(
   112  		listing7,
   113  		check.DeepEquals,
   114  		[]string{".file0", "dir1/file3.mp3", "dir2/file4.wav", "file1.mp3", "file2.jpg"},
   115  	)
   116  
   117  	c.Assert(
   118  		listing8,
   119  		check.DeepEquals,
   120  		[]string{"dir1/file3.mp3", "dir2/file4.wav", "file1.mp3", "file2.jpg"},
   121  	)
   122  
   123  	c.Assert(
   124  		listing9,
   125  		check.DeepEquals,
   126  		[]string{"dir1/file3.mp3", "dir2/file4.wav", "file1.mp3"},
   127  	)
   128  
   129  	c.Assert(
   130  		listing10,
   131  		check.DeepEquals,
   132  		[]string{"dir2/file4.wav", "file2.jpg"},
   133  	)
   134  
   135  	c.Assert(
   136  		listing11,
   137  		check.DeepEquals,
   138  		[]string{"dir1", "dir2"},
   139  	)
   140  
   141  	c.Assert(
   142  		listing12,
   143  		check.DeepEquals,
   144  		[]string{"file1.mp3", "file2.jpg"},
   145  	)
   146  }
   147  
   148  func (s *FSSuite) TestProperPath(c *check.C) {
   149  	tmpFile := c.MkDir() + "/test.txt"
   150  
   151  	os.OpenFile(tmpFile, os.O_CREATE, 0644)
   152  
   153  	paths := []string{"/etc/sudoers", "/etc/passwd", tmpFile}
   154  
   155  	c.Assert(ProperPath("DR", paths), check.Equals, "")
   156  	c.Assert(ProperPath("FR", paths), check.Equals, "/etc/passwd")
   157  	c.Assert(ProperPath("FRW", paths), check.Equals, tmpFile)
   158  	c.Assert(ProperPath("FRWS", paths), check.Equals, "")
   159  	c.Assert(ProperPath("F", paths), check.Equals, "/etc/sudoers")
   160  
   161  	os.Remove(tmpFile)
   162  }
   163  
   164  func (s *FSSuite) TestWalker(c *check.C) {
   165  	tmpDir := c.MkDir()
   166  
   167  	os.Chdir(tmpDir)
   168  
   169  	tmpDir, _ = os.Getwd()
   170  
   171  	os.MkdirAll(tmpDir+"/dir1/dir2/dir3/dir4", 0755)
   172  	os.Chdir(tmpDir)
   173  
   174  	c.Assert(Current(), check.Equals, tmpDir)
   175  	c.Assert(Pop(), check.Equals, tmpDir)
   176  
   177  	dirStack = nil
   178  
   179  	c.Assert(Push("dir1"), check.Equals, tmpDir+"/dir1")
   180  	c.Assert(Push("dir9"), check.Equals, "")
   181  	c.Assert(Push("dir2/dir3"), check.Equals, tmpDir+"/dir1/dir2/dir3")
   182  	c.Assert(Push("dir4"), check.Equals, tmpDir+"/dir1/dir2/dir3/dir4")
   183  	c.Assert(Push("dir9"), check.Equals, "")
   184  	c.Assert(Pop(), check.Equals, tmpDir+"/dir1/dir2/dir3")
   185  	c.Assert(Pop(), check.Equals, tmpDir+"/dir1")
   186  	c.Assert(Pop(), check.Equals, tmpDir)
   187  	c.Assert(Pop(), check.Equals, tmpDir)
   188  }