This commit is contained in:
Justin M. Keyes
2018-03-24 23:06:36 +01:00
3 changed files with 59 additions and 3 deletions

View File

@@ -487,9 +487,6 @@ int emsg(const char_u *s_)
}
called_emsg = true;
if (emsg_silent == 0) {
ex_exitval = 1;
}
// If "emsg_severe" is TRUE: When an error exception is to be thrown,
// prefer this message over previous messages for the same command.
@@ -540,6 +537,8 @@ int emsg(const char_u *s_)
return true;
}
ex_exitval = 1;
// Reset msg_silent, an error causes messages to be switched back on.
msg_silent = 0;
cmd_silent = FALSE;

View File

@@ -46,3 +46,47 @@ function! Test_System()
call assert_fails('call system("wc -l", 99999)', 'E86:')
endfunction
function! Test_system_exmode()
if has('unix') " echo $? only works on Unix
let cmd = ' -es --headless -u NONE -c "source Xscript" +q; echo "result=$?"'
" Need to put this in a script, "catch" isn't found after an unknown
" function.
call writefile(['try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript')
let a = system(v:progpath . cmd)
call assert_match('result=0', a)
call assert_equal(0, v:shell_error)
endif
" Error before try does set error flag.
call writefile(['call nosuchfunction()', 'try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript')
if has('unix') " echo $? only works on Unix
let a = system(v:progpath . cmd)
call assert_notequal('0', a[0])
endif
let cmd = ' -es --headless -u NONE -c "source Xscript" +q'
let a = system(v:progpath . cmd)
call assert_notequal(0, v:shell_error)
call delete('Xscript')
if has('unix') " echo $? only works on Unix
let cmd = ' -es --headless -u NONE -c "call doesnotexist()" +q; echo $?'
let a = system(v:progpath. cmd)
call assert_notequal(0, a[0])
endif
let cmd = ' -es --headless -u NONE -c "call doesnotexist()" +q'
let a = system(v:progpath. cmd)
call assert_notequal(0, v:shell_error)
if has('unix') " echo $? only works on Unix
let cmd = ' -es --headless -u NONE -c "call doesnotexist()|let a=1" +q; echo $?'
let a = system(v:progpath. cmd)
call assert_notequal(0, a[0])
endif
let cmd = ' -es --headless -u NONE -c "call doesnotexist()|let a=1" +q'
let a = system(v:progpath. cmd)
call assert_notequal(0, v:shell_error)
endfunc

View File

@@ -1,6 +1,7 @@
local helpers = require('test.functional.helpers')(after_each)
local command = helpers.command
local feed_command = helpers.feed_command
local eval = helpers.eval
local eq = helpers.eq
local run = helpers.run
@@ -33,6 +34,18 @@ describe('v:exiting', function()
end
run(on_request, nil, on_setup)
end)
it('is 0 on exit from ex-mode involving try-catch', function()
local function on_setup()
command('autocmd VimLeavePre * call rpcrequest('..cid..', "")')
command('autocmd VimLeave * call rpcrequest('..cid..', "")')
feed_command('call feedkey("Q")','try', 'call NoFunction()', 'catch', 'echo "bye"', 'endtry', 'quit')
end
local function on_request()
eq(0, eval('v:exiting'))
return ''
end
run(on_request, nil, on_setup)
end)
end)
describe(':cquit', function()