11package pathlib
22
33import (
4+ "errors"
45 "fmt"
6+ "io"
57 "io/ioutil"
68 "os"
79 "path/filepath"
@@ -21,6 +23,9 @@ type PathSuite struct {
2123}
2224
2325func (p * PathSuite ) SetupTest () {
26+ // We actually can't use the MemMapFs because some of the tests
27+ // are testing symlink behavior. We might want to split these
28+ // tests out to use MemMapFs when possible.
2429 tmpdir , err := ioutil .TempDir ("" , "" )
2530 require .NoError (p .T (), err )
2631 p .tmpdir = NewPath (tmpdir )
@@ -150,6 +155,81 @@ func (p *PathSuite) TestGetLatestEmpty() {
150155 assert .Nil (p .T (), latest )
151156}
152157
158+ func (p * PathSuite ) TestOpen () {
159+ msg := "cubs > cardinals"
160+ file := p .tmpdir .Join ("file.txt" )
161+ require .NoError (p .T (), file .WriteFile ([]byte (msg ), 0o644 ))
162+ fileHandle , err := file .Open ()
163+ require .NoError (p .T (), err )
164+
165+ readBytes := make ([]byte , len (msg )+ 5 )
166+ n , err := fileHandle .Read (readBytes )
167+ p .Equal (len (msg ), n )
168+ p .Equal (msg , string (readBytes [0 :n ]))
169+ }
170+
171+ func (p * PathSuite ) TestOpenFile () {
172+ file := p .tmpdir .Join ("file.txt" )
173+ fileHandle , err := file .OpenFile (os .O_RDWR | os .O_CREATE , 0o644 )
174+ require .NoError (p .T (), err )
175+
176+ msg := "do you play croquet?"
177+ n , err := fileHandle .WriteString (msg )
178+ p .Equal (len (msg ), n )
179+ p .NoError (err )
180+
181+ bytes := make ([]byte , len (msg )+ 5 )
182+ n , err = fileHandle .ReadAt (bytes , 0 )
183+ p .Equal (len (msg ), n )
184+ p .True (errors .Is (err , io .EOF ))
185+ p .Equal (msg , string (bytes [0 :n ]))
186+ }
187+
188+ func (p * PathSuite ) TestDirExists () {
189+ dir1 := p .tmpdir .Join ("subdir" )
190+ exists , err := dir1 .DirExists ()
191+ require .NoError (p .T (), err )
192+ p .False (exists )
193+
194+ require .NoError (p .T (), dir1 .Mkdir (0o755 ))
195+ exists , err = dir1 .DirExists ()
196+ require .NoError (p .T (), err )
197+ p .True (exists )
198+ }
199+
200+ func (p * PathSuite ) TestIsFile () {
201+ file1 := p .tmpdir .Join ("file.txt" )
202+
203+ require .NoError (p .T (), file1 .WriteFile ([]byte ("" ), 0o644 ))
204+ exists , err := file1 .IsFile ()
205+ require .NoError (p .T (), err )
206+ p .True (exists )
207+ }
208+
209+ func (p * PathSuite ) TestIsEmpty () {
210+ file1 := p .tmpdir .Join ("file.txt" )
211+
212+ require .NoError (p .T (), file1 .WriteFile ([]byte ("" ), 0o644 ))
213+ isEmpty , err := file1 .IsEmpty ()
214+ require .NoError (p .T (), err )
215+ p .True (isEmpty )
216+ }
217+
218+ func (p * PathSuite ) TestIsSymlink () {
219+ file1 := p .tmpdir .Join ("file.txt" )
220+ require .NoError (p .T (), file1 .WriteFile ([]byte ("" ), 0o644 ))
221+
222+ symlink := p .tmpdir .Join ("symlink" )
223+ p .NoError (symlink .Symlink (file1 ))
224+ isSymlink , err := symlink .IsSymlink ()
225+ require .NoError (p .T (), err )
226+ p .True (isSymlink )
227+
228+ stat , _ := symlink .Stat ()
229+ p .T ().Logf ("%v" , stat .Mode ())
230+ p .T ().Logf (symlink .Path ())
231+ }
232+
153233func TestPathSuite (t * testing.T ) {
154234 suite .Run (t , new (PathSuite ))
155235}
0 commit comments