summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2021-06-12 14:05:41 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-12 14:05:41 +0200
commit6654ca702ca64c99965efcad3243ea5f95473252 (patch)
tree803d5ba55f78d7ea9a9bb4b4d7ed4cb155641d25
parent0b71955552c4b18f1853c1769ca64d696f8b60c1 (diff)
downloadvim-git-6654ca702ca64c99965efcad3243ea5f95473252.tar.gz
patch 8.2.2981: recovery test is not run on big-endian systemsv8.2.2981
Problem: Recovery test is not run on big-endian systems. Solution: Make it work on big-endian systems. (James McCoy, closes #8368)
-rw-r--r--src/testdir/test_recover.vim193
-rw-r--r--src/version.c2
2 files changed, 98 insertions, 97 deletions
diff --git a/src/testdir/test_recover.vim b/src/testdir/test_recover.vim
index 0df2082e3..2db662f01 100644
--- a/src/testdir/test_recover.vim
+++ b/src/testdir/test_recover.vim
@@ -198,103 +198,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!
-
- " 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)
- 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!
-
- " 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)
- 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!
-
- " 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!
-
- " 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!
-
- " 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
+
+ " 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
+
+ " 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!
+
+ " 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)
+ 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!
+
+ " 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)
+ 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 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!
+
+ " 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 ac5cc997b..15ee76aed 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2981,
+/**/
2980,
/**/
2979,