neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

test_rename.vim (3623B)


      1 " Test rename()
      2 
      3 source shared.vim
      4 
      5 func Test_rename_file_to_file()
      6  call writefile(['foo'], 'Xrename1')
      7 
      8  call assert_equal(0, rename('Xrename1', 'Xrename2'))
      9 
     10  call assert_equal('', glob('Xrename1'))
     11  call assert_equal(['foo'], readfile('Xrename2'))
     12 
     13  " When the destination file already exists, it should be overwritten.
     14  call writefile(['foo'], 'Xrename1')
     15  call writefile(['bar'], 'Xrename2')
     16 
     17  call assert_equal(0, rename('Xrename1', 'Xrename2'))
     18  call assert_equal('', glob('Xrename1'))
     19  call assert_equal(['foo'], readfile('Xrename2'))
     20 
     21  call delete('Xrename2')
     22 endfunc
     23 
     24 func Test_rename_file_ignore_case()
     25  " With 'fileignorecase', renaming file will go through a temp file
     26  " when the source and destination file only differ by case.
     27  set fileignorecase
     28  call writefile(['foo'], 'Xrename')
     29 
     30  call assert_equal(0, 'Xrename'->rename('XRENAME'))
     31 
     32  call assert_equal(['foo'], readfile('XRENAME'))
     33 
     34  set fileignorecase&
     35  call delete('XRENAME')
     36 endfunc
     37 
     38 func Test_rename_same_file()
     39  call writefile(['foo'], 'Xrename')
     40 
     41  " When the source and destination are the same file, nothing
     42  " should be done. The source file should not be deleted.
     43  call assert_equal(0, rename('Xrename', 'Xrename'))
     44  call assert_equal(['foo'], readfile('Xrename'))
     45 
     46  call assert_equal(0, rename('./Xrename', 'Xrename'))
     47  call assert_equal(['foo'], readfile('Xrename'))
     48 
     49  call delete('Xrename')
     50 endfunc
     51 
     52 func Test_rename_dir_to_dir()
     53  call mkdir('Xrenamedir1')
     54  call writefile(['foo'], 'Xrenamedir1/Xrenamefile')
     55 
     56  call assert_equal(0, rename('Xrenamedir1', 'Xrenamedir2'))
     57 
     58  call assert_equal('', glob('Xrenamedir1'))
     59  call assert_equal(['foo'], readfile('Xrenamedir2/Xrenamefile'))
     60 
     61  call delete('Xrenamedir2/Xrenamefile')
     62  call delete('Xrenamedir2', 'd')
     63 endfunc
     64 
     65 func Test_rename_same_dir()
     66  call mkdir('Xrenamedir')
     67  call writefile(['foo'], 'Xrenamedir/Xrenamefile')
     68 
     69  call assert_equal(0, rename('Xrenamedir', 'Xrenamedir'))
     70 
     71  call assert_equal(['foo'], readfile('Xrenamedir/Xrenamefile'))
     72 
     73  call delete('Xrenamedir/Xrenamefile')
     74  call delete('Xrenamedir', 'd')
     75 endfunc
     76 
     77 func Test_rename_copy()
     78  " Check that when original file can't be deleted, rename()
     79  " still succeeds but copies the file.
     80  call mkdir('Xrenamedir')
     81  call writefile(['foo'], 'Xrenamedir/Xrenamefile')
     82  call setfperm('Xrenamedir', 'r-xr-xr-x')
     83 
     84  call assert_equal(0, rename('Xrenamedir/Xrenamefile', 'Xrenamefile'))
     85 
     86  if !has('win32') && !IsRoot()
     87    " On Windows, the source file is removed despite
     88    " its directory being made not writable.
     89    call assert_equal(['foo'], readfile('Xrenamedir/Xrenamefile'))
     90  endif
     91  call assert_equal(['foo'], readfile('Xrenamefile'))
     92 
     93  call setfperm('Xrenamedir', 'rwxrwxrwx')
     94  call delete('Xrenamedir/Xrenamefile')
     95  call delete('Xrenamedir', 'd')
     96  call delete('Xrenamefile')
     97 endfunc
     98 
     99 func Test_rename_fails()
    100  call writefile(['foo'], 'Xrenamefile')
    101 
    102  " Can't rename into a non-existing directory.
    103  call assert_notequal(0, rename('Xrenamefile', 'Xdoesnotexist/Xrenamefile'))
    104 
    105  " Can't rename a non-existing file.
    106  call assert_notequal(0, rename('Xdoesnotexist', 'Xrenamefile2'))
    107  call assert_equal('', glob('Xrenamefile2'))
    108 
    109  " When rename() fails, the destination file should not be deleted.
    110  call assert_notequal(0, rename('Xdoesnotexist', 'Xrenamefile'))
    111  call assert_equal(['foo'], readfile('Xrenamefile'))
    112 
    113  " Can't rename to en empty file name.
    114  call assert_notequal(0, rename('Xrenamefile', ''))
    115 
    116  call assert_fails('call rename("Xrenamefile", [])', 'E730')
    117  call assert_fails('call rename(0z, "Xrenamefile")', 'E976')
    118 
    119  call delete('Xrenamefile')
    120 endfunc