github.com/webx-top/com@v1.2.12/file_test.go (about) 1 package com 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "path/filepath" 8 "sync" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestFileIsCompleted(t *testing.T) { 16 debugFileIsCompleted = true 17 testFile := `./testdata/fileappend/file.txt` 18 MkdirAll(filepath.Dir(testFile), os.ModePerm) 19 file, err := os.Create(testFile) 20 assert.NoError(t, err) 21 wg := sync.WaitGroup{} 22 wg.Add(1) 23 go func() { 24 defer wg.Done() 25 for i := 0; i < 1000; i++ { 26 //time.Sleep(time.Millisecond * 600) 27 file.WriteString(fmt.Sprintf("ABDFFDAFEEFFGEGFAFEFEFAFEAFEFAFEAFGEGAEGAGEGAEGEGA-%d\n", i)) 28 } 29 file.Close() 30 }() 31 fp, err := os.Open(testFile) 32 assert.NoError(t, err) 33 defer fp.Close() 34 ok, err := FileIsCompleted(fp, time.Now()) 35 assert.NoError(t, err) 36 assert.True(t, ok) 37 38 fp.Seek(-5, io.SeekEnd) 39 b := make([]byte, 5) 40 _, err = fp.Read(b) 41 assert.NoError(t, err) 42 assert.Equal(t, "-999\n", string(b)) 43 44 wg.Wait() 45 } 46 47 func TestBaseFileName(t *testing.T) { 48 r := BaseFileName(`abc/dd.txt`) 49 assert.Equal(t, `dd.txt`, r) 50 r = BaseFileName(`abc\dd.txt`) 51 assert.Equal(t, `dd.txt`, r) 52 r = BaseFileName(`abc\dd.txt/`) 53 assert.Equal(t, ``, r) 54 r = BaseFileName(`/`) 55 assert.Equal(t, ``, r) 56 r = BaseFileName(`dd.txt`) 57 assert.Equal(t, `dd.txt`, r) 58 } 59 60 func TestSplitFileDirAndName(t *testing.T) { 61 dir, name := SplitFileDirAndName(`abc/dd.txt`) 62 assert.Equal(t, `abc`, dir) 63 assert.Equal(t, `dd.txt`, name) 64 65 dir, name = SplitFileDirAndName(`dd.txt`) 66 assert.Equal(t, ``, dir) 67 assert.Equal(t, `dd.txt`, name) 68 69 dir, name = SplitFileDirAndName(`abc/`) 70 assert.Equal(t, `abc`, dir) 71 assert.Equal(t, ``, name) 72 73 sep := GetPathSeperator(`dfefe/ffefe`) 74 assert.Equal(t, `/`, sep) 75 sep = GetPathSeperator(`dfefe\ffefe`) 76 assert.Equal(t, `\`, sep) 77 } 78 79 func TestRealPath(t *testing.T) { 80 ppath := RealPath(`/abc/../dd.txt`) 81 assert.Equal(t, `/dd.txt`, ppath) 82 83 ppath = RealPath(`/../dd.txt`) 84 assert.Equal(t, `/dd.txt`, ppath) 85 86 ppath = RealPath(`c:\..\dd.txt`) 87 assert.Equal(t, `c:\dd.txt`, ppath) 88 ppath = RealPath(`c:\\..\\dd.txt`) 89 assert.Equal(t, `c:\dd.txt`, ppath) 90 91 ppath = RealPath(`\\dd.txt`) 92 assert.Equal(t, `c:\dd.txt`, ppath) 93 ppath = RealPath(`a\b\dd.txt`) 94 assert.Equal(t, `c:\a\b\dd.txt`, ppath) 95 ppath = RealPath(`dd.txt`) 96 assert.Equal(t, `dd.txt`, ppath) 97 98 ppath = RealPath(`c:\a\b\c\..`) 99 assert.Equal(t, `c:\a\b`, ppath) 100 }