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  }