Mercurial > vim
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 |