" Test :recover

source check.vim

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:')

  " No error with empty 'directory' setting.
  set directory=
  split XtestOK
  close!

  set dir&
endfunc

" Make a copy of the current swap file to "Xswap".
" Return the name of the swap file.
func CopySwapfile()
  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
  return swname
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

  let swname = CopySwapfile()

  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

func Test_nocatch_process_still_running()
  " sysinfo.uptime probably only works on Linux
  if !has('linux')
    let g:skipped_reason = 'only works on Linux'
    return
  endif
  " the GUI dialog can't be handled
  if has('gui_running')
    let g:skipped_reason = 'only works in the terminal'
    return
  endif

  " don't intercept existing swap file here
  au! SwapExists

  " Edit a file and grab its swapfile.
  edit Xswaptest
  call setline(1, ['a', 'b', 'c'])
  let swname = CopySwapfile()

  " Forget we edited this file
  new
  only!
  bwipe! Xswaptest

  call rename('Xswap', swname)
  call feedkeys('e', 'tL')
  redir => editOutput
  edit Xswaptest
  redir END
  call assert_match('E325: ATTENTION', editOutput)
  call assert_match('file name: .*Xswaptest', editOutput)
  call assert_match('process ID: \d* (STILL RUNNING)', editOutput)

  " Forget we edited this file
  new
  only!
  bwipe! Xswaptest

  " pretend we rebooted
  call test_override("uptime", 0)
  sleep 1

  call rename('Xswap', swname)
  call feedkeys('e', 'tL')
  redir => editOutput
  edit Xswaptest
  redir END
  call assert_match('E325: ATTENTION', editOutput)
  call assert_notmatch('(STILL RUNNING)', editOutput)

  call test_override("ALL", 0)
  call delete(swname)
endfunc

" Test for :recover with multiple swap files
func Test_recover_multiple_swap_files()
  CheckUnix
  new Xfile1
  call setline(1, ['a', 'b', 'c'])
  preserve
  let b = readblob(swapname(''))
  call writefile(b, '.Xfile1.swm')
  call writefile(b, '.Xfile1.swn')
  call writefile(b, '.Xfile1.swo')
  %bw!
  call feedkeys(":recover Xfile1\<CR>3\<CR>q", 'xt')
  call assert_equal(['a', 'b', 'c'], getline(1, '$'))
  " try using out-of-range number to select a swap file
  bw!
  call feedkeys(":recover Xfile1\<CR>4\<CR>q", 'xt')
  call assert_equal('Xfile1', @%)
  call assert_equal([''], getline(1, '$'))
  bw!
  call feedkeys(":recover Xfile1\<CR>0\<CR>q", 'xt')
  call assert_equal('Xfile1', @%)
  call assert_equal([''], getline(1, '$'))
  bw!

  call delete('.Xfile1.swm')
  call delete('.Xfile1.swn')
  call delete('.Xfile1.swo')
endfunc

" Test for :recover using an empty swap file
func Test_recover_empty_swap_file()
  CheckUnix
  call writefile([], '.Xfile1.swp')
  let msg = execute('recover Xfile1')
  call assert_match('Unable to read block 0 from .Xfile1.swp', msg)
  call assert_equal('Xfile1', @%)
  bw!
  " :recover from an empty buffer
  call assert_fails('recover', 'E305:')
  call delete('.Xfile1.swp')
endfunc

