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