@@ -2,6 +2,7 @@ package pathlib
22
33import (
44 "fmt"
5+ "io/ioutil"
56 "reflect"
67 "testing"
78
@@ -29,15 +30,18 @@ type WalkSuiteAll struct {
2930func (w * WalkSuiteAll ) SetupTest () {
3031 var err error
3132
32- w .Fs = afero .NewMemMapFs ()
33- w .root = NewPathAfero ("/" , w .Fs )
33+ tmpdir , err := ioutil .TempDir ("" , "" )
34+ require .NoError (w .T (), err )
35+
36+ w .Fs = afero .NewOsFs ()
37+ w .root = NewPathAfero (tmpdir , w .Fs )
3438 w .walk , err = NewWalk (w .root )
3539 require .NoError (w .T (), err )
3640 w .walk .Opts .Algorithm = w .algorithm
3741}
3842
3943func (w * WalkSuiteAll ) TeardownTest () {
40-
44+ require . NoError ( w . T (), w . root . RemoveAll ())
4145}
4246
4347func (w * WalkSuiteAll ) TestHello () {
@@ -105,6 +109,70 @@ func (w *WalkSuiteAll) TestWalkFuncErr() {
105109 walkFunc .AssertNumberOfCalls (w .T (), "Execute" , 1 )
106110}
107111
112+ func (w * WalkSuiteAll ) TestPassesQuerySpecification () {
113+ file := w .root .Join ("file.txt" )
114+ require .NoError (w .T (), file .WriteFile ([]byte ("hello" ), 0o644 ))
115+
116+ stat , err := file .Stat ()
117+ require .NoError (w .T (), err )
118+
119+ // File tests
120+ w .walk .Opts .VisitFiles = false
121+ passes , err := w .walk .passesQuerySpecification (stat )
122+ require .NoError (w .T (), err )
123+ w .False (passes , "specified to not visit files, but passed anyway" )
124+
125+ w .walk .Opts .VisitFiles = true
126+ passes , err = w .walk .passesQuerySpecification (stat )
127+ require .NoError (w .T (), err )
128+ w .True (passes , "specified to visit files, but didn't pass" )
129+
130+ w .walk .Opts .MinimumFileSize = 100
131+ passes , err = w .walk .passesQuerySpecification (stat )
132+ require .NoError (w .T (), err )
133+ w .False (passes , "specified large file size, but passed anyway" )
134+
135+ w .walk .Opts .MinimumFileSize = 0
136+ passes , err = w .walk .passesQuerySpecification (stat )
137+ require .NoError (w .T (), err )
138+ w .True (passes , "specified smallfile size, but didn't pass" )
139+
140+ // Directory tests
141+ dir := w .root .Join ("subdir" )
142+ require .NoError (w .T (), dir .MkdirAll (0o777 ))
143+
144+ stat , err = dir .Stat ()
145+ require .NoError (w .T (), err )
146+
147+ w .walk .Opts .VisitDirs = false
148+ passes , err = w .walk .passesQuerySpecification (stat )
149+ require .NoError (w .T (), err )
150+ w .False (passes , "specified to not visit directories, but passed anyway" )
151+
152+ w .walk .Opts .VisitDirs = true
153+ passes , err = w .walk .passesQuerySpecification (stat )
154+ require .NoError (w .T (), err )
155+ w .True (passes , "specified to visit directories, but didn't pass" )
156+
157+ // Symlink tests
158+ symlink := w .root .Join ("symlink" )
159+ require .NoError (w .T (), symlink .Symlink (file ))
160+
161+ stat , lstatCalled , err := symlink .Lstat ()
162+ require .NoError (w .T (), err )
163+ require .True (w .T (), lstatCalled )
164+
165+ w .walk .Opts .VisitSymlinks = false
166+ passes , err = w .walk .passesQuerySpecification (stat )
167+ require .NoError (w .T (), err )
168+ w .False (passes , "specified to not visit symlinks, but passed anyway" )
169+
170+ w .walk .Opts .VisitSymlinks = true
171+ passes , err = w .walk .passesQuerySpecification (stat )
172+ require .NoError (w .T (), err )
173+ w .True (passes , "specified to visit symlinks, but didn't pass" )
174+ }
175+
108176func TestWalkSuite (t * testing.T ) {
109177 for _ , algorithm := range []Algorithm {
110178 AlgorithmBasic ,
0 commit comments