" Test for :recover using a corrupted swap file
" Refer to the comments in the memline.c file for the swap file headers
" definition.
func Test_recover_corrupted_swap_file()
  CheckUnix

  " recover using a partial swap file
  call writefile(0z1234, '.Xfile1.swp')
  call assert_fails('recover Xfile1', 'E295:')
  bw!

  " recover using invalid content in the swap file
  call writefile([repeat('1', 2*1024)], '.Xfile1.swp')
  call assert_fails('recover Xfile1', 'E307:')
  call delete('.Xfile1.swp')

  " :recover using a swap file with a corrupted header
  edit Xfile1
  preserve
  let sn = swapname('')
  let b = readblob(sn)
  let save_b = copy(b)
  bw!

  " Not all fields are written in a system-independent manner.  Detect whether
  " the test is running on a little or big-endian system, so the correct
  " corruption values can be set.
  let little_endian = b[1008:1011] == 0z33323130
  " The swap file header fields can be either 32-bit or 64-bit.
  let system_64bit = b[1012:1015] == 0z00000000

  " clear the B0_MAGIC_LONG field
  if system_64bit
    let b[1008:1015] = 0z00000000.00000000
  else
    let b[1008:1011] = 0z00000000
  endif
  call writefile(b, sn)
  let msg = execute('recover Xfile1')
  call assert_match('the file has been damaged', msg)
  call assert_equal('Xfile1', @%)
  call assert_equal([''], getline(1, '$'))
  bw!

  " reduce the page size
  let b = copy(save_b)
  let b[12:15] = 0z00010000
  call writefile(b, sn)
  let msg = execute('recover Xfile1')
  call assert_match('page size is smaller than minimum value', msg)
  call assert_equal('Xfile1', @%)
  call assert_equal([''], getline(1, '$'))
  bw!

  " clear the pointer ID
  let b = copy(save_b)
  let b[4096:4097] = 0z0000
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E310:')
  call assert_equal('Xfile1', @%)
  call assert_equal([''], getline(1, '$'))
  bw!

  " set the number of pointers in a pointer block to zero
  let b = copy(save_b)
  let b[4098:4099] = 0z0000
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['???EMPTY BLOCK'], getline(1, '$'))
  bw!

  " set the block number in a pointer entry to a negative number
  let b = copy(save_b)
  if system_64bit
    let b[4104:4111] = little_endian ? 0z00000000.00000080 : 0z80000000.00000000
  else
    let b[4104:4107] = little_endian ? 0z00000080 : 0z80000000
  endif
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['???LINES MISSING'], getline(1, '$'))
  bw!

  " clear the data block ID
  let b = copy(save_b)
  let b[8192:8193] = 0z0000
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['???BLOCK MISSING'], getline(1, '$'))
  bw!

  " set the number of lines in the data block to zero
  let b = copy(save_b)
  if system_64bit
    let b[8208:8215] = 0z00000000.00000000
  else
    let b[8208:8211] = 0z00000000
  endif
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['??? from here until ???END lines may have been inserted/deleted',
        \ '???END'], getline(1, '$'))
  bw!

  " use an invalid text start for the lines in a data block
  let b = copy(save_b)
  if system_64bit
    let b[8216:8219] = 0z00000000
  else
    let b[8212:8215] = 0z00000000
  endif
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['???'], getline(1, '$'))
  bw!

  " use an incorrect text end (db_txt_end) for the data block
  let b = copy(save_b)
  let b[8204:8207] = little_endian ? 0z80000000 : 0z00000080
  call writefile(b, sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['??? from here until ???END lines may be messed up', '',
        \ '???END'], getline(1, '$'))
  bw!

  " remove the data block
  let b = copy(save_b)
  call writefile(b[:8191], sn)
  call assert_fails('recover Xfile1', 'E312:')
  call assert_equal('Xfile1', @%)
  call assert_equal(['???MANY LINES MISSING'], getline(1, '$'))

  bw!
  call delete(sn)
endfunc

