1" Test rename() 2 3source shared.vim 4 5func 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') 22endfunc 23 24func 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') 36endfunc 37 38func 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') 50endfunc 51 52func 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') 63endfunc 64 65func 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') 75endfunc 76 77func 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') 97endfunc 98 99func 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') 120endfunc 121 122" vim: shiftwidth=2 sts=2 expandtab 123