github.com/PandaGoAdmin/utils@v0.0.0-20211208134815-d5461603a00f/file_test.go (about) 1 package kgo 2 3 import ( 4 "fmt" 5 "github.com/stretchr/testify/assert" 6 "os" 7 "strings" 8 "testing" 9 ) 10 11 func TestFile_GetExt(t *testing.T) { 12 var ext string 13 14 ext = KFile.GetExt(fileGo) 15 assert.Equal(t, "go", ext) 16 17 ext = KFile.GetExt(fileGitkee) 18 assert.Equal(t, "gitkeep", ext) 19 20 ext = KFile.GetExt(fileSongs) 21 assert.Equal(t, "txt", ext) 22 23 ext = KFile.GetExt(fileNone) 24 assert.Empty(t, ext) 25 } 26 27 func BenchmarkFile_GetExt(b *testing.B) { 28 b.ResetTimer() 29 for i := 0; i < b.N; i++ { 30 KFile.GetExt(fileMd) 31 } 32 } 33 34 func TestFile_ReadFile(t *testing.T) { 35 var bs []byte 36 var err error 37 38 bs, err = KFile.ReadFile(fileMd) 39 assert.NotEmpty(t, bs) 40 assert.Nil(t, err) 41 42 //不存在的文件 43 bs, err = KFile.ReadFile(fileNone) 44 assert.NotNil(t, err) 45 } 46 47 func BenchmarkFile_ReadFile(b *testing.B) { 48 b.ResetTimer() 49 for i := 0; i < b.N; i++ { 50 _, _ = KFile.ReadFile(fileMd) 51 } 52 } 53 54 func TestFile_ReadInArray(t *testing.T) { 55 var sl []string 56 var err error 57 58 sl, err = KFile.ReadInArray(fileDante) 59 assert.Equal(t, 19568, len(sl)) 60 61 //不存在的文件 62 sl, err = KFile.ReadInArray(fileNone) 63 assert.NotNil(t, err) 64 } 65 66 func BenchmarkFile_ReadInArray(b *testing.B) { 67 b.ResetTimer() 68 for i := 0; i < b.N; i++ { 69 _, _ = KFile.ReadInArray(fileMd) 70 } 71 } 72 73 func TestFile_ReadFirstLine(t *testing.T) { 74 var res []byte 75 76 res = KFile.ReadFirstLine(fileDante) 77 assert.NotEmpty(t, res) 78 79 //不存在的文件 80 res = KFile.ReadFirstLine(fileNone) 81 assert.Empty(t, res) 82 } 83 84 func BenchmarkFile_ReadFirstLine(b *testing.B) { 85 b.ResetTimer() 86 for i := 0; i < b.N; i++ { 87 KFile.ReadFirstLine(fileMd) 88 } 89 } 90 91 func TestFile_ReadLastLine(t *testing.T) { 92 var res []byte 93 94 res = KFile.ReadLastLine(changLog) 95 assert.NotEmpty(t, res) 96 97 //不存在的文件 98 res = KFile.ReadLastLine(fileNone) 99 assert.Empty(t, res) 100 } 101 102 func BenchmarkFile_ReadLastLine(b *testing.B) { 103 b.ResetTimer() 104 for i := 0; i < b.N; i++ { 105 KFile.ReadLastLine(fileMd) 106 } 107 } 108 109 func TestFile_WriteFile(t *testing.T) { 110 var err error 111 112 err = KFile.WriteFile(putfile, bytsHello) 113 assert.Nil(t, err) 114 115 //设置权限 116 err = KFile.WriteFile(putfile, bytsHello, 0777) 117 assert.Nil(t, err) 118 119 //无权限写 120 err = KFile.WriteFile(rootFile1, bytsHello, 0777) 121 if KOS.IsLinux() || KOS.IsMac() { 122 assert.NotNil(t, err) 123 } 124 } 125 126 func BenchmarkFile_WriteFile(b *testing.B) { 127 b.ResetTimer() 128 for i := 0; i < b.N; i++ { 129 filename := fmt.Sprintf("./testdata/file/putfile_%d", i) 130 _ = KFile.WriteFile(filename, bytsHello) 131 } 132 } 133 134 func TestFile_AppendFile(t *testing.T) { 135 var err error 136 137 //创建 138 err = KFile.AppendFile(apndfile, bytsHello) 139 assert.Nil(t, err) 140 141 //追加 142 err = KFile.AppendFile(apndfile, bytsHello) 143 assert.Nil(t, err) 144 145 //空路径 146 err = KFile.AppendFile("", bytsHello) 147 assert.NotNil(t, err) 148 149 //权限不足 150 err = KFile.AppendFile(rootFile1, bytsHello) 151 if KOS.IsLinux() || KOS.IsMac() { 152 assert.NotNil(t, err) 153 } 154 } 155 156 func BenchmarkFile_AppendFile(b *testing.B) { 157 b.ResetTimer() 158 for i := 0; i < b.N; i++ { 159 _ = KFile.AppendFile(apndfile, bytsHello) 160 } 161 } 162 163 func TestFile_GetMime(t *testing.T) { 164 var res string 165 166 res = KFile.GetMime(imgPng, false) 167 assert.NotEmpty(t, res) 168 169 res = KFile.GetMime(fileDante, true) 170 if KOS.IsWindows() { 171 assert.NotEmpty(t, res) 172 } 173 174 //不存在的文件 175 res = KFile.GetMime(fileNone, true) 176 assert.Empty(t, res) 177 } 178 179 func BenchmarkFile_GetMime_Fast(b *testing.B) { 180 b.ResetTimer() 181 for i := 0; i < b.N; i++ { 182 KFile.GetMime(fileMd, true) 183 } 184 } 185 186 func BenchmarkFile_GetMime_NoFast(b *testing.B) { 187 b.ResetTimer() 188 for i := 0; i < b.N; i++ { 189 KFile.GetMime(fileMd, false) 190 } 191 } 192 193 func TestFile_FileSize(t *testing.T) { 194 var res int64 195 196 res = KFile.FileSize(changLog) 197 assert.Greater(t, res, int64(0)) 198 199 //不存在的文件 200 res = KFile.FileSize(fileNone) 201 assert.Equal(t, int64(-1), res) 202 } 203 204 func BenchmarkFile_FileSize(b *testing.B) { 205 b.ResetTimer() 206 for i := 0; i < b.N; i++ { 207 KFile.FileSize(fileMd) 208 } 209 } 210 211 func TestFile_DirSize(t *testing.T) { 212 var res int64 213 214 res = KFile.DirSize(dirCurr) 215 assert.Greater(t, res, int64(0)) 216 217 //不存在的目录 218 res = KFile.DirSize(fileNone) 219 assert.Equal(t, int64(0), res) 220 } 221 222 func BenchmarkFile_DirSize(b *testing.B) { 223 b.ResetTimer() 224 for i := 0; i < b.N; i++ { 225 KFile.DirSize(dirTdat) 226 } 227 } 228 229 func TestFile_IsExist(t *testing.T) { 230 var res bool 231 232 res = KFile.IsExist(changLog) 233 assert.True(t, res) 234 235 res = KFile.IsExist(fileNone) 236 assert.False(t, res) 237 } 238 239 func BenchmarkFile_IsExist(b *testing.B) { 240 b.ResetTimer() 241 for i := 0; i < b.N; i++ { 242 KFile.IsExist(fileMd) 243 } 244 } 245 246 func TestFile_IsReadable(t *testing.T) { 247 var res bool 248 249 res = KFile.IsReadable(dirTdat) 250 assert.True(t, res) 251 252 //不存在的目录 253 res = KFile.IsReadable(fileNone) 254 assert.False(t, res) 255 } 256 257 func BenchmarkFile_IsReadable(b *testing.B) { 258 b.ResetTimer() 259 for i := 0; i < b.N; i++ { 260 KFile.IsReadable(dirTdat) 261 } 262 } 263 264 func TestFile_IsWritable(t *testing.T) { 265 var res bool 266 267 res = KFile.IsWritable(dirTdat) 268 assert.True(t, res) 269 270 //不存在的目录 271 res = KFile.IsWritable(fileNone) 272 assert.False(t, res) 273 } 274 275 func BenchmarkFile_IsWritable(b *testing.B) { 276 b.ResetTimer() 277 for i := 0; i < b.N; i++ { 278 KFile.IsWritable(dirTdat) 279 } 280 } 281 282 func TestFile_IsExecutable(t *testing.T) { 283 var res bool 284 285 res = KFile.IsExecutable(fileNone) 286 assert.False(t, res) 287 } 288 289 func BenchmarkFile_IsExecutable(b *testing.B) { 290 b.ResetTimer() 291 for i := 0; i < b.N; i++ { 292 KFile.IsExecutable(fileMd) 293 } 294 } 295 296 func TestFile_IsLink(t *testing.T) { 297 //创建链接文件 298 if !KFile.IsExist(fileLink) { 299 _ = os.Symlink(filePubPem, fileLink) 300 } 301 302 var res bool 303 304 res = KFile.IsLink(fileLink) 305 assert.True(t, res) 306 307 res = KFile.IsLink(changLog) 308 assert.False(t, res) 309 } 310 311 func BenchmarkFile_IsLink(b *testing.B) { 312 b.ResetTimer() 313 for i := 0; i < b.N; i++ { 314 KFile.IsLink(fileLink) 315 } 316 } 317 318 func TestFile_IsFile(t *testing.T) { 319 tests := []struct { 320 f string 321 t LkkFileType 322 expected bool 323 }{ 324 {"", FILE_TYPE_ANY, false}, 325 {fileNone, FILE_TYPE_ANY, false}, 326 {fileGo, FILE_TYPE_ANY, true}, 327 {fileMd, FILE_TYPE_LINK, false}, 328 {fileLink, FILE_TYPE_LINK, true}, 329 {fileLink, FILE_TYPE_REGULAR, false}, 330 {fileGitkee, FILE_TYPE_REGULAR, true}, 331 {fileLink, FILE_TYPE_COMMON, true}, 332 {imgJpg, FILE_TYPE_COMMON, true}, 333 } 334 for _, test := range tests { 335 actual := KFile.IsFile(test.f, test.t) 336 assert.Equal(t, test.expected, actual) 337 } 338 } 339 340 func BenchmarkFile_IsFile(b *testing.B) { 341 b.ResetTimer() 342 for i := 0; i < b.N; i++ { 343 KFile.IsFile(fileMd, FILE_TYPE_ANY) 344 } 345 } 346 347 func TestFile_IsDir(t *testing.T) { 348 var res bool 349 350 res = KFile.IsDir(fileMd) 351 assert.False(t, res) 352 353 res = KFile.IsDir(fileNone) 354 assert.False(t, res) 355 356 res = KFile.IsDir(dirTdat) 357 assert.True(t, res) 358 } 359 360 func BenchmarkFile_IsDir(b *testing.B) { 361 b.ResetTimer() 362 for i := 0; i < b.N; i++ { 363 KFile.IsDir(dirTdat) 364 } 365 } 366 367 func TestFile_IsBinary(t *testing.T) { 368 var res bool 369 res = KFile.IsBinary(changLog) 370 assert.False(t, res) 371 372 res = KFile.IsBinary(imgPng) 373 assert.True(t, res) 374 } 375 376 func BenchmarkFile_IsBinary(b *testing.B) { 377 b.ResetTimer() 378 for i := 0; i < b.N; i++ { 379 KFile.IsBinary(changLog) 380 } 381 } 382 383 func TestFile_IsImg(t *testing.T) { 384 var res bool 385 386 res = KFile.IsImg(fileMd) 387 assert.False(t, res) 388 389 res = KFile.IsImg(imgSvg) 390 assert.True(t, res) 391 392 res = KFile.IsImg(imgPng) 393 assert.True(t, res) 394 } 395 396 func BenchmarkFile_IsImg(b *testing.B) { 397 b.ResetTimer() 398 for i := 0; i < b.N; i++ { 399 KFile.IsImg(imgPng) 400 } 401 } 402 403 func TestFile_Mkdir(t *testing.T) { 404 var err error 405 406 err = KFile.Mkdir(dirNew, 0777) 407 assert.Nil(t, err) 408 } 409 410 func BenchmarkFile_Mkdir(b *testing.B) { 411 b.ResetTimer() 412 for i := 0; i < b.N; i++ { 413 dname := fmt.Sprintf(dirNew+"/tmp_%d", i) 414 _ = KFile.Mkdir(dname, 0777) 415 } 416 } 417 418 func TestFile_AbsPath(t *testing.T) { 419 var res string 420 421 res = KFile.AbsPath(changLog) 422 assert.NotEqual(t, '.', rune(res[0])) 423 424 res = KFile.AbsPath(fileNone) 425 assert.NotEmpty(t, res) 426 } 427 428 func BenchmarkFile_AbsPath(b *testing.B) { 429 b.ResetTimer() 430 for i := 0; i < b.N; i++ { 431 KFile.AbsPath(changLog) 432 } 433 } 434 435 func TestFile_RealPath(t *testing.T) { 436 var res string 437 438 res = KFile.RealPath(fileMd) 439 assert.NotEmpty(t, res) 440 441 res = KFile.RealPath(fileNone) 442 assert.Empty(t, res) 443 } 444 445 func BenchmarkFile_RealPath(b *testing.B) { 446 b.ResetTimer() 447 for i := 0; i < b.N; i++ { 448 KFile.RealPath(fileMd) 449 } 450 } 451 452 func TestFile_TouchRenameUnlink(t *testing.T) { 453 var res bool 454 var err error 455 456 res = KFile.Touch(touchfile, 2097152) 457 assert.True(t, res) 458 459 err = KFile.Rename(touchfile, renamefile) 460 assert.Nil(t, err) 461 462 err = KFile.Unlink(renamefile) 463 assert.Nil(t, err) 464 } 465 466 func BenchmarkFile_Touch(b *testing.B) { 467 b.ResetTimer() 468 var filename string 469 for i := 0; i < b.N; i++ { 470 filename = fmt.Sprintf(dirTouch+"/zero_%d", i) 471 KFile.Touch(filename, 0) 472 } 473 } 474 475 func BenchmarkFile_Rename(b *testing.B) { 476 b.ResetTimer() 477 var f1, f2 string 478 for i := 0; i < b.N; i++ { 479 f1 = fmt.Sprintf(dirTouch+"/zero_%d", i) 480 f2 = fmt.Sprintf(dirTouch+"/zero_re%d", i) 481 _ = KFile.Rename(f1, f2) 482 } 483 } 484 485 func BenchmarkFile_Unlink(b *testing.B) { 486 b.ResetTimer() 487 var filename string 488 for i := 0; i < b.N; i++ { 489 filename = fmt.Sprintf(dirTouch+"/zero_re%d", i) 490 _ = KFile.Unlink(filename) 491 } 492 } 493 494 func TestFile_CopyFile(t *testing.T) { 495 var res int64 496 var err error 497 498 //忽略已存在的 499 res, err = KFile.CopyFile(imgPng, imgCopy, FILE_COVER_IGNORE) 500 assert.Nil(t, err) 501 502 //覆盖已存在的 503 res, err = KFile.CopyFile(imgPng, imgCopy, FILE_COVER_ALLOW) 504 assert.Greater(t, res, int64(0)) 505 506 //禁止覆盖 507 res, err = KFile.CopyFile(imgPng, imgCopy, FILE_COVER_DENY) 508 assert.NotNil(t, err) 509 510 //源和目标文件相同 511 res, err = KFile.CopyFile(imgPng, imgPng, FILE_COVER_ALLOW) 512 assert.Equal(t, int64(0), res) 513 assert.Nil(t, err) 514 515 //拷贝大文件 516 KFile.Touch(touchfile, 2097152) 517 res, err = KFile.CopyFile(touchfile, copyfile, FILE_COVER_ALLOW) 518 519 //目标为空 520 res, err = KFile.CopyFile(imgPng, "", FILE_COVER_ALLOW) 521 assert.NotNil(t, err) 522 523 //源非正常文件 524 res, err = KFile.CopyFile(".", "", FILE_COVER_ALLOW) 525 assert.NotNil(t, err) 526 } 527 528 func BenchmarkFile_CopyFile(b *testing.B) { 529 b.ResetTimer() 530 var des string 531 for i := 0; i < b.N; i++ { 532 des = fmt.Sprintf(dirCopy+"/diglett_copy_%d.png", i) 533 _, _ = KFile.CopyFile(imgPng, des, FILE_COVER_ALLOW) 534 } 535 } 536 537 func TestFile_FastCopy(t *testing.T) { 538 var res int64 539 var err error 540 541 res, err = KFile.FastCopy(imgJpg, fastcopyfile) 542 assert.Greater(t, res, int64(0)) 543 544 //源文件不存在 545 res, err = KFile.FastCopy(fileNone, fastcopyfile) 546 assert.NotNil(t, err) 547 548 //目标为空 549 res, err = KFile.FastCopy(imgJpg, "") 550 assert.NotNil(t, err) 551 } 552 553 func BenchmarkFile_FastCopy(b *testing.B) { 554 b.ResetTimer() 555 var des string 556 for i := 0; i < b.N; i++ { 557 des = fmt.Sprintf(dirCopy+"/fast_copy_%d", i) 558 _, _ = KFile.FastCopy(imgJpg, des) 559 } 560 } 561 562 func TestFile_CopyLink(t *testing.T) { 563 var err error 564 565 //源和目标相同 566 err = KFile.CopyLink(fileLink, fileLink) 567 assert.Nil(t, err) 568 569 err = KFile.CopyLink(fileLink, copyLink) 570 assert.Nil(t, err) 571 572 //源文件不存在 573 err = KFile.CopyLink(fileNone, copyLink) 574 assert.NotNil(t, err) 575 576 //目标为空 577 err = KFile.CopyLink(fileLink, "") 578 assert.NotNil(t, err) 579 } 580 581 func BenchmarkFile_CopyLink(b *testing.B) { 582 b.ResetTimer() 583 var des string 584 for i := 0; i < b.N; i++ { 585 des = fmt.Sprintf(dirLink+"/lnk_%d.copy", i) 586 _ = KFile.CopyLink(fileLink, des) 587 } 588 } 589 590 func TestFile_CopyDir(t *testing.T) { 591 var res int64 592 var err error 593 594 //忽略已存在的 595 res, err = KFile.CopyDir(dirVendor, dirTdat, FILE_COVER_IGNORE) 596 assert.Nil(t, err) 597 598 //覆盖已存在的 599 res, err = KFile.CopyDir(dirVendor, dirTdat, FILE_COVER_ALLOW) 600 assert.Nil(t, err) 601 602 //禁止覆盖 603 res, err = KFile.CopyDir(dirVendor, dirTdat, FILE_COVER_DENY) 604 assert.Equal(t, int64(0), res) 605 606 //源和目标相同 607 res, err = KFile.CopyDir(dirVendor, dirVendor, FILE_COVER_ALLOW) 608 assert.Equal(t, int64(0), res) 609 610 //目标为空 611 res, err = KFile.CopyDir(dirVendor, "", FILE_COVER_ALLOW) 612 assert.NotNil(t, err) 613 614 //源不是目录 615 res, err = KFile.CopyDir(fileMd, dirTdat, FILE_COVER_ALLOW) 616 assert.NotNil(t, err) 617 } 618 619 func BenchmarkFile_CopyDir(b *testing.B) { 620 b.ResetTimer() 621 var des string 622 for i := 0; i < b.N; i++ { 623 des = fmt.Sprintf(dirCopy+"/copydir_%d", i) 624 _, _ = KFile.CopyDir(dirDoc, des, FILE_COVER_ALLOW) 625 } 626 } 627 628 func TestFile_DelDir(t *testing.T) { 629 var err error 630 var chk bool 631 632 //清空目录 633 err = KFile.DelDir(dirCopy, false) 634 chk = KFile.IsDir(dirCopy) 635 assert.Nil(t, err) 636 assert.True(t, chk) 637 638 //删除目录 639 err = KFile.DelDir(dirNew, true) 640 chk = KFile.IsDir(dirNew) 641 assert.Nil(t, err) 642 assert.False(t, chk) 643 } 644 645 func BenchmarkFile_DelDir(b *testing.B) { 646 b.ResetTimer() 647 var des string 648 for i := 0; i < b.N; i++ { 649 des = fmt.Sprintf(dirCopy+"/copydir_%d", i) 650 _ = KFile.DelDir(des, true) 651 } 652 } 653 654 func TestFile_Img2Base64(t *testing.T) { 655 var res string 656 var err error 657 658 //png 659 res, err = KFile.Img2Base64(imgPng) 660 assert.Nil(t, err) 661 assert.Contains(t, res, "png") 662 663 //jpg 664 res, err = KFile.Img2Base64(imgJpg) 665 assert.Nil(t, err) 666 assert.Contains(t, res, "jpg") 667 668 //非图片 669 res, err = KFile.Img2Base64(fileMd) 670 assert.NotNil(t, err) 671 672 //图片不存在 673 res, err = KFile.Img2Base64(fileNone) 674 assert.NotNil(t, err) 675 } 676 677 func BenchmarkFile_Img2Base64(b *testing.B) { 678 b.ResetTimer() 679 for i := 0; i < b.N; i++ { 680 _, _ = KFile.Img2Base64(imgPng) 681 } 682 } 683 684 func TestFile_FileTree(t *testing.T) { 685 var res []string 686 687 //显示全部 688 res = KFile.FileTree(dirVendor, FILE_TREE_ALL, true) 689 assert.NotEmpty(t, res) 690 691 //仅目录 692 res = KFile.FileTree(dirVendor, FILE_TREE_DIR, true) 693 assert.NotEmpty(t, res) 694 695 //仅文件 696 res = KFile.FileTree(dirVendor, FILE_TREE_FILE, true) 697 assert.NotEmpty(t, res) 698 699 //不递归 700 res = KFile.FileTree(dirCurr, FILE_TREE_DIR, false) 701 assert.GreaterOrEqual(t, len(res), 4) 702 703 //文件过滤 704 res = KFile.FileTree(dirCurr, FILE_TREE_FILE, true, func(s string) bool { 705 ext := KFile.GetExt(s) 706 return ext == "go" 707 }) 708 assert.NotEmpty(t, res) 709 } 710 711 func BenchmarkFile_FileTree(b *testing.B) { 712 b.ResetTimer() 713 for i := 0; i < b.N; i++ { 714 KFile.FileTree(dirCurr, FILE_TREE_ALL, false) 715 } 716 } 717 718 func TestFile_FormatDir(t *testing.T) { 719 var res string 720 721 res = KFile.FormatDir(pathTes3) 722 assert.NotContains(t, res, "\\") 723 724 //win格式 725 res = KFile.FormatDir(pathTes2) 726 assert.Equal(t, 1, strings.Count(res, ":")) 727 728 //空目录 729 res = KFile.FormatDir("") 730 assert.Empty(t, res) 731 } 732 733 func BenchmarkFile_FormatDir(b *testing.B) { 734 b.ResetTimer() 735 for i := 0; i < b.N; i++ { 736 KFile.FormatDir(pathTes3) 737 } 738 } 739 740 func TestFile_FormatPath(t *testing.T) { 741 var res string 742 743 res = KFile.FormatPath(pathTes1) 744 assert.NotContains(t, res, ":") 745 746 res = KFile.FormatPath(fileGmod) 747 assert.Equal(t, res, fileGmod) 748 749 res = KFile.FormatPath(fileGo) 750 assert.Equal(t, res, fileGo) 751 752 res = KFile.FormatPath(pathTes3) 753 assert.NotContains(t, res, "\\") 754 755 //win格式 756 res = KFile.FormatPath(pathTes2) 757 assert.Equal(t, 1, strings.Count(res, ":")) 758 759 //空路径 760 res = KFile.FormatPath("") 761 assert.Empty(t, res) 762 } 763 764 func BenchmarkFile_FormatPath(b *testing.B) { 765 b.ResetTimer() 766 for i := 0; i < b.N; i++ { 767 KFile.FormatPath(pathTes2) 768 } 769 } 770 771 func TestFile_Md5(t *testing.T) { 772 var res string 773 var err error 774 775 res, err = KFile.Md5(fileMd, 32) 776 assert.NotEmpty(t, res) 777 778 res, err = KFile.Md5(fileMd, 16) 779 assert.Nil(t, err) 780 781 //不存在的文件 782 res, err = KFile.Md5(fileNone, 32) 783 assert.NotNil(t, err) 784 } 785 786 func BenchmarkFile_Md5(b *testing.B) { 787 b.ResetTimer() 788 for i := 0; i < b.N; i++ { 789 _, _ = KFile.Md5(fileMd, 32) 790 } 791 } 792 793 func TestFile_ShaX(t *testing.T) { 794 defer func() { 795 r := recover() 796 assert.NotEmpty(t, r) 797 }() 798 799 var res string 800 var err error 801 802 res, err = KFile.ShaX(fileGmod, 1) 803 assert.NotEmpty(t, res) 804 805 res, err = KFile.ShaX(fileGmod, 256) 806 assert.NotEmpty(t, res) 807 808 res, err = KFile.ShaX(fileGmod, 512) 809 assert.NotEmpty(t, res) 810 811 //文件不存在 812 res, err = KFile.ShaX(fileNone, 512) 813 assert.NotNil(t, err) 814 815 //err x 816 res, err = KFile.ShaX(fileGmod, 32) 817 } 818 819 func BenchmarkFile_ShaX(b *testing.B) { 820 b.ResetTimer() 821 for i := 0; i < b.N; i++ { 822 _, _ = KFile.ShaX(fileGmod, 256) 823 } 824 } 825 826 func TestFile_Pathinfo(t *testing.T) { 827 var res map[string]string 828 829 //所有信息 830 res = KFile.Pathinfo(imgPng, -1) 831 assert.Equal(t, 4, len(res)) 832 833 //仅目录 834 res = KFile.Pathinfo(imgPng, 1) 835 836 //仅基础名(文件+扩展) 837 res = KFile.Pathinfo(imgPng, 2) 838 839 //仅扩展名 840 res = KFile.Pathinfo(imgPng, 4) 841 842 //仅文件名 843 res = KFile.Pathinfo(imgPng, 8) 844 845 //目录+基础名 846 res = KFile.Pathinfo(imgPng, 3) 847 848 //特殊类型 849 res = KFile.Pathinfo(fileGitkee, -1) 850 assert.Empty(t, res["filename"]) 851 } 852 853 func BenchmarkFile_Pathinfo(b *testing.B) { 854 b.ResetTimer() 855 for i := 0; i < b.N; i++ { 856 KFile.Pathinfo(imgPng, -1) 857 } 858 } 859 860 func TestFile_Basename(t *testing.T) { 861 var res string 862 863 res = KFile.Basename(fileMd) 864 assert.Equal(t, "README.md", res) 865 866 res = KFile.Basename(fileNone) 867 assert.Equal(t, "none", res) 868 869 res = KFile.Basename("") 870 assert.NotEmpty(t, res) 871 assert.Equal(t, ".", res) 872 } 873 874 func BenchmarkFile_Basename(b *testing.B) { 875 b.ResetTimer() 876 for i := 0; i < b.N; i++ { 877 KFile.Basename(fileDante) 878 } 879 } 880 881 func TestFile_Dirname(t *testing.T) { 882 var res string 883 884 res = KFile.Dirname(changLog) 885 assert.Equal(t, "docs", res) 886 887 res = KFile.Dirname("") 888 assert.NotEmpty(t, res) 889 assert.Equal(t, ".", res) 890 } 891 892 func BenchmarkFile_Dirname(b *testing.B) { 893 b.ResetTimer() 894 for i := 0; i < b.N; i++ { 895 KFile.Dirname(fileSongs) 896 } 897 } 898 899 func TestFile_GetModTime(t *testing.T) { 900 var res int64 901 902 res = KFile.GetModTime(fileMd) 903 assert.Greater(t, res, int64(0)) 904 905 //不存在的文件 906 res = KFile.GetModTime(fileNone) 907 assert.Equal(t, res, int64(0)) 908 909 //空路径 910 res = KFile.GetModTime(fileNone) 911 assert.Equal(t, res, int64(0)) 912 } 913 914 func BenchmarkFile_GetModTime(b *testing.B) { 915 b.ResetTimer() 916 for i := 0; i < b.N; i++ { 917 KFile.GetModTime(fileMd) 918 } 919 } 920 921 func TestFile_Glob(t *testing.T) { 922 var res []string 923 var err error 924 925 res, err = KFile.Glob("*test.go") 926 assert.NotEmpty(t, res) 927 assert.Nil(t, err) 928 } 929 930 func BenchmarkFile_Glob(b *testing.B) { 931 b.ResetTimer() 932 pattern := "*test.go" 933 for i := 0; i < b.N; i++ { 934 _, _ = KFile.Glob(pattern) 935 } 936 } 937 938 func TestFile_SafeFileName(t *testing.T) { 939 var res string 940 941 res = KFile.SafeFileName(pathTes4) 942 assert.Equal(t, `123456789-ASDF.html`, res) 943 944 res = KFile.SafeFileName(pathTes5) 945 assert.Equal(t, `test.go`, res) 946 947 res = KFile.SafeFileName(pathTes6) 948 assert.Equal(t, `Hello-World.txt`, res) 949 950 res = KFile.SafeFileName("") 951 assert.Equal(t, ".", res) 952 } 953 954 func BenchmarkFile_SafeFileName(b *testing.B) { 955 b.ResetTimer() 956 for i := 0; i < b.N; i++ { 957 KFile.SafeFileName(pathTes4) 958 } 959 } 960 961 func TestFile_TarGzUnTarGz(t *testing.T) { 962 var res1, res2 bool 963 var err1, err2 error 964 var patterns []string 965 966 //打包 967 patterns = []string{".*.md", ".*.yml", ".*_test.go"} 968 res1, err1 = KFile.TarGz(dirVendor, targzfile1, patterns...) 969 assert.True(t, res1) 970 assert.Nil(t, err1) 971 972 //解压 973 res2, err2 = KFile.UnTarGz(targzfile1, untarpath1) 974 assert.True(t, res2) 975 assert.Nil(t, err2) 976 977 //打包不存在的目录 978 res1, err1 = KFile.TarGz(fileNone, targzfile2) 979 assert.False(t, res1) 980 assert.NotNil(t, err1) 981 982 //解压非tar格式的文件 983 res2, err2 = KFile.UnTarGz(fileDante, untarpath1) 984 assert.False(t, res2) 985 assert.NotNil(t, err2) 986 987 //解压不存在的文件 988 res2, err2 = KFile.UnTarGz(fileNone, untarpath1) 989 assert.False(t, res2) 990 assert.NotNil(t, err2) 991 } 992 993 func BenchmarkFile_TarGz(b *testing.B) { 994 b.ResetTimer() 995 for i := 0; i < b.N; i++ { 996 dst := fmt.Sprintf(dirTdat+"/targz/test_%d.tar.gz", i) 997 _, _ = KFile.TarGz(dirDoc, dst) 998 } 999 } 1000 1001 func BenchmarkFile_UnTarGz(b *testing.B) { 1002 b.ResetTimer() 1003 var src, dst string 1004 for i := 0; i < b.N; i++ { 1005 src = fmt.Sprintf(dirTdat+"/targz/test_%d.tar.gz", i) 1006 dst = fmt.Sprintf(dirTdat+"/targz/test_%d", i) 1007 _, _ = KFile.UnTarGz(src, dst) 1008 } 1009 } 1010 1011 func TestFile_ChmodBatch(t *testing.T) { 1012 var res bool 1013 var tmp string 1014 1015 for i := 0; i < 10; i++ { 1016 tmp = fmt.Sprintf(dirChmod+"/tmp_%d", i) 1017 KFile.Touch(tmp, 0) 1018 } 1019 1020 res = KFile.ChmodBatch(dirChmod, 0766, 0755) 1021 assert.True(t, res) 1022 1023 //不存在的路径 1024 res = KFile.ChmodBatch(fileNone, 0777, 0766) 1025 assert.False(t, res) 1026 } 1027 1028 func BenchmarkFile_ChmodBatch(b *testing.B) { 1029 b.ResetTimer() 1030 for i := 0; i < b.N; i++ { 1031 KFile.ChmodBatch(dirDoc, 0777, 0766) 1032 } 1033 } 1034 1035 func TestFile_CountLines(t *testing.T) { 1036 var res int 1037 var err error 1038 1039 res, err = KFile.CountLines(fileDante, 0) 1040 assert.Equal(t, 19567, res) 1041 assert.Nil(t, err) 1042 1043 //非文本文件 1044 res, err = KFile.CountLines(imgJpg, 8) 1045 assert.Greater(t, res, 0) 1046 assert.Nil(t, err) 1047 1048 //不存在的文件 1049 res, err = KFile.CountLines(fileNone, 0) 1050 assert.Equal(t, -1, res) 1051 assert.NotNil(t, err) 1052 } 1053 1054 func BenchmarkFile_CountLines(b *testing.B) { 1055 b.ResetTimer() 1056 for i := 0; i < b.N; i++ { 1057 _, _ = KFile.CountLines(fileMd, 0) 1058 } 1059 } 1060 1061 func TestFile_ZipIszipUnzip(t *testing.T) { 1062 var res bool 1063 var err error 1064 1065 //空输入 1066 res, err = KFile.Zip(zipfile1) 1067 assert.False(t, res) 1068 assert.NotNil(t, err) 1069 1070 //源文件不存在 1071 res, err = KFile.Zip(zipfile1, fileNone) 1072 assert.False(t, res) 1073 assert.NotNil(t, err) 1074 1075 res, err = KFile.Zip(zipfile1, fileMd, fileGo, fileDante, dirDoc) 1076 assert.True(t, res) 1077 assert.Nil(t, err) 1078 1079 //判断 1080 res = KFile.IsZip(zipfile1) 1081 assert.True(t, res) 1082 1083 res = KFile.IsZip(fileNone) 1084 assert.False(t, res) 1085 1086 //解压 1087 res, err = KFile.UnZip(zipfile1, unzippath1) 1088 assert.True(t, res) 1089 assert.Nil(t, err) 1090 1091 //解压非zip文件 1092 res, err = KFile.UnZip(imgJpg, unzippath1) 1093 assert.False(t, res) 1094 assert.NotNil(t, err) 1095 1096 //解压不存在文件 1097 res, err = KFile.UnZip(fileNone, unzippath1) 1098 assert.False(t, res) 1099 assert.NotNil(t, err) 1100 } 1101 1102 func BenchmarkFile_Zip(b *testing.B) { 1103 b.ResetTimer() 1104 for i := 0; i < b.N; i++ { 1105 dst := fmt.Sprintf(dirTdat+"/zip/test_%d.zip", i) 1106 _, _ = KFile.Zip(dst, dirDoc) 1107 } 1108 } 1109 1110 func BenchmarkFile_IsZip(b *testing.B) { 1111 b.ResetTimer() 1112 for i := 0; i < b.N; i++ { 1113 dst := fmt.Sprintf(dirTdat+"/zip/test_%d.zip", i) 1114 KFile.IsZip(dst) 1115 } 1116 } 1117 1118 func BenchmarkFile_UnZip(b *testing.B) { 1119 b.ResetTimer() 1120 var src, dst string 1121 for i := 0; i < b.N; i++ { 1122 src = fmt.Sprintf(dirTdat+"/zip/test_%d.zip", i) 1123 dst = fmt.Sprintf(dirTdat+"/zip/unzip/test_%d", i) 1124 _, _ = KFile.UnZip(src, dst) 1125 } 1126 }