" Test for :recover using an encrypted swap file
func Test_recover_encrypted_swap_file()
  CheckUnix

  " Recover an encrypted file from the swap file without the original file
  new Xfile1
  call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
  call setline(1, ['aaa', 'bbb', 'ccc'])
  preserve
  let b = readblob('.Xfile1.swp')
  call writefile(b, '.Xfile1.swm')
  bw!
  call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
  call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
  bw!
  call delete('.Xfile1.swm')

  " Recover an encrypted file from the swap file with the original file
  new Xfile1
  call feedkeys(":X\<CR>vim\<CR>vim\<CR>", 'xt')
  call setline(1, ['aaa', 'bbb', 'ccc'])
  update
  call setline(1, ['111', '222', '333'])
  preserve
  let b = readblob('.Xfile1.swp')
  call writefile(b, '.Xfile1.swm')
  bw!
  call feedkeys(":recover Xfile1\<CR>vim\<CR>\<CR>", 'xt')
  call assert_equal(['111', '222', '333'], getline(1, '$'))
  call assert_true(&modified)
  bw!
  call delete('.Xfile1.swm')
  call delete('Xfile1')
endfunc

" Test for :recover using a unreadable swap file
func Test_recover_unreadble_swap_file()
  CheckUnix
  CheckNotRoot
  new Xfile1
  let b = readblob('.Xfile1.swp')
  call writefile(b, '.Xfile1.swm')
  bw!
  call setfperm('.Xfile1.swm', '-w-------')
  call assert_fails('recover Xfile1', 'E306:')
  call delete('.Xfile1.swm')
endfunc

" Test for using :recover when the original file and the swap file have the
" same contents.
func Test_recover_unmodified_file()
  CheckUnix
  call writefile(['aaa', 'bbb', 'ccc'], 'Xfile1')
  edit Xfile1
  preserve
  let b = readblob('.Xfile1.swp')
  %bw!
  call writefile(b, '.Xfile1.swz')
  let msg = execute('recover Xfile1')
  call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
  call assert_false(&modified)
  call assert_match('Buffer contents equals file contents', msg)
  bw!
  call delete('Xfile1')
  call delete('.Xfile1.swz')
endfunc

" Test for recovering a file when editing a symbolically linked file
func Test_recover_symbolic_link()
  CheckUnix
  call writefile(['aaa', 'bbb', 'ccc'], 'Xfile1')
  silent !ln -s Xfile1 Xfile2
  edit Xfile2
  call assert_equal('.Xfile1.swp', fnamemodify(swapname(''), ':t'))
  preserve
  let b = readblob('.Xfile1.swp')
  %bw!
  call writefile([], 'Xfile1')
  call writefile(b, '.Xfile1.swp')
  silent! recover Xfile2
  call assert_equal(['aaa', 'bbb', 'ccc'], getline(1, '$'))
  call assert_true(&modified)
  update
  %bw!
  call assert_equal(['aaa', 'bbb', 'ccc'], readfile('Xfile1'))
  call delete('Xfile1')
  call delete('Xfile2')
  call delete('.Xfile1.swp')
endfunc

" Test for recovering a file when an autocmd moves the cursor to an invalid
" line. This used to result in an internal error (E315) which is fixed
" by 8.2.2966.
func Test_recover_invalid_cursor_pos()
  call writefile([], 'Xfile1')
  edit Xfile1
  preserve
  let b = readblob('.Xfile1.swp')
  bw!
  augroup Test
    au!
    au BufReadPost Xfile1 normal! 3G
  augroup END
  call writefile(range(1, 3), 'Xfile1')
  call writefile(b, '.Xfile1.swp')
  try
    recover Xfile1
  catch /E308:/
    " this test is for the :E315 internal error.
    " ignore the 'E308: Original file may have been changed' error
  endtry
  redraw!
  augroup Test
    au!
  augroup END
  augroup! Test
  call delete('Xfile1')
  call delete('.Xfile1.swp')
endfunc

" Test for recovering a buffer without a name
func Test_noname_buffer()
  new
  call setline(1, ['one', 'two'])
  preserve
  let sn = swapname('')
  let b = readblob(sn)
  bw!
  call writefile(b, sn)
  exe "recover " .. sn
  call assert_equal(['one', 'two'], getline(1, '$'))
  call delete(sn)
endfunc

" vim: shiftwidth=2 sts=2 expandtab
