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 #8368)
diff --git a/src/testdir/test_recover.vim b/src/testdir/test_recover.vim
index 0df2082..2db662f 100644
--- a/src/testdir/test_recover.vim
+++ b/src/testdir/test_recover.vim
@@ -198,103 +198,102 @@
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)
diff --git a/src/version.c b/src/version.c
index ac5cc99..15ee76a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2981,
+/**/
2980,
/**/
2979,