diff options
author | ZyX <kp-pav@yandex.ru> | 2017-12-03 16:49:30 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-12-03 16:49:30 +0300 |
commit | c49e22d3964d6c7ae1c24e8ad01b5fec4ca40b57 (patch) | |
tree | b7e59c416d1435725c65f8952b6e55c70544d97e /test/functional/autocmd/termclose_spec.lua | |
parent | 62108c3b0be46936c83f6d4c98b44ceb5e6f77fd (diff) | |
parent | 27a577586eace687c47e7398845178208cae524a (diff) | |
download | rneovim-c49e22d3964d6c7ae1c24e8ad01b5fec4ca40b57.tar.gz rneovim-c49e22d3964d6c7ae1c24e8ad01b5fec4ca40b57.tar.bz2 rneovim-c49e22d3964d6c7ae1c24e8ad01b5fec4ca40b57.zip |
Merge branch 'master' into s-dash-stdin
Diffstat (limited to 'test/functional/autocmd/termclose_spec.lua')
-rw-r--r-- | test/functional/autocmd/termclose_spec.lua | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/test/functional/autocmd/termclose_spec.lua b/test/functional/autocmd/termclose_spec.lua index ecda1bffb7..c6c30494dd 100644 --- a/test/functional/autocmd/termclose_spec.lua +++ b/test/functional/autocmd/termclose_spec.lua @@ -14,17 +14,52 @@ describe('TermClose event', function() nvim('set_option', 'shellcmdflag', 'EXE') end) - local function eq_err(expected, actual) - if expected ~= actual then - error('expected: '..tostring(expected)..', actual: '..tostring(actual)) - end - end + it('triggers when fast-exiting terminal job stops', function() + command('autocmd TermClose * let g:test_termclose = 23') + command('terminal') + command('call jobstop(b:terminal_job_id)') + retry(nil, nil, function() eq(23, eval('g:test_termclose')) end) + end) - it('triggers when terminal job ends', function() + it('triggers when long-running terminal job gets stopped', function() + nvim('set_option', 'shell', 'sh') command('autocmd TermClose * let g:test_termclose = 23') command('terminal') command('call jobstop(b:terminal_job_id)') - retry(nil, nil, function() eq_err(23, eval('g:test_termclose')) end) + retry(nil, nil, function() eq(23, eval('g:test_termclose')) end) + end) + + it('kills job trapping SIGTERM', function() + nvim('set_option', 'shell', 'sh') + nvim('set_option', 'shellcmdflag', '-c') + command([[ let g:test_job = jobstart('trap "" TERM && echo 1 && sleep 60', { ]] + .. [[ 'on_stdout': {-> execute('let g:test_job_started = 1')}, ]] + .. [[ 'on_exit': {-> execute('let g:test_job_exited = 1')}}) ]]) + retry(nil, nil, function() eq(1, eval('get(g:, "test_job_started", 0)')) end) + + local start = os.time() + command('call jobstop(g:test_job)') + retry(nil, nil, function() eq(1, eval('get(g:, "test_job_exited", 0)')) end) + local duration = os.time() - start + eq(2, duration) + end) + + it('kills pty job trapping SIGHUP and SIGTERM', function() + nvim('set_option', 'shell', 'sh') + nvim('set_option', 'shellcmdflag', '-c') + command([[ let g:test_job = jobstart('trap "" HUP TERM && echo 1 && sleep 60', { ]] + .. [[ 'pty': 1,]] + .. [[ 'on_stdout': {-> execute('let g:test_job_started = 1')}, ]] + .. [[ 'on_exit': {-> execute('let g:test_job_exited = 1')}}) ]]) + retry(nil, nil, function() eq(1, eval('get(g:, "test_job_started", 0)')) end) + + local start = os.time() + command('call jobstop(g:test_job)') + retry(nil, nil, function() eq(1, eval('get(g:, "test_job_exited", 0)')) end) + local duration = os.time() - start + -- nvim starts sending kill after 2*KILL_TIMEOUT_MS + helpers.ok(4 <= duration) + helpers.ok(duration <= 7) -- <= 4 + delta because of slow CI end) it('reports the correct <abuf>', function() @@ -35,12 +70,12 @@ describe('TermClose event', function() eq(2, eval('bufnr("%")')) command('terminal') - retry(nil, nil, function() eq_err(3, eval('bufnr("%")')) end) + retry(nil, nil, function() eq(3, eval('bufnr("%")')) end) command('buffer 1') - retry(nil, nil, function() eq_err(1, eval('bufnr("%")')) end) + retry(nil, nil, function() eq(1, eval('bufnr("%")')) end) command('3bdelete!') - retry(nil, nil, function() eq_err('3', eval('g:abuf')) end) + retry(nil, nil, function() eq('3', eval('g:abuf')) end) end) end) |