annotate src/testdir/test_recover.vim @ 25810:2db73f521d49 v8.2.3440

patch 8.2.3440: recover test fails if there is an old swap file Commit: https://github.com/vim/vim/commit/f2a8bafa4b815e5b4e50a25c2b3a8a24fbe8aa11 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Sep 14 22:58:23 2021 +0200 patch 8.2.3440: recover test fails if there is an old swap file Problem: Recover test fails if there is an old swap file. Solution: Delete old swap files.
author Bram Moolenaar <Bram@vim.org>
date Tue, 14 Sep 2021 23:00:05 +0200
parents 088c1ddac618
children 51a1ff50bd24
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10896
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 " Test :recover
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2
24089
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
3 source check.vim
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
4
10896
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5 func Test_recover_root_dir()
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6 " This used to access invalid memory.
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 split Xtest
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 set dir=/
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 call assert_fails('recover', 'E305:')
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10 close!
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11
11432
0cafb01af1b6 patch 8.0.0600: test_recover fails on some systems
Christian Brabandt <cb@256bit.org>
parents: 10898
diff changeset
12 if has('win32') || filewritable('/') == 2
10898
cc3f6ad092c2 patch 8.0.0338: :recover test fails on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 10896
diff changeset
13 " can write in / directory on MS-Windows
cc3f6ad092c2 patch 8.0.0338: :recover test fails on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 10896
diff changeset
14 set dir=/notexist/
cc3f6ad092c2 patch 8.0.0338: :recover test fails on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 10896
diff changeset
15 endif
10896
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 call assert_fails('split Xtest', 'E303:')
18372
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
17
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
18 " No error with empty 'directory' setting.
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
19 set directory=
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
20 split XtestOK
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
21 close!
11394af51615 patch 8.1.2180: Error E303 is not useful when 'directory' is empty
Bram Moolenaar <Bram@vim.org>
parents: 12644
diff changeset
22
10896
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23 set dir&
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24 endfunc
d513b653f5d0 patch 8.0.0337: invalid memory access in :recover command
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25
24089
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
26 " Make a copy of the current swap file to "Xswap".
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
27 " Return the name of the swap file.
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
28 func CopySwapfile()
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
29 preserve
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
30 " get the name of the swap file
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
31 let swname = split(execute("swapname"))[0]
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
32 let swname = substitute(swname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
33 " make a copy of the swap file in Xswap
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
34 set binary
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
35 exe 'sp ' . swname
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
36 w! Xswap
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
37 set nobinary
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
38 return swname
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
39 endfunc
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
40
12616
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
41 " Inserts 10000 lines with text to fill the swap file with two levels of pointer
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
42 " blocks. Then recovers from the swap file and checks all text is restored.
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
43 "
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
44 " We need about 10000 lines of 100 characters to get two levels of pointer
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
45 " blocks.
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
46 func Test_swap_file()
12644
1fad9675d8fd patch 8.0.1200: tests switch the bell off twice
Christian Brabandt <cb@256bit.org>
parents: 12616
diff changeset
47 set fileformat=unix undolevels=-1
12616
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
48 edit! Xtest
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
49 let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
50 let i = 1
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
51 let linecount = 10000
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
52 while i <= linecount
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
53 call append(i - 1, i . text)
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
54 let i += 1
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
55 endwhile
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
56 $delete
24089
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
57
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
58 let swname = CopySwapfile()
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
59
12616
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
60 new
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
61 only!
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
62 bwipe! Xtest
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
63 call rename('Xswap', swname)
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
64 recover Xtest
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
65 call delete(swname)
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
66 let linedollar = line('$')
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
67 call assert_equal(linecount, linedollar)
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
68 if linedollar < linecount
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
69 let linecount = linedollar
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
70 endif
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
71 let i = 1
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
72 while i <= linecount
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
73 call assert_equal(i . text, getline(i))
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
74 let i += 1
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
75 endwhile
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
76
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
77 set undolevels&
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
78 enew! | only
4767939d10cc patch 8.0.1186: still quite a few old style tests
Christian Brabandt <cb@256bit.org>
parents: 11432
diff changeset
79 endfunc
21765
08940efa6b4e patch 8.2.1432: various inconsistencies in test files
Bram Moolenaar <Bram@vim.org>
parents: 18372
diff changeset
80
24089
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
81 func Test_nocatch_process_still_running()
24091
12a773f4f62f patch 8.2.2587: recover test fails on FreeBSD
Bram Moolenaar <Bram@vim.org>
parents: 24089
diff changeset
82 " sysinfo.uptime probably only works on Linux
24095
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
83 if !has('linux')
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
84 let g:skipped_reason = 'only works on Linux'
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
85 return
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
86 endif
24091
12a773f4f62f patch 8.2.2587: recover test fails on FreeBSD
Bram Moolenaar <Bram@vim.org>
parents: 24089
diff changeset
87 " the GUI dialog can't be handled
24095
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
88 if has('gui_running')
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
89 let g:skipped_reason = 'only works in the terminal'
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
90 return
467c3022fba6 patch 8.2.2589: recover test hangs in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 24091
diff changeset
91 endif
24089
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
92
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
93 " don't intercept existing swap file here
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
94 au! SwapExists
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
95
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
96 " Edit a file and grab its swapfile.
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
97 edit Xswaptest
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
98 call setline(1, ['a', 'b', 'c'])
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
99 let swname = CopySwapfile()
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
100
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
101 " Forget we edited this file
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
102 new
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
103 only!
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
104 bwipe! Xswaptest
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
105
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
106 call rename('Xswap', swname)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
107 call feedkeys('e', 'tL')
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
108 redir => editOutput
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
109 edit Xswaptest
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
110 redir END
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
111 call assert_match('E325: ATTENTION', editOutput)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
112 call assert_match('file name: .*Xswaptest', editOutput)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
113 call assert_match('process ID: \d* (STILL RUNNING)', editOutput)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
114
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
115 " Forget we edited this file
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
116 new
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
117 only!
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
118 bwipe! Xswaptest
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
119
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
120 " pretend we rebooted
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
121 call test_override("uptime", 0)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
122 sleep 1
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
123
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
124 call rename('Xswap', swname)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
125 call feedkeys('e', 'tL')
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
126 redir => editOutput
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
127 edit Xswaptest
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
128 redir END
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
129 call assert_match('E325: ATTENTION', editOutput)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
130 call assert_notmatch('(STILL RUNNING)', editOutput)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
131
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
132 call test_override("ALL", 0)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
133 call delete(swname)
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
134 endfunc
cdeec1389c8c patch 8.2.2586: process id may be invalid
Bram Moolenaar <Bram@vim.org>
parents: 21765
diff changeset
135
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
136 " Test for :recover with multiple swap files
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
137 func Test_recover_multiple_swap_files()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
138 CheckUnix
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
139 new Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
140 call setline(1, ['a', 'b', 'c'])
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
141 preserve
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
142 let b = readblob(swapname(''))
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
143 call writefile(b, '.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
144 call writefile(b, '.Xfile1.swn')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
145 call writefile(b, '.Xfile1.swo')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
146 %bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
147 call feedkeys(":recover Xfile1\<CR>3\<CR>q", 'xt')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
148 call assert_equal(['a', 'b', 'c'], getline(1, '$'))
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
149 " try using out-of-range number to select a swap file
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
150 bw!
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
151 call feedkeys(":recover Xfile1\<CR>4\<CR>q", 'xt')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
152 call assert_equal('Xfile1', @%)
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
153 call assert_equal([''], getline(1, '$'))
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
154 bw!
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
155 call feedkeys(":recover Xfile1\<CR>0\<CR>q", 'xt')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
156 call assert_equal('Xfile1', @%)
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
157 call assert_equal([''], getline(1, '$'))
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
158 bw!
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
159
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
160 call delete('.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
161 call delete('.Xfile1.swn')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
162 call delete('.Xfile1.swo')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
163 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
164
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
165 " Test for :recover using an empty swap file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
166 func Test_recover_empty_swap_file()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
167 CheckUnix
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
168 call writefile([], '.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
169 let msg = execute('recover Xfile1')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
170 call assert_match('Unable to read block 0 from .Xfile1.swp', msg)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
171 call assert_equal('Xfile1', @%)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
172 bw!
25810
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
173
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
174 " make sure there are no old swap files laying around
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
175 for f in glob('.sw?', 0, 1)
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
176 call delete(f)
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
177 endfor
2db73f521d49 patch 8.2.3440: recover test fails if there is an old swap file
Bram Moolenaar <Bram@vim.org>
parents: 25086
diff changeset
178
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
179 " :recover from an empty buffer
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
180 call assert_fails('recover', 'E305:')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
181 call delete('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
182 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
183
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
184 " Test for :recover using a corrupted swap file
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
185 " Refer to the comments in the memline.c file for the swap file headers
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
186 " definition.
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
187 func Test_recover_corrupted_swap_file()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
188 CheckUnix
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
189
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
190 " recover using a partial swap file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
191 call writefile(0z1234, '.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
192 call assert_fails('recover Xfile1', 'E295:')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
193 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
194
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
195 " recover using invalid content in the swap file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
196 call writefile([repeat('1', 2*1024)], '.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
197 call assert_fails('recover Xfile1', 'E307:')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
198 call delete('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
199
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
200 " :recover using a swap file with a corrupted header
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
201 edit Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
202 preserve
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
203 let sn = swapname('')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
204 let b = readblob(sn)
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
205 let save_b = copy(b)
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
206 bw!
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
207
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
208 " Not all fields are written in a system-independent manner. Detect whether
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
209 " the test is running on a little or big-endian system, so the correct
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
210 " corruption values can be set.
25086
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
211 let little_endian = b[1008:1011] == 0z33323130
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
212 " The swap file header fields can be either 32-bit or 64-bit.
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
213 let system_64bit = b[1012:1015] == 0z00000000
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
214
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
215 " clear the B0_MAGIC_LONG field
25086
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
216 if system_64bit
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
217 let b[1008:1015] = 0z00000000.00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
218 else
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
219 let b[1008:1011] = 0z00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
220 endif
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
221 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
222 let msg = execute('recover Xfile1')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
223 call assert_match('the file has been damaged', msg)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
224 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
225 call assert_equal([''], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
226 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
227
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
228 " reduce the page size
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
229 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
230 let b[12:15] = 0z00010000
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
231 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
232 let msg = execute('recover Xfile1')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
233 call assert_match('page size is smaller than minimum value', msg)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
234 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
235 call assert_equal([''], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
236 bw!
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
237
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
238 " clear the pointer ID
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
239 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
240 let b[4096:4097] = 0z0000
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
241 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
242 call assert_fails('recover Xfile1', 'E310:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
243 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
244 call assert_equal([''], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
245 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
246
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
247 " set the number of pointers in a pointer block to zero
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
248 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
249 let b[4098:4099] = 0z0000
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
250 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
251 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
252 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
253 call assert_equal(['???EMPTY BLOCK'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
254 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
255
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
256 " set the block number in a pointer entry to a negative number
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
257 let b = copy(save_b)
25086
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
258 if system_64bit
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
259 let b[4104:4111] = little_endian ? 0z00000000.00000080 : 0z80000000.00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
260 else
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
261 let b[4104:4107] = little_endian ? 0z00000080 : 0z80000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
262 endif
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
263 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
264 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
265 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
266 call assert_equal(['???LINES MISSING'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
267 bw!
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
268
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
269 " clear the data block ID
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
270 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
271 let b[8192:8193] = 0z0000
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
272 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
273 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
274 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
275 call assert_equal(['???BLOCK MISSING'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
276 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
277
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
278 " set the number of lines in the data block to zero
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
279 let b = copy(save_b)
25086
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
280 if system_64bit
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
281 let b[8208:8215] = 0z00000000.00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
282 else
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
283 let b[8208:8211] = 0z00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
284 endif
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
285 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
286 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
287 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
288 call assert_equal(['??? from here until ???END lines may have been inserted/deleted',
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
289 \ '???END'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
290 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
291
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
292 " use an invalid text start for the lines in a data block
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
293 let b = copy(save_b)
25086
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
294 if system_64bit
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
295 let b[8216:8219] = 0z00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
296 else
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
297 let b[8212:8215] = 0z00000000
088c1ddac618 patch 8.2.3080: recover test fails on 32bit systems
Bram Moolenaar <Bram@vim.org>
parents: 24886
diff changeset
298 endif
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
299 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
300 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
301 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
302 call assert_equal(['???'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
303 bw!
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
304
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
305 " use an incorrect text end (db_txt_end) for the data block
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
306 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
307 let b[8204:8207] = little_endian ? 0z80000000 : 0z00000080
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
308 call writefile(b, sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
309 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
310 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
311 call assert_equal(['??? from here until ???END lines may be messed up', '',
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
312 \ '???END'], getline(1, '$'))
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
313 bw!
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
314
24886
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
315 " remove the data block
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
316 let b = copy(save_b)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
317 call writefile(b[:8191], sn)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
318 call assert_fails('recover Xfile1', 'E312:')
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
319 call assert_equal('Xfile1', @%)
f2cb4885cecf patch 8.2.2981: recovery test is not run on big-endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24870
diff changeset
320 call assert_equal(['???MANY LINES MISSING'], getline(1, '$'))
24828
e0c43439fea6 patch 8.2.2952: recover test fails on big endian systems
Bram Moolenaar <Bram@vim.org>
parents: 24814
diff changeset
321
24814
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
322 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
323 call delete(sn)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
324 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
325
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
326 " Test for :recover using an encrypted swap file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
327 func Test_recover_encrypted_swap_file()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
328 CheckUnix
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
329
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
330 " Recover an encrypted file from the swap file without the original file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
331 new Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
332 call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
333 call setline(1, ['aaa', 'bbb', 'ccc'])
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
334 preserve
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
335 let b = readblob('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
336 call writefile(b, '.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
337 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
338 call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
339 call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
340 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
341 call delete('.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
342
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
343 " Recover an encrypted file from the swap file with the original file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
344 new Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
345 call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
346 call setline(1, ['aaa', 'bbb', 'ccc'])
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
347 update
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
348 call setline(1, ['111', '222', '333'])
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
349 preserve
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
350 let b = readblob('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
351 call writefile(b, '.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
352 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
353 call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
354 call assert_equal(['111', '222', '333'], getline(1, '$'))
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
355 call assert_true(&modified)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
356 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
357 call delete('.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
358 call delete('Xfile1')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
359 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
360
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
361 " Test for :recover using a unreadable swap file
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
362 func Test_recover_unreadble_swap_file()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
363 CheckUnix
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
364 CheckNotRoot
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
365 new Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
366 let b = readblob('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
367 call writefile(b, '.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
368 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
369 call setfperm('.Xfile1.swm', '-w-------')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
370 call assert_fails('recover Xfile1', 'E306:')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
371 call delete('.Xfile1.swm')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
372 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
373
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
374 " Test for using :recover when the original file and the swap file have the
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
375 " same contents.
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
376 func Test_recover_unmodified_file()
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
377 CheckUnix
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
378 call writefile(['aaa', 'bbb', 'ccc'], 'Xfile1')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
379 edit Xfile1
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
380 preserve
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
381 let b = readblob('.Xfile1.swp')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
382 %bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
383 call writefile(b, '.Xfile1.swz')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
384 let msg = execute('recover Xfile1')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
385 call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
386 call assert_false(&modified)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
387 call assert_match('Buffer contents equals file contents', msg)
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
388 bw!
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
389 call delete('Xfile1')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
390 call delete('.Xfile1.swz')
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
391 endfunc
4c5eec1ef612 patch 8.2.2945: some buffer related code is not tested
Bram Moolenaar <Bram@vim.org>
parents: 24095
diff changeset
392
24844
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
393 " Test for recovering a file when editing a symbolically linked file
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
394 func Test_recover_symbolic_link()
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
395 CheckUnix
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
396 call writefile(['aaa', 'bbb', 'ccc'], 'Xfile1')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
397 silent !ln -s Xfile1 Xfile2
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
398 edit Xfile2
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
399 call assert_equal('.Xfile1.swp', fnamemodify(swapname(''), ':t'))
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
400 preserve
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
401 let b = readblob('.Xfile1.swp')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
402 %bw!
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
403 call writefile([], 'Xfile1')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
404 call writefile(b, '.Xfile1.swp')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
405 silent! recover Xfile2
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
406 call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
407 call assert_true(&modified)
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
408 update
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
409 %bw!
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
410 call assert_equal(['aaa', 'bbb', 'ccc'], readfile('Xfile1'))
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
411 call delete('Xfile1')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
412 call delete('Xfile2')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
413 call delete('.Xfile1.swp')
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
414 endfunc
250c6ab76d19 patch 8.2.2960: swap file recovery not sufficiently tested
Bram Moolenaar <Bram@vim.org>
parents: 24828
diff changeset
415
24870
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
416 " Test for recovering a file when an autocmd moves the cursor to an invalid
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
417 " line. This used to result in an internal error (E315) which is fixed
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
418 " by 8.2.2966.
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
419 func Test_recover_invalid_cursor_pos()
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
420 call writefile([], 'Xfile1')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
421 edit Xfile1
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
422 preserve
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
423 let b = readblob('.Xfile1.swp')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
424 bw!
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
425 augroup Test
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
426 au!
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
427 au BufReadPost Xfile1 normal! 3G
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
428 augroup END
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
429 call writefile(range(1, 3), 'Xfile1')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
430 call writefile(b, '.Xfile1.swp')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
431 try
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
432 recover Xfile1
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
433 catch /E308:/
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
434 " this test is for the :E315 internal error.
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
435 " ignore the 'E308: Original file may have been changed' error
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
436 endtry
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
437 redraw!
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
438 augroup Test
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
439 au!
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
440 augroup END
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
441 augroup! Test
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
442 call delete('Xfile1')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
443 call delete('.Xfile1.swp')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
444 endfunc
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
445
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
446 " Test for recovering a buffer without a name
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
447 func Test_noname_buffer()
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
448 new
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
449 call setline(1, ['one', 'two'])
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
450 preserve
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
451 let sn = swapname('')
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
452 let b = readblob(sn)
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
453 bw!
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
454 call writefile(b, sn)
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
455 exe "recover " .. sn
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
456 call assert_equal(['one', 'two'], getline(1, '$'))
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
457 call delete(sn)
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
458 endfunc
13812db714fa patch 8.2.2973: fix for recovery and diff mode not tested
Bram Moolenaar <Bram@vim.org>
parents: 24844
diff changeset
459
21765
08940efa6b4e patch 8.2.1432: various inconsistencies in test files
Bram Moolenaar <Bram@vim.org>
parents: 18372
diff changeset
460 " vim: shiftwidth=2 sts=2 expandtab