local t = require('test.testutil') local n = require('test.functional.testnvim')() local tt = require('test.functional.testterm') local assert_alive = n.assert_alive local clear = n.clear local feed = n.feed local feed_command = n.feed_command local command = n.command local eq = t.eq local eval = n.eval local api = n.api local sleep = vim.uv.sleep local retry = t.retry local is_os = t.is_os describe(':terminal', function() local screen before_each(function() clear() -- set the statusline to a constant value because of variables like pid -- and current directory and to improve visibility of splits api.nvim_set_option_value('statusline', '==========', {}) screen = tt.setup_screen(3) command('highlight StatusLine NONE') command('highlight StatusLineNC NONE') command('highlight StatusLineTerm NONE') command('highlight StatusLineTermNC NONE') command('highlight VertSplit NONE') end) it('next to a closing window', function() command('split') command('terminal') command('vsplit foo') eq(3, eval("winnr('$')")) feed('ZQ') -- Close split, should not crash. #7538 assert_alive() end) it('does not change size on WinEnter', function() feed('') feed('k') feed_command('2split') screen:expect([[ ^tty ready | rows: 5, cols: 50 | ========== | tty ready | rows: 5, cols: 50 | {2: } | |*2 ========== | :2split | ]]) feed_command('wincmd p') screen:expect([[ tty ready | rows: 5, cols: 50 | ========== | ^tty ready | rows: 5, cols: 50 | {2: } | |*2 ========== | :wincmd p | ]]) end) it('does not change size if updated when not visible in any window #19665', function() local channel = api.nvim_get_option_value('channel', {}) command('enew') sleep(100) api.nvim_chan_send(channel, 'foo') sleep(100) command('bprevious') screen:expect([[ tty ready | ^foo{2: } | |*8 ]]) end) it('forwards resize request to the program', function() feed([[G]]) local w1, h1 = screen._width - 3, screen._height - 2 local w2, h2 = w1 - 6, h1 - 3 if is_os('win') then -- win: SIGWINCH is unreliable, use a weaker test. #7506 retry(3, 30000, function() screen:try_resize(w1, h1) screen:expect { any = 'rows: 7, cols: 47' } screen:try_resize(w2, h2) screen:expect { any = 'rows: 4, cols: 41' } end) return end screen:try_resize(w1, h1) screen:expect([[ tty ready | rows: 7, cols: 47 | {2: } | |*3 ^ | | ]]) screen:try_resize(w2, h2) screen:expect([[ tty ready | rows: 7, cols: 47 | rows: 4, cols: 41 | {2:^ } | | ]]) end) it('stays in terminal mode with wincmd', function() command('terminal') command('split') command('terminal') feed('awincmd j') eq(2, eval('winnr()')) eq('t', eval('mode(1)')) end) end)