github.com/jonchun/pathtype@v0.4.4-0.20210812151037-7f32b73f17bf/os_test.go (about)

     1  package pathtype_test
     2  
     3  import (
     4  	"bytes"
     5  	"io/fs"
     6  	"os"
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  
    11  	pt "github.com/jonchun/pathtype"
    12  )
    13  
    14  func TestExecutable(t *testing.T) {
    15  	t1 := tester{TB: t, Transform: pathToString}
    16  	t1.Expect(os.Executable())
    17  	t1.Result(pt.Executable())
    18  	t1.AssertEquals()
    19  }
    20  
    21  func TestGetwd(t *testing.T) {
    22  	t1 := tester{TB: t, Transform: pathToString}
    23  	t1.Expect(os.Getwd())
    24  	t1.Result(pt.Getwd())
    25  	t1.AssertEquals()
    26  }
    27  
    28  func TestTempDir(t *testing.T) {
    29  	t1 := tester{TB: t, Transform: pathToString}
    30  	t1.Expect(os.TempDir())
    31  	t1.Result(pt.TempDir())
    32  	t1.AssertEquals()
    33  }
    34  
    35  func TestUserCacheDir(t *testing.T) {
    36  	t1 := tester{TB: t, Transform: pathToString}
    37  	t1.Expect(os.UserCacheDir())
    38  	t1.Result(pt.UserCacheDir())
    39  	t1.AssertEquals()
    40  }
    41  
    42  func TestUserConfigDir(t *testing.T) {
    43  	t1 := tester{TB: t, Transform: pathToString}
    44  	t1.Expect(os.UserConfigDir())
    45  	t1.Result(pt.UserConfigDir())
    46  	t1.AssertEquals()
    47  }
    48  
    49  func TestUserHomeDir(t *testing.T) {
    50  	t1 := tester{TB: t, Transform: pathToString}
    51  	t1.Expect(os.UserHomeDir())
    52  	t1.Result(pt.UserHomeDir())
    53  	t1.AssertEquals()
    54  }
    55  
    56  func TestChdir(t *testing.T) {
    57  	oldD, _ := pt.Getwd()
    58  	defer oldD.Chdir()
    59  
    60  	for _, p := range testPaths {
    61  		t1 := tester{TB: t, Transform: pathToString}
    62  		t1.Expect(os.Chdir(string(p)))
    63  		t1.Result(p.Chdir())
    64  		t1.AssertEquals()
    65  	}
    66  }
    67  
    68  func TestChmod(t *testing.T) {
    69  	modes := []fs.FileMode{0644, 0755, 0777}
    70  	d := createFilesInTmp(testFiles)
    71  	defer d.RemoveAll()
    72  	for _, p := range testFiles {
    73  		for _, mode := range modes {
    74  			t1 := tester{TB: t, Transform: pathToString}
    75  			t1.Expect(os.Chmod(string(p), mode))
    76  			t1.Result(p.Chmod(mode))
    77  			t1.AssertEquals()
    78  		}
    79  	}
    80  }
    81  
    82  func TestChown(t *testing.T) {
    83  	d := createFilesInTmp(testFiles)
    84  	defer d.RemoveAll()
    85  
    86  	for _, paths := range [][]path{testPaths, testFiles} {
    87  		for _, p := range paths {
    88  			t1 := tester{TB: t, Transform: pathToString}
    89  			t1.Expect(os.Chown(string(p), os.Geteuid(), os.Getegid()))
    90  			t1.Result(p.Chown(os.Geteuid(), os.Getegid()))
    91  			t1.AssertEquals()
    92  
    93  			t2 := tester{TB: t, Transform: pathToString}
    94  			t2.Expect(os.Chown(string(p), 0, 0))
    95  			t2.Result(p.Chown(0, 0))
    96  			t2.AssertEquals()
    97  		}
    98  	}
    99  }
   100  
   101  func TestChtimes(t *testing.T) {
   102  	d := createFilesInTmp(testFiles)
   103  	defer d.RemoveAll()
   104  
   105  	for _, paths := range [][]path{testPaths, testFiles} {
   106  		for _, p := range paths {
   107  			now := time.Now()
   108  			t1 := tester{TB: t, Transform: pathToString}
   109  			t1.Expect(os.Chtimes(string(p), now, now))
   110  			t1.Result(p.Chtimes(now, now))
   111  			t1.AssertEquals()
   112  		}
   113  	}
   114  }
   115  
   116  func TestCreate(t *testing.T) {
   117  	d, err := path("").MkdirTemp("")
   118  	if err != nil {
   119  		panic(err)
   120  	}
   121  	defer d.RemoveAll()
   122  
   123  	oldD, _ := pt.Getwd()
   124  	defer oldD.Chdir()
   125  
   126  	d.Chdir()
   127  
   128  	for _, paths := range [][]path{testPaths, testFiles} {
   129  		for _, p := range paths {
   130  			t1 := tester{TB: t, Transform: pathToString}
   131  			t1.Expect(os.Create(string(p)))
   132  			t1.Result(p.Create())
   133  			t1.AssertEquals()
   134  		}
   135  	}
   136  }
   137  
   138  func TestCreateTemp(t *testing.T) {
   139  	d, err := path("").MkdirTemp("temp*")
   140  	if err != nil {
   141  		panic(err)
   142  	}
   143  	defer d.RemoveAll()
   144  
   145  	for _, p := range testFiles {
   146  		t1 := tester{TB: t, Transform: pathToString}
   147  		t1.Expect(os.CreateTemp(string(d), string(p)))
   148  		t1.Result(d.CreateTemp(string(p)))
   149  		t1.AssertSimilar()
   150  	}
   151  }
   152  
   153  func TestLchown(t *testing.T) {
   154  	d := createFilesInTmp(testFiles)
   155  	defer d.RemoveAll()
   156  
   157  	for _, paths := range [][]path{testPaths, testFiles} {
   158  		for _, p := range paths {
   159  			t1 := tester{TB: t, Transform: pathToString}
   160  			t1.Expect(os.Lchown(string(p), os.Geteuid(), os.Getegid()))
   161  			t1.Result(p.Lchown(os.Geteuid(), os.Getegid()))
   162  			t1.AssertEquals()
   163  
   164  			t2 := tester{TB: t, Transform: pathToString}
   165  			t2.Expect(os.Lchown(string(p), 0, 0))
   166  			t2.Result(p.Lchown(0, 0))
   167  			t2.AssertEquals()
   168  		}
   169  	}
   170  }
   171  
   172  func TestLink(t *testing.T) {
   173  	d := createFilesInTmp(testFiles)
   174  	defer d.RemoveAll()
   175  	globs, _ := d.Glob("*")
   176  	for _, p := range globs {
   177  		for _, p1 := range testPaths {
   178  			t1 := tester{TB: t, Transform: pathToString}
   179  			t1.Expect(os.Link(string(p), string(p1)))
   180  			p1.Remove()
   181  			t1.Result(p.Link(p1))
   182  			p1.Remove()
   183  			t1.AssertEquals()
   184  		}
   185  	}
   186  }
   187  
   188  func TestLstat(t *testing.T) {
   189  	d := createFilesInTmp(testFiles)
   190  	defer d.RemoveAll()
   191  	for _, p := range testPaths {
   192  		t1 := tester{TB: t, Transform: pathToString}
   193  		t1.Expect(os.Lstat(string(p)))
   194  		t1.Result(p.Lstat())
   195  		t1.AssertEquals()
   196  	}
   197  }
   198  
   199  func TestMkdir(t *testing.T) {
   200  	d, err := path(".").MkdirTemp("")
   201  	if err != nil {
   202  		panic(err)
   203  	}
   204  	defer d.RemoveAll()
   205  
   206  	err = d.Mkdir(0755)
   207  	if err != nil && !strings.Contains(err.Error(), "file exists") {
   208  		t.Errorf("path(\"%v\").Mkdir() failed. error: `%v`", d, err)
   209  	}
   210  	err = d.Remove()
   211  	if err != nil {
   212  		panic(err)
   213  	}
   214  	err = d.Mkdir(0755)
   215  	if err != nil {
   216  		t.Errorf("path(\"%v\").Mkdir() failed. error: `%v`", d, err)
   217  	}
   218  }
   219  
   220  func TestMkdirAll(t *testing.T) {
   221  	d, err := path(".").MkdirTemp("")
   222  	if err != nil {
   223  		panic(err)
   224  	}
   225  	defer d.RemoveAll()
   226  
   227  	err = d.MkdirAll(0755)
   228  	if err != nil && !strings.Contains(err.Error(), "file exists") {
   229  		t.Errorf("path(\"%v\").MkdirAll() failed. error: `%v`", d, err)
   230  	}
   231  	err = d.Remove()
   232  	if err != nil {
   233  		panic(err)
   234  	}
   235  	err = d.MkdirAll(0755)
   236  	if err != nil {
   237  		t.Errorf("path(\"%v\").MkdirAll() failed. error: `%v`", d, err)
   238  	}
   239  }
   240  
   241  func TestMkdirTemp(t *testing.T) {
   242  	a := "."
   243  	d, err := path(a).MkdirTemp("")
   244  	if err != nil {
   245  		t.Errorf("path(\"%v\").MkdirTemp(\"\") failed. error: `%v`", a, err)
   246  	}
   247  	defer d.RemoveAll()
   248  }
   249  
   250  func TestOpen(t *testing.T) {
   251  	d := createFilesInTmp(testFiles)
   252  	defer d.RemoveAll()
   253  	for _, p := range testPaths {
   254  		t1 := tester{TB: t, Transform: pathToString}
   255  		t1.Expect(os.Open(string(p)))
   256  		t1.Result(p.Open())
   257  		t1.AssertEquals()
   258  	}
   259  	for _, p := range testFiles {
   260  		t1 := tester{TB: t, Transform: pathToString}
   261  		t1.Expect(os.Open(string(p)))
   262  		t1.Result(p.Open())
   263  		t1.AssertEquals()
   264  	}
   265  }
   266  
   267  func TestOpenFile(t *testing.T) {
   268  	d := createFilesInTmp(testFiles)
   269  	defer d.RemoveAll()
   270  	for _, p := range testPaths {
   271  		t1 := tester{TB: t, Transform: pathToString}
   272  		t1.Expect(os.OpenFile(string(p), os.O_RDWR, 0))
   273  		t1.Result(p.OpenFile(os.O_RDWR, 0))
   274  		t1.AssertEquals()
   275  	}
   276  	for _, p := range testFiles {
   277  		t1 := tester{TB: t, Transform: pathToString}
   278  		t1.Expect(os.OpenFile(string(p), os.O_RDWR, 0))
   279  		t1.Result(p.OpenFile(os.O_RDWR, 0))
   280  		t1.AssertEquals()
   281  	}
   282  }
   283  
   284  func TestReadlink(t *testing.T) {
   285  	d := createFilesInTmp(testFiles)
   286  	defer d.RemoveAll()
   287  	for _, p := range testPaths {
   288  		t1 := tester{TB: t, Transform: pathToString}
   289  		t1.Expect(os.Readlink(string(p)))
   290  		t1.Result(p.Readlink())
   291  		t1.AssertEquals()
   292  	}
   293  }
   294  
   295  func TestRemove(t *testing.T) {
   296  	d := createFilesInTmp(testFiles)
   297  	defer d.RemoveAll()
   298  	for _, p := range testFiles {
   299  		t1 := tester{TB: t, Transform: pathToString}
   300  		t1.Expect(os.Remove(string(p)))
   301  		t1.Result(p.Remove())
   302  		t1.AssertEquals()
   303  	}
   304  }
   305  
   306  func TestRemoveAll(t *testing.T) {
   307  	d := createFilesInTmp(testFiles)
   308  	err := d.RemoveAll()
   309  	if err != nil {
   310  		t.Errorf("path(\"%v\").RemoveAll() failed. error: `%v`", d, err)
   311  	}
   312  }
   313  
   314  func TestRename(t *testing.T) {
   315  	d := createFilesInTmp(testFiles)
   316  	defer d.RemoveAll()
   317  	for _, p := range testFiles {
   318  		renameTo := p.Join(path("test"))
   319  		t1 := tester{TB: t, Transform: pathToString}
   320  		t1.Expect(os.Rename(string(p), string(renameTo)))
   321  		t1.Result(p.Rename(renameTo))
   322  		t1.AssertEquals()
   323  	}
   324  }
   325  
   326  func TestStat(t *testing.T) {
   327  	d := createFilesInTmp(testFiles)
   328  	defer d.RemoveAll()
   329  	for _, p := range testFiles {
   330  		t1 := tester{TB: t, Transform: pathToString}
   331  		t1.Expect(os.Stat(string(p)))
   332  		t1.Result(p.Stat())
   333  		t1.AssertEquals()
   334  	}
   335  }
   336  
   337  func TestSymlink(t *testing.T) {
   338  	d := createFilesInTmp(testFiles)
   339  	defer d.RemoveAll()
   340  	globs, _ := d.Glob("*")
   341  	for _, p := range globs {
   342  		for _, p1 := range testFiles {
   343  			t1 := tester{TB: t, Transform: pathToString}
   344  			t1.Expect(os.Symlink(string(p), string(p1)))
   345  			p1.Remove()
   346  			t1.Result(p.Symlink(p1))
   347  			p1.Remove()
   348  			t1.AssertEquals()
   349  		}
   350  	}
   351  }
   352  
   353  func TestTruncate(t *testing.T) {
   354  	d := createFilesInTmp(testFiles)
   355  	defer d.RemoveAll()
   356  	for _, p := range testFiles {
   357  		s, err := p.Stat()
   358  		if err != nil {
   359  			if !strings.Contains(err.Error(), "no such file or directory") {
   360  				t.Error(err)
   361  			}
   362  			continue
   363  		}
   364  		// oldSize := s.Size()
   365  		var truncVal int64 = 1234
   366  		err = p.Truncate(truncVal)
   367  		if err != nil {
   368  			t.Errorf("path(\"%v\").Truncate(\"%v\") errored: %v", p, truncVal, err)
   369  			return
   370  		}
   371  		if s.Size() != truncVal {
   372  			t.Errorf("path(\"%v\").Truncate(\"%v\") did not give expected size. Got %v", p, truncVal, s.Size())
   373  		}
   374  	}
   375  }
   376  
   377  func TestWriteFile(t *testing.T) {
   378  	d, err := path(".").MkdirTemp("")
   379  	if err != nil {
   380  		panic(err)
   381  	}
   382  	defer d.RemoveAll()
   383  	f, err := d.CreateTemp("")
   384  	if err != nil {
   385  		panic(err)
   386  	}
   387  	p := path(f.Name())
   388  	mode := fs.FileMode(0644)
   389  	buf := new(bytes.Buffer)
   390  	buf.Grow(10)
   391  	testString := "123"
   392  	buf.WriteString(testString)
   393  	err = p.WriteFile(buf.Bytes(), mode)
   394  	if err != nil {
   395  		t.Errorf("path(\"%v\").WriteFile(\"%v\", \"%v\") failed. \nerror: %v", p, buf.Bytes(), mode, err)
   396  	}
   397  	f, err = p.Open()
   398  	if err != nil {
   399  		panic(err)
   400  	}
   401  	bSlice := make([]byte, len(testString))
   402  	_, err = f.Read(bSlice)
   403  	if err != nil {
   404  		panic(err)
   405  	}
   406  	if string(bSlice) != testString {
   407  		t.Errorf("path(\"%v\").WriteFile(\"%v\", \"%v\") failed. Got: '%v' Expected: '%v'", p, buf.Bytes(), mode, string(bSlice), testString)
   408  	}
   409  }
   410  
   411  func createFilesInTmp(paths []path) path {
   412  	oldD, _ := pt.Getwd()
   413  	defer oldD.Chdir()
   414  	d, err := path(".").MkdirTemp("")
   415  	if err != nil {
   416  		panic(err)
   417  	}
   418  	d.Chdir()
   419  
   420  	for _, p := range paths {
   421  		p.Create()
   422  	}
   423  	return d
   424  }