comparison src/testdir/test_rename.vim @ 15961:4024dbfd3099 v8.1.0986

patch 8.1.0986: rename() is not propertly tested commit https://github.com/vim/vim/commit/ef8c956172aa967f67c524cb9609a4d390d74b82 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 2 06:42:07 2019 +0100 patch 8.1.0986: rename() is not propertly tested Problem: rename() is not propertly tested. Solution: Add tests. (Dominique Pelle, closes https://github.com/vim/vim/issues/4061)
author Bram Moolenaar <Bram@vim.org>
date Sat, 02 Mar 2019 06:45:06 +0100
parents
children 2029737e6a22
comparison
equal deleted inserted replaced
15960:ee37b47d6a33 15961:4024dbfd3099
1 " Test rename()
2
3 func 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')
20 endfunc
21
22 func 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')
34 endfunc
35
36 func 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')
48 endfunc
49
50 func 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')
61 endfunc
62
63 func 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')
73 endfunc
74
75 func 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')
95 endfunc
96
97 func 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')
118 endfunc