mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.2981: recovery test is not run on big-endian systems
Problem: Recovery test is not run on big-endian systems.
Solution: Make it work on big-endian systems. (James McCoy, closes vim/vim#8368)
6654ca702c
Co-authored-by: James McCoy <jamessan@jamessan.com>
This commit is contained in:
parent
f12a45c45e
commit
fa17dc1e1b
@ -203,103 +203,102 @@ func Test_recover_corrupted_swap_file()
|
||||
let b = readblob(sn)
|
||||
let save_b = copy(b)
|
||||
bw!
|
||||
" Run these tests only on little-endian systems. These tests fail on a
|
||||
" big-endian system (IBM S390x system).
|
||||
if b[1008:1011] == 0z33323130
|
||||
\ && b[4096:4097] == 0z7470
|
||||
\ && b[8192:8193] == 0z6164
|
||||
|
||||
" clear the B0_MAGIC_LONG field
|
||||
let b[1008:1011] = 0z00000000
|
||||
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!
|
||||
" 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:1015] == 0z33323130.00000000
|
||||
|
||||
" 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 B0_MAGIC_LONG field
|
||||
let b[1008:1015] = 0z0000000000000000
|
||||
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!
|
||||
|
||||
" 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!
|
||||
" 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!
|
||||
|
||||
" 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!
|
||||
" 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 block number in a pointer entry to a negative number
|
||||
let b = copy(save_b)
|
||||
let b[4104:4111] = 0z00000000.00000080
|
||||
call writefile(b, sn)
|
||||
call assert_fails('recover Xfile1', 'E312:')
|
||||
call assert_equal('Xfile1', @%)
|
||||
call assert_equal(['???LINES MISSING'], 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!
|
||||
|
||||
" 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 block number in a pointer entry to a negative number
|
||||
let b = copy(save_b)
|
||||
let b[4104:4111] = little_endian ? 0z00000000.00000080 : 0z80000000.00000000
|
||||
call writefile(b, sn)
|
||||
call assert_fails('recover Xfile1', 'E312:')
|
||||
call assert_equal('Xfile1', @%)
|
||||
call assert_equal(['???LINES MISSING'], getline(1, '$'))
|
||||
bw!
|
||||
|
||||
" set the number of lines in the data block to zero
|
||||
let b = copy(save_b)
|
||||
let b[8208:8211] = 0z00000000
|
||||
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!
|
||||
" 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!
|
||||
|
||||
" use an invalid text start for the lines in a data block
|
||||
let b = copy(save_b)
|
||||
let b[8216:8219] = 0z00000000
|
||||
call writefile(b, sn)
|
||||
call assert_fails('recover Xfile1', 'E312:')
|
||||
call assert_equal('Xfile1', @%)
|
||||
call assert_equal(['???'], getline(1, '$'))
|
||||
bw!
|
||||
" set the number of lines in the data block to zero
|
||||
let b = copy(save_b)
|
||||
let b[8208:8215] = 0z00000000.00000000
|
||||
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 incorrect text end (db_txt_end) for the data block
|
||||
let b = copy(save_b)
|
||||
let b[8204:8207] = 0z80000000
|
||||
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!
|
||||
" use an invalid text start for the lines in a data block
|
||||
let b = copy(save_b)
|
||||
let b[8216:8219] = 0z00000000
|
||||
call writefile(b, sn)
|
||||
call assert_fails('recover Xfile1', 'E312:')
|
||||
call assert_equal('Xfile1', @%)
|
||||
call assert_equal(['???'], 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, '$'))
|
||||
endif
|
||||
" 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)
|
||||
|
Loading…
Reference in New Issue
Block a user