vim-patch:8.2.1316: test 42 is still old style

Problem:    Test 42 is still old style.
Solution:   Turn it into a new style test. (Yegappan Lakshmanan, closes vim/vim#6561)
b61ef01cce

Including the Xtest2 -> Xfile2 change from Vim patch 8.2.1498.
This commit is contained in:
zeertzjq 2022-02-09 19:24:41 +08:00
parent 01b748f28f
commit 92e4394562

View File

@ -369,6 +369,134 @@ func Test_write_file_encoding()
%bw!
endfunc
" Test for writing and reading a file starting with a BOM.
" Byte Order Mark (BOM) character for various encodings is below:
" UTF-8 : EF BB BF
" UTF-16 (BE): FE FF
" UTF-16 (LE): FF FE
" UTF-32 (BE): 00 00 FE FF
" UTF-32 (LE): FF FE 00 00
func Test_readwrite_file_with_bom()
let utf8_bom = "\xEF\xBB\xBF"
let utf16be_bom = "\xFE\xFF"
let utf16le_bom = "\xFF\xFE"
let utf32be_bom = "\n\n\xFE\xFF"
let utf32le_bom = "\xFF\xFE\n\n"
let save_fileencoding = &fileencoding
set cpoptions+=S
" Check that editing a latin1 file doesn't see a BOM
call writefile(["\xFE\xFElatin-1"], 'Xtest1')
edit Xtest1
call assert_equal('latin1', &fileencoding)
call assert_equal(0, &bomb)
set fenc=latin1
write Xfile2
call assert_equal(["\xFE\xFElatin-1", ''], readfile('Xfile2', 'b'))
set bomb fenc=latin1
write Xtest3
call assert_equal(["\xFE\xFElatin-1", ''], readfile('Xtest3', 'b'))
set bomb&
" Check utf-8 BOM
%bw!
call writefile([utf8_bom .. "utf-8"], 'Xtest1')
edit! Xtest1
call assert_equal('utf-8', &fileencoding)
call assert_equal(1, &bomb)
call assert_equal('utf-8', getline(1))
set fenc=latin1
write! Xfile2
call assert_equal(['utf-8', ''], readfile('Xfile2', 'b'))
set fenc=utf-8
w! Xtest3
call assert_equal([utf8_bom .. "utf-8", ''], readfile('Xtest3', 'b'))
" Check utf-8 with an error (will fall back to latin-1)
%bw!
call writefile([utf8_bom .. "utf-8\x80err"], 'Xtest1')
edit! Xtest1
call assert_equal('latin1', &fileencoding)
call assert_equal(0, &bomb)
call assert_equal("\xC3\xAF\xC2\xBB\xC2\xBFutf-8\xC2\x80err", getline(1))
set fenc=latin1
write! Xfile2
call assert_equal([utf8_bom .. "utf-8\x80err", ''], readfile('Xfile2', 'b'))
set fenc=utf-8
w! Xtest3
call assert_equal(["\xC3\xAF\xC2\xBB\xC2\xBFutf-8\xC2\x80err", ''],
\ readfile('Xtest3', 'b'))
" Check ucs-2 BOM
%bw!
call writefile([utf16be_bom .. "\nu\nc\ns\n-\n2\n"], 'Xtest1')
edit! Xtest1
call assert_equal('utf-16', &fileencoding)
call assert_equal(1, &bomb)
call assert_equal('ucs-2', getline(1))
set fenc=latin1
write! Xfile2
call assert_equal(["ucs-2", ''], readfile('Xfile2', 'b'))
set fenc=ucs-2
w! Xtest3
call assert_equal([utf16be_bom .. "\nu\nc\ns\n-\n2\n", ''],
\ readfile('Xtest3', 'b'))
" Check ucs-2le BOM
%bw!
call writefile([utf16le_bom .. "u\nc\ns\n-\n2\nl\ne\n"], 'Xtest1')
" Need to add a NUL byte after the NL byte
call writefile(0z00, 'Xtest1', 'a')
edit! Xtest1
call assert_equal('utf-16le', &fileencoding)
call assert_equal(1, &bomb)
call assert_equal('ucs-2le', getline(1))
set fenc=latin1
write! Xfile2
call assert_equal(["ucs-2le", ''], readfile('Xfile2', 'b'))
set fenc=ucs-2le
w! Xtest3
call assert_equal([utf16le_bom .. "u\nc\ns\n-\n2\nl\ne\n", "\n"],
\ readfile('Xtest3', 'b'))
" Check ucs-4 BOM
%bw!
call writefile([utf32be_bom .. "\n\n\nu\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\n"], 'Xtest1')
edit! Xtest1
call assert_equal('ucs-4', &fileencoding)
call assert_equal(1, &bomb)
call assert_equal('ucs-4', getline(1))
set fenc=latin1
write! Xfile2
call assert_equal(["ucs-4", ''], readfile('Xfile2', 'b'))
set fenc=ucs-4
w! Xtest3
call assert_equal([utf32be_bom .. "\n\n\nu\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\n", ''], readfile('Xtest3', 'b'))
" Check ucs-4le BOM
%bw!
call writefile([utf32le_bom .. "u\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\nl\n\n\ne\n\n\n"], 'Xtest1')
" Need to add three NUL bytes after the NL byte
call writefile(0z000000, 'Xtest1', 'a')
edit! Xtest1
call assert_equal('ucs-4le', &fileencoding)
call assert_equal(1, &bomb)
call assert_equal('ucs-4le', getline(1))
set fenc=latin1
write! Xfile2
call assert_equal(["ucs-4le", ''], readfile('Xfile2', 'b'))
set fenc=ucs-4le
w! Xtest3
call assert_equal([utf32le_bom .. "u\n\n\nc\n\n\ns\n\n\n-\n\n\n4\n\n\nl\n\n\ne\n\n\n", "\n\n\n"], readfile('Xtest3', 'b'))
set cpoptions-=S
let &fileencoding = save_fileencoding
call delete('Xtest1')
call delete('Xfile2')
call delete('Xtest3')
%bw!
endfunc
" Check that buffer is written before triggering QuitPre
func Test_wq_quitpre_autocommand()
edit Xsomefile