mirror of
https://github.com/neovim/neovim.git
synced 2026-02-23 02:44:53 +10:00
This is a better way to prevent parallel tests from interfering with each other, as there are many ways files can be created and deleted in tests, so enforcing different file names is hard. Using $TMPDIR can also work in most cases, but 'backipskip' etc. have special defaults for $TMPDIR. Symlink runtime/, src/, test/ and README.md to Xtest_xdg dir to make tests more convenient (and symlinking test/ is required for busted). Also, use README.md instead of test/README.md in the Ex mode inccommand test, as test/README.md no longer contains 'N' char.
86 lines
2.6 KiB
Lua
86 lines
2.6 KiB
Lua
-- Test for BufWritePre autocommand that deletes or unloads the buffer.
|
|
-- Test for BufUnload autocommand that unloads all other buffers.
|
|
|
|
local t = require('test.testutil')
|
|
local n = require('test.functional.testnvim')()
|
|
|
|
local source = n.source
|
|
local clear, command, expect, eq, eval = n.clear, n.command, n.expect, t.eq, n.eval
|
|
local write_file, dedent = t.write_file, t.dedent
|
|
local read_file = t.read_file
|
|
local expect_exit = n.expect_exit
|
|
|
|
describe('autocommands that delete and unload buffers:', function()
|
|
local test_file = 'Xtest-008_autocommands.out'
|
|
local text1 = dedent([[
|
|
start of Xxx1
|
|
test
|
|
end of Xxx]])
|
|
local text2 = text1:gsub('1', '2')
|
|
setup(function()
|
|
write_file('Xxx1', text1 .. '\n')
|
|
write_file('Xxx2', text2 .. '\n')
|
|
end)
|
|
teardown(function()
|
|
os.remove(test_file)
|
|
os.remove('Xxx1')
|
|
os.remove('Xxx2')
|
|
end)
|
|
before_each(clear)
|
|
|
|
it('BufWritePre, BufUnload', function()
|
|
command('au BufWritePre Xxx1 bunload')
|
|
command('au BufWritePre Xxx2 bwipe')
|
|
command('e Xxx2')
|
|
eq('Xxx2', eval('bufname("%")'))
|
|
command('e Xxx1')
|
|
eq('Xxx1', eval('bufname("%")'))
|
|
-- The legacy test file did not check the error message.
|
|
command('let v:errmsg = "no error"')
|
|
command('silent! write')
|
|
eq('E203: Autocommands deleted or unloaded buffer to be written', eval('v:errmsg'))
|
|
eq('Xxx2', eval('bufname("%")'))
|
|
expect(text2)
|
|
-- Start editing Xxx2.
|
|
command('e! Xxx2')
|
|
-- The legacy test file did not check the error message.
|
|
command('let v:errmsg = "no error"')
|
|
-- Write Xxx2, will delete the buffer and give an error msg.
|
|
command('silent! write')
|
|
eq('E203: Autocommands deleted or unloaded buffer to be written', eval('v:errmsg'))
|
|
eq('Xxx1', eval('bufname("%")'))
|
|
expect(text1)
|
|
end)
|
|
it('BufUnload, VimLeave', function()
|
|
source([[
|
|
func CloseAll()
|
|
let i = 0
|
|
while i <= bufnr('$')
|
|
if i != bufnr('%') && bufloaded(i)
|
|
exe i . "bunload"
|
|
endif
|
|
let i += 1
|
|
endwhile
|
|
endfunc
|
|
func WriteToOut()
|
|
edit! ]] .. test_file .. [[
|
|
|
|
$put ='VimLeave done'
|
|
write
|
|
endfunc
|
|
set shada='100
|
|
au BufUnload * call CloseAll()
|
|
au VimLeave * call WriteToOut()
|
|
]])
|
|
-- Must disable 'hidden' so that the BufUnload autocmd is triggered between
|
|
-- each :edit
|
|
command('set nohidden')
|
|
command('silent! edit Xxx2')
|
|
command('silent! edit Xxx1')
|
|
command('silent! edit README.md') -- an existing file
|
|
command('silent! split new2')
|
|
expect_exit(command, 'silent! quit')
|
|
eq('VimLeave done', string.match(read_file(test_file), '^%s*(.-)%s*$'))
|
|
end)
|
|
end)
|