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