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 }