blob: a9934a162490bfd2476578cd8cef92ce9ad17eb2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
" Test :recover
func Test_recover_root_dir()
" This used to access invalid memory.
split Xtest
set dir=/
call assert_fails('recover', 'E305:')
close!
if has('win32') || filewritable('/') == 2
" can write in / directory on MS-Windows
set dir=/notexist/
endif
call assert_fails('split Xtest', 'E303:')
set dir&
endfunc
" Inserts 10000 lines with text to fill the swap file with two levels of pointer
" blocks. Then recovers from the swap file and checks all text is restored.
"
" We need about 10000 lines of 100 characters to get two levels of pointer
" blocks.
func Test_swap_file()
set fileformat=unix undolevels=-1
edit! Xtest
let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
let i = 1
let linecount = 10000
while i <= linecount
call append(i - 1, i . text)
let i += 1
endwhile
$delete
preserve
" get the name of the swap file
let swname = split(execute("swapname"))[0]
let swname = substitute(swname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
" make a copy of the swap file in Xswap
set binary
exe 'sp ' . swname
w! Xswap
set nobinary
new
only!
bwipe! Xtest
call rename('Xswap', swname)
recover Xtest
call delete(swname)
let linedollar = line('$')
call assert_equal(linecount, linedollar)
if linedollar < linecount
let linecount = linedollar
endif
let i = 1
while i <= linecount
call assert_equal(i . text, getline(i))
let i += 1
endwhile
set undolevels&
enew! | only
endfunc
|