github.com/wangyougui/gf/v2@v2.6.5/os/gfile/gfile_z_unit_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package gfile_test
     8  
     9  import (
    10  	"os"
    11  	"path/filepath"
    12  	"strings"
    13  	"testing"
    14  
    15  	"github.com/wangyougui/gf/v2/os/gfile"
    16  	"github.com/wangyougui/gf/v2/os/gtime"
    17  	"github.com/wangyougui/gf/v2/test/gtest"
    18  	"github.com/wangyougui/gf/v2/util/gconv"
    19  )
    20  
    21  func Test_IsDir(t *testing.T) {
    22  	gtest.C(t, func(t *gtest.T) {
    23  		paths := "/testfile"
    24  		createDir(paths)
    25  		defer delTestFiles(paths)
    26  
    27  		t.Assert(gfile.IsDir(testpath()+paths), true)
    28  		t.Assert(gfile.IsDir("./testfile2"), false)
    29  		t.Assert(gfile.IsDir("./testfile/tt.txt"), false)
    30  		t.Assert(gfile.IsDir(""), false)
    31  	})
    32  }
    33  
    34  func Test_IsEmpty(t *testing.T) {
    35  	gtest.C(t, func(t *gtest.T) {
    36  		path := "/testdir_" + gconv.String(gtime.TimestampNano())
    37  		createDir(path)
    38  		defer delTestFiles(path)
    39  
    40  		t.Assert(gfile.IsEmpty(testpath()+path), true)
    41  		t.Assert(gfile.IsEmpty(testpath()+path+gfile.Separator+"test.txt"), true)
    42  	})
    43  	gtest.C(t, func(t *gtest.T) {
    44  		path := "/testfile_" + gconv.String(gtime.TimestampNano())
    45  		createTestFile(path, "")
    46  		defer delTestFiles(path)
    47  
    48  		t.Assert(gfile.IsEmpty(testpath()+path), true)
    49  	})
    50  	gtest.C(t, func(t *gtest.T) {
    51  		path := "/testfile_" + gconv.String(gtime.TimestampNano())
    52  		createTestFile(path, "1")
    53  		defer delTestFiles(path)
    54  
    55  		t.Assert(gfile.IsEmpty(testpath()+path), false)
    56  	})
    57  }
    58  
    59  func Test_Create(t *testing.T) {
    60  	gtest.C(t, func(t *gtest.T) {
    61  		var (
    62  			err       error
    63  			filepaths []string
    64  			fileobj   *os.File
    65  		)
    66  		filepaths = append(filepaths, "/testfile_cc1.txt")
    67  		filepaths = append(filepaths, "/testfile_cc2.txt")
    68  		for _, v := range filepaths {
    69  			fileobj, err = gfile.Create(testpath() + v)
    70  			defer delTestFiles(v)
    71  			fileobj.Close()
    72  			t.AssertNil(err)
    73  		}
    74  	})
    75  
    76  	gtest.C(t, func(t *gtest.T) {
    77  		tmpPath := gfile.Join(gfile.Temp(), "test/testfile_cc1.txt")
    78  		fileobj, err := gfile.Create(tmpPath)
    79  		defer gfile.Remove(tmpPath)
    80  		t.AssertNE(fileobj, nil)
    81  		t.AssertNil(err)
    82  		fileobj.Close()
    83  	})
    84  }
    85  
    86  func Test_Open(t *testing.T) {
    87  	gtest.C(t, func(t *gtest.T) {
    88  		var (
    89  			err     error
    90  			files   []string
    91  			flags   []bool
    92  			fileobj *os.File
    93  		)
    94  
    95  		file1 := "/testfile_nc1.txt"
    96  		createTestFile(file1, "")
    97  		defer delTestFiles(file1)
    98  
    99  		files = append(files, file1)
   100  		flags = append(flags, true)
   101  
   102  		files = append(files, "./testfile/file1/c1.txt")
   103  		flags = append(flags, false)
   104  
   105  		for k, v := range files {
   106  			fileobj, err = gfile.Open(testpath() + v)
   107  			fileobj.Close()
   108  			if flags[k] {
   109  				t.AssertNil(err)
   110  			} else {
   111  				t.AssertNE(err, nil)
   112  			}
   113  
   114  		}
   115  
   116  	})
   117  }
   118  
   119  func Test_OpenFile(t *testing.T) {
   120  	gtest.C(t, func(t *gtest.T) {
   121  		var (
   122  			err     error
   123  			files   []string
   124  			flags   []bool
   125  			fileobj *os.File
   126  		)
   127  
   128  		files = append(files, "./testfile/file1/nc1.txt")
   129  		flags = append(flags, false)
   130  
   131  		f1 := "/testfile_tt.txt"
   132  		createTestFile(f1, "")
   133  		defer delTestFiles(f1)
   134  
   135  		files = append(files, f1)
   136  		flags = append(flags, true)
   137  
   138  		for k, v := range files {
   139  			fileobj, err = gfile.OpenFile(testpath()+v, os.O_RDWR, 0666)
   140  			fileobj.Close()
   141  			if flags[k] {
   142  				t.AssertNil(err)
   143  			} else {
   144  				t.AssertNE(err, nil)
   145  			}
   146  
   147  		}
   148  
   149  	})
   150  }
   151  
   152  func Test_OpenWithFlag(t *testing.T) {
   153  	gtest.C(t, func(t *gtest.T) {
   154  		var (
   155  			err     error
   156  			files   []string
   157  			flags   []bool
   158  			fileobj *os.File
   159  		)
   160  
   161  		file1 := "/testfile_t1.txt"
   162  		createTestFile(file1, "")
   163  		defer delTestFiles(file1)
   164  		files = append(files, file1)
   165  		flags = append(flags, true)
   166  
   167  		files = append(files, "/testfiless/dirfiles/t1_no.txt")
   168  		flags = append(flags, false)
   169  
   170  		for k, v := range files {
   171  			fileobj, err = gfile.OpenWithFlag(testpath()+v, os.O_RDWR)
   172  			fileobj.Close()
   173  			if flags[k] {
   174  				t.AssertNil(err)
   175  			} else {
   176  				t.AssertNE(err, nil)
   177  			}
   178  
   179  		}
   180  
   181  	})
   182  }
   183  
   184  func Test_OpenWithFlagPerm(t *testing.T) {
   185  	gtest.C(t, func(t *gtest.T) {
   186  		var (
   187  			err     error
   188  			files   []string
   189  			flags   []bool
   190  			fileobj *os.File
   191  		)
   192  		file1 := "/testfile_nc1.txt"
   193  		createTestFile(file1, "")
   194  		defer delTestFiles(file1)
   195  		files = append(files, file1)
   196  		flags = append(flags, true)
   197  
   198  		files = append(files, "/testfileyy/tt.txt")
   199  		flags = append(flags, false)
   200  
   201  		for k, v := range files {
   202  			fileobj, err = gfile.OpenWithFlagPerm(testpath()+v, os.O_RDWR, 0666)
   203  			fileobj.Close()
   204  			if flags[k] {
   205  				t.AssertNil(err)
   206  			} else {
   207  				t.AssertNE(err, nil)
   208  			}
   209  
   210  		}
   211  
   212  	})
   213  }
   214  
   215  func Test_Exists(t *testing.T) {
   216  
   217  	gtest.C(t, func(t *gtest.T) {
   218  		var (
   219  			flag  bool
   220  			files []string
   221  			flags []bool
   222  		)
   223  
   224  		file1 := "/testfile_GetContents.txt"
   225  		createTestFile(file1, "")
   226  		defer delTestFiles(file1)
   227  
   228  		files = append(files, file1)
   229  		flags = append(flags, true)
   230  
   231  		files = append(files, "./testfile/havefile1/tt_no.txt")
   232  		flags = append(flags, false)
   233  
   234  		for k, v := range files {
   235  			flag = gfile.Exists(testpath() + v)
   236  			if flags[k] {
   237  				t.Assert(flag, true)
   238  			} else {
   239  				t.Assert(flag, false)
   240  			}
   241  
   242  		}
   243  
   244  	})
   245  }
   246  
   247  func Test_Pwd(t *testing.T) {
   248  	gtest.C(t, func(t *gtest.T) {
   249  		paths, err := os.Getwd()
   250  		t.AssertNil(err)
   251  		t.Assert(gfile.Pwd(), paths)
   252  
   253  	})
   254  }
   255  
   256  func Test_IsFile(t *testing.T) {
   257  	gtest.C(t, func(t *gtest.T) {
   258  		var (
   259  			flag  bool
   260  			files []string
   261  			flags []bool
   262  		)
   263  
   264  		file1 := "/testfile_tt.txt"
   265  		createTestFile(file1, "")
   266  		defer delTestFiles(file1)
   267  		files = append(files, file1)
   268  		flags = append(flags, true)
   269  
   270  		dir1 := "/testfiless"
   271  		createDir(dir1)
   272  		defer delTestFiles(dir1)
   273  		files = append(files, dir1)
   274  		flags = append(flags, false)
   275  
   276  		files = append(files, "./testfiledd/tt1.txt")
   277  		flags = append(flags, false)
   278  
   279  		for k, v := range files {
   280  			flag = gfile.IsFile(testpath() + v)
   281  			if flags[k] {
   282  				t.Assert(flag, true)
   283  			} else {
   284  				t.Assert(flag, false)
   285  			}
   286  
   287  		}
   288  
   289  	})
   290  }
   291  
   292  func Test_Info(t *testing.T) {
   293  	gtest.C(t, func(t *gtest.T) {
   294  		var (
   295  			err    error
   296  			paths  string = "/testfile_t1.txt"
   297  			files  os.FileInfo
   298  			files2 os.FileInfo
   299  		)
   300  
   301  		createTestFile(paths, "")
   302  		defer delTestFiles(paths)
   303  		files, err = gfile.Stat(testpath() + paths)
   304  		t.AssertNil(err)
   305  
   306  		files2, err = os.Stat(testpath() + paths)
   307  		t.AssertNil(err)
   308  
   309  		t.Assert(files, files2)
   310  
   311  	})
   312  }
   313  
   314  func Test_Move(t *testing.T) {
   315  	gtest.C(t, func(t *gtest.T) {
   316  		var (
   317  			paths     string = "/ovetest"
   318  			filepaths string = "/testfile_ttn1.txt"
   319  			topath    string = "/testfile_ttn2.txt"
   320  		)
   321  		createDir("/ovetest")
   322  		createTestFile(paths+filepaths, "a")
   323  
   324  		defer delTestFiles(paths)
   325  
   326  		yfile := testpath() + paths + filepaths
   327  		tofile := testpath() + paths + topath
   328  
   329  		t.Assert(gfile.Move(yfile, tofile), nil)
   330  
   331  		// 检查移动后的文件是否真实存在
   332  		_, err := os.Stat(tofile)
   333  		t.Assert(os.IsNotExist(err), false)
   334  
   335  	})
   336  }
   337  
   338  func Test_Rename(t *testing.T) {
   339  	gtest.C(t, func(t *gtest.T) {
   340  		var (
   341  			paths  string = "/testfiles"
   342  			ypath  string = "/testfilettm1.txt"
   343  			topath string = "/testfilettm2.txt"
   344  		)
   345  		createDir(paths)
   346  		createTestFile(paths+ypath, "a")
   347  		defer delTestFiles(paths)
   348  
   349  		ypath = testpath() + paths + ypath
   350  		topath = testpath() + paths + topath
   351  
   352  		t.Assert(gfile.Rename(ypath, topath), nil)
   353  		t.Assert(gfile.IsFile(topath), true)
   354  
   355  		t.AssertNE(gfile.Rename("", ""), nil)
   356  
   357  	})
   358  
   359  }
   360  
   361  func Test_DirNames(t *testing.T) {
   362  	gtest.C(t, func(t *gtest.T) {
   363  		var (
   364  			paths    string = "/testdirs"
   365  			err      error
   366  			readlist []string
   367  		)
   368  		havelist := []string{
   369  			"t1.txt",
   370  			"t2.txt",
   371  		}
   372  
   373  		// 创建测试文件
   374  		createDir(paths)
   375  		for _, v := range havelist {
   376  			createTestFile(paths+"/"+v, "")
   377  		}
   378  		defer delTestFiles(paths)
   379  
   380  		readlist, err = gfile.DirNames(testpath() + paths)
   381  
   382  		t.AssertNil(err)
   383  		t.AssertIN(readlist, havelist)
   384  
   385  		_, err = gfile.DirNames("")
   386  		t.AssertNE(err, nil)
   387  
   388  	})
   389  }
   390  
   391  func Test_Glob(t *testing.T) {
   392  	gtest.C(t, func(t *gtest.T) {
   393  		var (
   394  			paths      string = "/testfiles/*.txt"
   395  			dirpath    string = "/testfiles"
   396  			err        error
   397  			resultlist []string
   398  		)
   399  
   400  		havelist1 := []string{
   401  			"t1.txt",
   402  			"t2.txt",
   403  		}
   404  
   405  		havelist2 := []string{
   406  			testpath() + "/testfiles/t1.txt",
   407  			testpath() + "/testfiles/t2.txt",
   408  		}
   409  
   410  		// ===============================构建测试文件
   411  		createDir(dirpath)
   412  		for _, v := range havelist1 {
   413  			createTestFile(dirpath+"/"+v, "")
   414  		}
   415  		defer delTestFiles(dirpath)
   416  
   417  		resultlist, err = gfile.Glob(testpath()+paths, true)
   418  		t.AssertNil(err)
   419  		t.Assert(resultlist, havelist1)
   420  
   421  		resultlist, err = gfile.Glob(testpath()+paths, false)
   422  
   423  		t.AssertNil(err)
   424  		t.Assert(formatpaths(resultlist), formatpaths(havelist2))
   425  
   426  		_, err = gfile.Glob("", true)
   427  		t.AssertNil(err)
   428  
   429  	})
   430  }
   431  
   432  func Test_Remove(t *testing.T) {
   433  	gtest.C(t, func(t *gtest.T) {
   434  		var (
   435  			paths string = "/testfile_t1.txt"
   436  		)
   437  		createTestFile(paths, "")
   438  		t.Assert(gfile.Remove(testpath()+paths), nil)
   439  
   440  		t.Assert(gfile.Remove(""), nil)
   441  
   442  		defer delTestFiles(paths)
   443  
   444  	})
   445  }
   446  
   447  func Test_IsReadable(t *testing.T) {
   448  	gtest.C(t, func(t *gtest.T) {
   449  		var (
   450  			paths1 string = "/testfile_GetContents.txt"
   451  			paths2 string = "./testfile_GetContents_no.txt"
   452  		)
   453  
   454  		createTestFile(paths1, "")
   455  		defer delTestFiles(paths1)
   456  
   457  		t.Assert(gfile.IsReadable(testpath()+paths1), true)
   458  		t.Assert(gfile.IsReadable(paths2), false)
   459  
   460  	})
   461  }
   462  
   463  func Test_IsWritable(t *testing.T) {
   464  	gtest.C(t, func(t *gtest.T) {
   465  		var (
   466  			paths1 string = "/testfile_GetContents.txt"
   467  			paths2 string = "./testfile_GetContents_no.txt"
   468  		)
   469  
   470  		createTestFile(paths1, "")
   471  		defer delTestFiles(paths1)
   472  		t.Assert(gfile.IsWritable(testpath()+paths1), true)
   473  		t.Assert(gfile.IsWritable(paths2), false)
   474  
   475  	})
   476  }
   477  
   478  func Test_Chmod(t *testing.T) {
   479  	gtest.C(t, func(t *gtest.T) {
   480  		var (
   481  			paths1 string = "/testfile_GetContents.txt"
   482  			paths2 string = "./testfile_GetContents_no.txt"
   483  		)
   484  		createTestFile(paths1, "")
   485  		defer delTestFiles(paths1)
   486  
   487  		t.Assert(gfile.Chmod(testpath()+paths1, 0777), nil)
   488  		t.AssertNE(gfile.Chmod(paths2, 0777), nil)
   489  
   490  	})
   491  }
   492  
   493  // 获取绝对目录地址
   494  func Test_RealPath(t *testing.T) {
   495  	gtest.C(t, func(t *gtest.T) {
   496  		var (
   497  			paths1    string = "/testfile_files"
   498  			readlPath string
   499  
   500  			tempstr string
   501  		)
   502  
   503  		createDir(paths1)
   504  		defer delTestFiles(paths1)
   505  
   506  		readlPath = gfile.RealPath("./")
   507  
   508  		tempstr, _ = filepath.Abs("./")
   509  
   510  		t.Assert(readlPath, tempstr)
   511  
   512  		t.Assert(gfile.RealPath("./nodirs"), "")
   513  
   514  	})
   515  }
   516  
   517  // 获取当前执行文件的目录
   518  func Test_SelfPath(t *testing.T) {
   519  	gtest.C(t, func(t *gtest.T) {
   520  		var (
   521  			paths1    string
   522  			readlPath string
   523  			tempstr   string
   524  		)
   525  		readlPath = gfile.SelfPath()
   526  		readlPath = filepath.ToSlash(readlPath)
   527  
   528  		tempstr, _ = filepath.Abs(os.Args[0])
   529  		paths1 = filepath.ToSlash(tempstr)
   530  		paths1 = strings.Replace(paths1, "./", "/", 1)
   531  
   532  		t.Assert(readlPath, paths1)
   533  
   534  	})
   535  }
   536  
   537  func Test_SelfDir(t *testing.T) {
   538  	gtest.C(t, func(t *gtest.T) {
   539  		var (
   540  			paths1    string
   541  			readlPath string
   542  			tempstr   string
   543  		)
   544  		readlPath = gfile.SelfDir()
   545  
   546  		tempstr, _ = filepath.Abs(os.Args[0])
   547  		paths1 = filepath.Dir(tempstr)
   548  
   549  		t.Assert(readlPath, paths1)
   550  
   551  	})
   552  }
   553  
   554  func Test_Basename(t *testing.T) {
   555  	gtest.C(t, func(t *gtest.T) {
   556  		var (
   557  			paths1    string = "/testfilerr_GetContents.txt"
   558  			readlPath string
   559  		)
   560  
   561  		createTestFile(paths1, "")
   562  		defer delTestFiles(paths1)
   563  
   564  		readlPath = gfile.Basename(testpath() + paths1)
   565  		t.Assert(readlPath, "testfilerr_GetContents.txt")
   566  
   567  	})
   568  }
   569  
   570  func Test_Dir(t *testing.T) {
   571  	gtest.C(t, func(t *gtest.T) {
   572  		var (
   573  			paths1    string = "/testfiless"
   574  			readlPath string
   575  		)
   576  		createDir(paths1)
   577  		defer delTestFiles(paths1)
   578  
   579  		readlPath = gfile.Dir(testpath() + paths1)
   580  
   581  		t.Assert(readlPath, testpath())
   582  
   583  		t.Assert(len(gfile.Dir(".")) > 0, true)
   584  	})
   585  }
   586  
   587  func Test_Ext(t *testing.T) {
   588  	gtest.C(t, func(t *gtest.T) {
   589  		var (
   590  			paths1   string = "/testfile_GetContents.txt"
   591  			dirpath1        = "/testdirs"
   592  		)
   593  		createTestFile(paths1, "")
   594  		defer delTestFiles(paths1)
   595  
   596  		createDir(dirpath1)
   597  		defer delTestFiles(dirpath1)
   598  
   599  		t.Assert(gfile.Ext(testpath()+paths1), ".txt")
   600  		t.Assert(gfile.Ext(testpath()+dirpath1), "")
   601  	})
   602  
   603  	gtest.C(t, func(t *gtest.T) {
   604  		t.Assert(gfile.Ext("/var/www/test.js"), ".js")
   605  		t.Assert(gfile.Ext("/var/www/test.min.js"), ".js")
   606  		t.Assert(gfile.Ext("/var/www/test.js?1"), ".js")
   607  		t.Assert(gfile.Ext("/var/www/test.min.js?v1"), ".js")
   608  	})
   609  }
   610  
   611  func Test_ExtName(t *testing.T) {
   612  	gtest.C(t, func(t *gtest.T) {
   613  		t.Assert(gfile.ExtName("/var/www/test.js"), "js")
   614  		t.Assert(gfile.ExtName("/var/www/test.min.js"), "js")
   615  		t.Assert(gfile.ExtName("/var/www/test.js?v=1"), "js")
   616  		t.Assert(gfile.ExtName("/var/www/test.min.js?v=1"), "js")
   617  	})
   618  }
   619  
   620  func Test_TempDir(t *testing.T) {
   621  	gtest.C(t, func(t *gtest.T) {
   622  		t.Assert(gfile.Temp(), os.TempDir())
   623  	})
   624  }
   625  
   626  func Test_Mkdir(t *testing.T) {
   627  	gtest.C(t, func(t *gtest.T) {
   628  		var (
   629  			tpath string = "/testfile/createdir"
   630  			err   error
   631  		)
   632  
   633  		defer delTestFiles("/testfile")
   634  
   635  		err = gfile.Mkdir(testpath() + tpath)
   636  		t.AssertNil(err)
   637  
   638  		err = gfile.Mkdir("")
   639  		t.AssertNE(err, nil)
   640  
   641  		err = gfile.Mkdir(testpath() + tpath + "2/t1")
   642  		t.AssertNil(err)
   643  
   644  	})
   645  }
   646  
   647  func Test_Stat(t *testing.T) {
   648  	gtest.C(t, func(t *gtest.T) {
   649  		var (
   650  			tpath1   = "/testfile_t1.txt"
   651  			tpath2   = "./testfile_t1_no.txt"
   652  			err      error
   653  			fileiofo os.FileInfo
   654  		)
   655  
   656  		createTestFile(tpath1, "a")
   657  		defer delTestFiles(tpath1)
   658  
   659  		fileiofo, err = gfile.Stat(testpath() + tpath1)
   660  		t.AssertNil(err)
   661  
   662  		t.Assert(fileiofo.Size(), 1)
   663  
   664  		_, err = gfile.Stat(tpath2)
   665  		t.AssertNE(err, nil)
   666  
   667  	})
   668  }
   669  
   670  func Test_MainPkgPath(t *testing.T) {
   671  	gtest.C(t, func(t *gtest.T) {
   672  		reads := gfile.MainPkgPath()
   673  		t.Assert(reads, "")
   674  	})
   675  }
   676  
   677  func Test_SelfName(t *testing.T) {
   678  	gtest.C(t, func(t *gtest.T) {
   679  		t.Assert(len(gfile.SelfName()) > 0, true)
   680  	})
   681  }
   682  
   683  func Test_MTimestamp(t *testing.T) {
   684  	gtest.C(t, func(t *gtest.T) {
   685  		t.Assert(gfile.MTimestamp(gfile.Temp()) > 0, true)
   686  	})
   687  }