aboutsummaryrefslogtreecommitdiff
path: root/test/functional/terminal
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2024-01-03 03:05:22 -0800
committerGitHub <noreply@github.com>2024-01-03 03:05:22 -0800
commita064ed622927b4c5e30165abbe54db841359c71f (patch)
tree76973648e9ad684068457ff021b4d13281bfad84 /test/functional/terminal
parentee2127363463b89ba9d5071babcb9bd16c4db691 (diff)
parent04f2f864e270e772c6326cefdf24947f0130e492 (diff)
downloadrneovim-a064ed622927b4c5e30165abbe54db841359c71f.tar.gz
rneovim-a064ed622927b4c5e30165abbe54db841359c71f.tar.bz2
rneovim-a064ed622927b4c5e30165abbe54db841359c71f.zip
Merge #26398 lintlua for test/ dir
Diffstat (limited to 'test/functional/terminal')
-rw-r--r--test/functional/terminal/altscreen_spec.lua30
-rw-r--r--test/functional/terminal/api_spec.lua42
-rw-r--r--test/functional/terminal/buffer_spec.lua178
-rw-r--r--test/functional/terminal/channel_spec.lua136
-rw-r--r--test/functional/terminal/cursor_spec.lua284
-rw-r--r--test/functional/terminal/edit_spec.lua24
-rw-r--r--test/functional/terminal/ex_terminal_spec.lua88
-rw-r--r--test/functional/terminal/helpers.lua108
-rw-r--r--test/functional/terminal/highlight_spec.lua166
-rw-r--r--test/functional/terminal/mouse_spec.lua2
-rw-r--r--test/functional/terminal/scrollback_spec.lua102
-rw-r--r--test/functional/terminal/tui_spec.lua1209
-rw-r--r--test/functional/terminal/window_spec.lua16
-rw-r--r--test/functional/terminal/window_split_tab_spec.lua9
14 files changed, 1450 insertions, 944 deletions
diff --git a/test/functional/terminal/altscreen_spec.lua b/test/functional/terminal/altscreen_spec.lua
index 21edd522c0..f626a463c5 100644
--- a/test/functional/terminal/altscreen_spec.lua
+++ b/test/functional/terminal/altscreen_spec.lua
@@ -6,7 +6,9 @@ local feed_data = thelpers.feed_data
local enter_altscreen = thelpers.enter_altscreen
local exit_altscreen = thelpers.exit_altscreen
-if helpers.skip(helpers.is_os('win')) then return end
+if helpers.skip(helpers.is_os('win')) then
+ return
+end
describe(':terminal altscreen', function()
local screen
@@ -14,8 +16,17 @@ describe(':terminal altscreen', function()
before_each(function()
clear()
screen = thelpers.screen_setup()
- feed_data({'line1', 'line2', 'line3', 'line4', 'line5', 'line6',
- 'line7', 'line8', ''})
+ feed_data({
+ 'line1',
+ 'line2',
+ 'line3',
+ 'line4',
+ 'line5',
+ 'line6',
+ 'line7',
+ 'line8',
+ '',
+ })
screen:expect([[
line4 |
line5 |
@@ -73,8 +84,17 @@ describe(':terminal altscreen', function()
describe('with lines printed after the screen height limit', function()
before_each(function()
- feed_data({'line9', 'line10', 'line11', 'line12', 'line13',
- 'line14', 'line15', 'line16', ''})
+ feed_data({
+ 'line9',
+ 'line10',
+ 'line11',
+ 'line12',
+ 'line13',
+ 'line14',
+ 'line15',
+ 'line16',
+ '',
+ })
screen:expect([[
line12 |
line13 |
diff --git a/test/functional/terminal/api_spec.lua b/test/functional/terminal/api_spec.lua
index aa46ccc8a8..79cc5016da 100644
--- a/test/functional/terminal/api_spec.lua
+++ b/test/functional/terminal/api_spec.lua
@@ -2,49 +2,57 @@ local helpers = require('test.functional.helpers')(after_each)
local child_session = require('test.functional.terminal.helpers')
local ok = helpers.ok
-if helpers.skip(helpers.is_os('win')) then return end
+if helpers.skip(helpers.is_os('win')) then
+ return
+end
describe('api', function()
local screen
- local socket_name = "./Xtest_functional_api.sock"
+ local socket_name = './Xtest_functional_api.sock'
before_each(function()
helpers.clear()
os.remove(socket_name)
screen = child_session.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', helpers.nvim_set .. ' notermguicolors',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ helpers.nvim_set .. ' notermguicolors',
})
end)
after_each(function()
os.remove(socket_name)
end)
- it("qa! RPC request during insert-mode", function()
- screen:expect{grid=[[
+ it('qa! RPC request during insert-mode', function()
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*4
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Start the socket from the child nvim.
- child_session.feed_data(":echo serverstart('"..socket_name.."')\n")
+ child_session.feed_data(":echo serverstart('" .. socket_name .. "')\n")
-- Wait for socket creation.
screen:expect([[
{1: } |
{4:~ }|*4
- ]]..socket_name..[[ |
+ ]] .. socket_name .. [[ |
{3:-- TERMINAL --} |
]])
local socket_session1 = helpers.connect(socket_name)
local socket_session2 = helpers.connect(socket_name)
- child_session.feed_data("i[tui] insert-mode")
+ child_session.feed_data('i[tui] insert-mode')
-- Wait for stdin to be processed.
screen:expect([[
[tui] insert-mode{1: } |
@@ -53,11 +61,11 @@ describe('api', function()
{3:-- TERMINAL --} |
]])
- ok((socket_session1:request("nvim_ui_attach", 42, 6, {rgb=true})))
- ok((socket_session2:request("nvim_ui_attach", 25, 30, {rgb=true})))
+ ok((socket_session1:request('nvim_ui_attach', 42, 6, { rgb = true })))
+ ok((socket_session2:request('nvim_ui_attach', 25, 30, { rgb = true })))
- socket_session1:notify("nvim_input", "\n[socket 1] this is more than 25 columns")
- socket_session2:notify("nvim_input", "\n[socket 2] input")
+ socket_session1:notify('nvim_input', '\n[socket 1] this is more than 25 columns')
+ socket_session2:notify('nvim_input', '\n[socket 2] input')
screen:expect([[
[tui] insert-mode |
@@ -69,6 +77,6 @@ describe('api', function()
{3:-- TERMINAL --} |
]])
- socket_session1:request("nvim_command", "qa!")
+ socket_session1:request('nvim_command', 'qa!')
end)
end)
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index 02958a69e0..480ca96289 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -32,13 +32,19 @@ describe(':terminal buffer', function()
it('terminal-mode forces various options', function()
feed([[<C-\><C-N>]])
command('setlocal cursorline cursorlineopt=both cursorcolumn scrolloff=4 sidescrolloff=7')
- eq({ 'both', 1, 1, 4, 7 }, eval('[&l:cursorlineopt, &l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]'))
+ eq(
+ { 'both', 1, 1, 4, 7 },
+ eval('[&l:cursorlineopt, &l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]')
+ )
eq('nt', eval('mode(1)'))
-- Enter terminal-mode ("insert" mode in :terminal).
feed('i')
eq('t', eval('mode(1)'))
- eq({ 'number', 1, 0, 0, 0 }, eval('[&l:cursorlineopt, &l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]'))
+ eq(
+ { 'number', 1, 0, 0, 0 },
+ eval('[&l:cursorlineopt, &l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]')
+ )
end)
it('terminal-mode does not change cursorlineopt if cursorline is disabled', function()
@@ -170,9 +176,7 @@ describe(':terminal buffer', function()
-- Save the buffer number of the terminal for later testing.
local tbuf = eval('bufnr("%")')
- local exitcmd = is_os('win')
- and "['cmd', '/c', 'exit']"
- or "['sh', '-c', 'exit']"
+ local exitcmd = is_os('win') and "['cmd', '/c', 'exit']" or "['sh', '-c', 'exit']"
source([[
function! SplitWindow(id, data, event)
new
@@ -180,7 +184,7 @@ describe(':terminal buffer', function()
endfunction
startinsert
- call jobstart(]]..exitcmd..[[, {'on_exit': function("SplitWindow")})
+ call jobstart(]] .. exitcmd .. [[, {'on_exit': function("SplitWindow")})
call feedkeys("\<C-\>", 't') " vim will expect <C-n>, but be exited out of
" the terminal before it can be entered.
]])
@@ -197,7 +201,7 @@ describe(':terminal buffer', function()
]])
neq(tbuf, eval('bufnr("%")'))
- feed_command('quit!') -- Should exit the new window, not the terminal.
+ feed_command('quit!') -- Should exit the new window, not the terminal.
eq(tbuf, eval('bufnr("%")'))
end)
@@ -212,18 +216,18 @@ describe(':terminal buffer', function()
feed_command('terminal')
feed('<c-\\><c-n>')
feed_command('confirm bdelete')
- screen:expect{any='Close "term://'}
+ screen:expect { any = 'Close "term://' }
end)
it('with &confirm', function()
feed_command('terminal')
feed('<c-\\><c-n>')
feed_command('bdelete')
- screen:expect{any='E89'}
+ screen:expect { any = 'E89' }
feed('<cr>')
eq('terminal', eval('&buftype'))
feed_command('set confirm | bdelete')
- screen:expect{any='Close "term://'}
+ screen:expect { any = 'Close "term://' }
feed('y')
neq('terminal', eval('&buftype'))
end)
@@ -243,11 +247,15 @@ describe(':terminal buffer', function()
end)
it('requires bang (!) to close a running job #15402', function()
- skip(is_os('win'), "Test freezes the CI and makes it time out")
+ skip(is_os('win'), 'Test freezes the CI and makes it time out')
eq('Vim(wqall):E948: Job still running', exc_exec('wqall'))
for _, cmd in ipairs({ 'bdelete', '%bdelete', 'bwipeout', 'bunload' }) do
- matches('^Vim%('..cmd:gsub('%%', '')..'%):E89: term://.*tty%-test.* will be killed %(add %! to override%)$',
- exc_exec(cmd))
+ matches(
+ '^Vim%('
+ .. cmd:gsub('%%', '')
+ .. '%):E89: term://.*tty%-test.* will be killed %(add %! to override%)$',
+ exc_exec(cmd)
+ )
end
command('call jobstop(&channel)')
assert(0 >= eval('jobwait([&channel], 1000)[0]'))
@@ -264,42 +272,50 @@ describe(':terminal buffer', function()
it('does not segfault when pasting empty register #13955', function()
feed('<c-\\><c-n>')
- feed_command('put a') -- register a is empty
+ feed_command('put a') -- register a is empty
helpers.assert_alive()
end)
it([[can use temporary normal mode <c-\><c-o>]], function()
eq('t', funcs.mode(1))
feed [[<c-\><c-o>]]
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
{2:^ } |
|*4
{3:-- (terminal) --} |
- ]]}
+ ]],
+ }
eq('ntT', funcs.mode(1))
feed [[:let g:x = 17]]
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
{2: } |
|*4
:let g:x = 17^ |
- ]]}
+ ]],
+ }
feed [[<cr>]]
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
{1: } |
|*4
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
eq('t', funcs.mode(1))
end)
it('writing to an existing file with :w fails #13549', function()
- eq('Vim(write):E13: File exists (add ! to override)',
- pcall_err(command, 'write test/functional/fixtures/tty-test.c'))
+ eq(
+ 'Vim(write):E13: File exists (add ! to override)',
+ pcall_err(command, 'write test/functional/fixtures/tty-test.c')
+ )
end)
end)
@@ -307,7 +323,7 @@ describe('No heap-buffer-overflow when using', function()
local testfilename = 'Xtestfile-functional-terminal-buffers_spec'
before_each(function()
- write_file(testfilename, "aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+ write_file(testfilename, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa')
end)
after_each(function()
@@ -373,7 +389,9 @@ it('terminal truncates number of composing characters to 5', function()
local chan = meths.open_term(0, {})
local composing = ('a̳'):sub(2)
meths.chan_send(chan, 'a' .. composing:rep(8))
- retry(nil, nil, function() eq('a' .. composing:rep(5), meths.get_current_line()) end)
+ retry(nil, nil, function()
+ eq('a' .. composing:rep(5), meths.get_current_line())
+ end)
end)
describe('terminal input', function()
@@ -404,33 +422,79 @@ describe('terminal input', function()
it('sends various special keys with modifiers', function()
clear()
local screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', 'set notermguicolors',
- '--cmd', 'startinsert',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set notermguicolors',
+ '--cmd',
+ 'startinsert',
})
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] 0,1 All}|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
for _, key in ipairs({
- '<M-Tab>', '<M-CR>', '<M-Esc>',
- '<BS>', '<S-Tab>', '<Insert>', '<Del>', '<PageUp>', '<PageDown>',
- '<S-Up>', '<C-Up>', '<Up>', '<S-Down>', '<C-Down>', '<Down>',
- '<S-Left>', '<C-Left>', '<Left>', '<S-Right>', '<C-Right>', '<Right>',
- '<S-Home>', '<C-Home>', '<Home>', '<S-End>', '<C-End>', '<End>',
- '<C-LeftMouse>', '<C-LeftRelease>', '<2-LeftMouse>', '<2-LeftRelease>',
- '<S-RightMouse>', '<S-RightRelease>', '<2-RightMouse>', '<2-RightRelease>',
- '<M-MiddleMouse>', '<M-MiddleRelease>', '<2-MiddleMouse>', '<2-MiddleRelease>',
- '<S-ScrollWheelUp>', '<S-ScrollWheelDown>', '<ScrollWheelUp>', '<ScrollWheelDown>',
- '<S-ScrollWheelLeft>', '<S-ScrollWheelRight>', '<ScrollWheelLeft>', '<ScrollWheelRight>',
+ '<M-Tab>',
+ '<M-CR>',
+ '<M-Esc>',
+ '<BS>',
+ '<S-Tab>',
+ '<Insert>',
+ '<Del>',
+ '<PageUp>',
+ '<PageDown>',
+ '<S-Up>',
+ '<C-Up>',
+ '<Up>',
+ '<S-Down>',
+ '<C-Down>',
+ '<Down>',
+ '<S-Left>',
+ '<C-Left>',
+ '<Left>',
+ '<S-Right>',
+ '<C-Right>',
+ '<Right>',
+ '<S-Home>',
+ '<C-Home>',
+ '<Home>',
+ '<S-End>',
+ '<C-End>',
+ '<End>',
+ '<C-LeftMouse>',
+ '<C-LeftRelease>',
+ '<2-LeftMouse>',
+ '<2-LeftRelease>',
+ '<S-RightMouse>',
+ '<S-RightRelease>',
+ '<2-RightMouse>',
+ '<2-RightRelease>',
+ '<M-MiddleMouse>',
+ '<M-MiddleRelease>',
+ '<2-MiddleMouse>',
+ '<2-MiddleRelease>',
+ '<S-ScrollWheelUp>',
+ '<S-ScrollWheelDown>',
+ '<ScrollWheelUp>',
+ '<ScrollWheelDown>',
+ '<S-ScrollWheelLeft>',
+ '<S-ScrollWheelRight>',
+ '<ScrollWheelLeft>',
+ '<ScrollWheelRight>',
}) do
feed('<CR><C-V>' .. key)
- retry(nil, nil, function() eq(key, meths.get_current_line()) end)
+ retry(nil, nil, function()
+ eq(key, meths.get_current_line())
+ end)
end
end)
end)
@@ -443,7 +507,7 @@ if is_os('win') then
clear()
feed_command('set modifiable swapfile undolevels=20')
poke_eventloop()
- local cmd = { "cmd.exe", "/K", "PROMPT=$g$s" }
+ local cmd = { 'cmd.exe', '/K', 'PROMPT=$g$s' }
screen = thelpers.screen_setup(nil, cmd)
end)
@@ -508,16 +572,22 @@ describe('termopen()', function()
it('disallowed when textlocked and in cmdwin buffer', function()
command("autocmd TextYankPost <buffer> ++once call termopen('foo')")
- matches("Vim%(call%):E565: Not allowed to change text or change window$",
- pcall_err(command, "normal! yy"))
+ matches(
+ 'Vim%(call%):E565: Not allowed to change text or change window$',
+ pcall_err(command, 'normal! yy')
+ )
- feed("q:")
- eq("Vim:E11: Invalid in command-line window; <CR> executes, CTRL-C quits",
- pcall_err(funcs.termopen, "bar"))
+ feed('q:')
+ eq(
+ 'Vim:E11: Invalid in command-line window; <CR> executes, CTRL-C quits',
+ pcall_err(funcs.termopen, 'bar')
+ )
end)
describe('$COLORTERM value', function()
- if skip(is_os('win'), 'Not applicable for Windows') then return end
+ if skip(is_os('win'), 'Not applicable for Windows') then
+ return
+ end
before_each(function()
-- Outer value should never be propagated to :terminal
@@ -528,8 +598,14 @@ describe('termopen()', function()
local screen = Screen.new(50, 4)
screen:attach()
funcs.termopen({
- nvim_prog, '-u', 'NONE', '-i', 'NONE', '--headless',
- '-c', 'echo $COLORTERM | quit',
+ nvim_prog,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--headless',
+ '-c',
+ 'echo $COLORTERM | quit',
}, opts)
screen:expect(([[
^%s{MATCH:%%s+}|
diff --git a/test/functional/terminal/channel_spec.lua b/test/functional/terminal/channel_spec.lua
index cb63c35deb..b2553bf2e0 100644
--- a/test/functional/terminal/channel_spec.lua
+++ b/test/functional/terminal/channel_spec.lua
@@ -26,9 +26,11 @@ describe('terminal channel is closed and later released if', function()
command([[let id = nvim_open_term(0, {})]])
local chans = eval('len(nvim_list_chans())')
-- channel hasn't been released yet
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[bdelete! | call chansend(id, 'test')]]))
- feed('<Ignore>') -- add input to separate two RPC requests
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[bdelete! | call chansend(id, 'test')]])
+ )
+ feed('<Ignore>') -- add input to separate two RPC requests
-- channel has been released after one main loop iteration
eq(chans - 1, eval('len(nvim_list_chans())'))
end)
@@ -37,15 +39,17 @@ describe('terminal channel is closed and later released if', function()
command('let id = nvim_open_term(0, {})')
local chans = eval('len(nvim_list_chans())')
-- channel has been closed but not released
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[call chanclose(id) | call chansend(id, 'test')]]))
- screen:expect({any='%[Terminal closed%]'})
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[call chanclose(id) | call chansend(id, 'test')]])
+ )
+ screen:expect({ any = '%[Terminal closed%]' })
eq(chans, eval('len(nvim_list_chans())'))
-- delete terminal
feed('i<CR>')
-- need to first process input
poke_eventloop()
- feed('<Ignore>') -- add input to separate two RPC requests
+ feed('<Ignore>') -- add input to separate two RPC requests
-- channel has been released after another main loop iteration
eq(chans - 1, eval('len(nvim_list_chans())'))
end)
@@ -54,14 +58,18 @@ describe('terminal channel is closed and later released if', function()
command('let id = nvim_open_term(0, {})')
local chans = eval('len(nvim_list_chans())')
-- channel has been closed but not released
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[call chanclose(id) | call chansend(id, 'test')]]))
- screen:expect({any='%[Terminal closed%]'})
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[call chanclose(id) | call chansend(id, 'test')]])
+ )
+ screen:expect({ any = '%[Terminal closed%]' })
eq(chans, eval('len(nvim_list_chans())'))
-- channel still hasn't been released yet
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[bdelete | call chansend(id, 'test')]]))
- feed('<Ignore>') -- add input to separate two RPC requests
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[bdelete | call chansend(id, 'test')]])
+ )
+ feed('<Ignore>') -- add input to separate two RPC requests
-- channel has been released after one main loop iteration
eq(chans - 1, eval('len(nvim_list_chans())'))
end)
@@ -70,16 +78,18 @@ describe('terminal channel is closed and later released if', function()
command([[let id = termopen('echo')]])
local chans = eval('len(nvim_list_chans())')
-- wait for process to exit
- screen:expect({any='%[Process exited 0%]'})
+ screen:expect({ any = '%[Process exited 0%]' })
-- process has exited but channel has't been released
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[call chansend(id, 'test')]]))
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[call chansend(id, 'test')]])
+ )
eq(chans, eval('len(nvim_list_chans())'))
-- delete terminal
feed('i<CR>')
-- need to first process input
poke_eventloop()
- feed('<Ignore>') -- add input to separate two RPC requests
+ feed('<Ignore>') -- add input to separate two RPC requests
-- channel has been released after another main loop iteration
eq(chans - 1, eval('len(nvim_list_chans())'))
end)
@@ -89,34 +99,38 @@ describe('terminal channel is closed and later released if', function()
command([[let id = termopen('echo')]])
local chans = eval('len(nvim_list_chans())')
-- wait for process to exit
- screen:expect({any='%[Process exited 0%]'})
+ screen:expect({ any = '%[Process exited 0%]' })
-- process has exited but channel hasn't been released
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[call chansend(id, 'test')]]))
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[call chansend(id, 'test')]])
+ )
eq(chans, eval('len(nvim_list_chans())'))
-- channel still hasn't been released yet
- eq("Vim(call):Can't send data to closed stream",
- pcall_err(command, [[bdelete | call chansend(id, 'test')]]))
- feed('<Ignore>') -- add input to separate two RPC requests
+ eq(
+ "Vim(call):Can't send data to closed stream",
+ pcall_err(command, [[bdelete | call chansend(id, 'test')]])
+ )
+ feed('<Ignore>') -- add input to separate two RPC requests
-- channel has been released after one main loop iteration
eq(chans - 1, eval('len(nvim_list_chans())'))
end)
end)
it('chansend sends lines to terminal channel in proper order', function()
- clear({args = {'--cmd', 'set laststatus=2'}})
+ clear({ args = { '--cmd', 'set laststatus=2' } })
local screen = Screen.new(100, 20)
screen:attach()
- local shells = is_os('win') and {'cmd.exe', 'pwsh.exe -nop', 'powershell.exe -nop'} or {'sh'}
+ local shells = is_os('win') and { 'cmd.exe', 'pwsh.exe -nop', 'powershell.exe -nop' } or { 'sh' }
for _, sh in ipairs(shells) do
command([[let id = termopen(']] .. sh .. [[')]])
command([[call chansend(id, ['echo "hello"', 'echo "world"', ''])]])
- screen:expect{
- any=[[echo "hello".*echo "world"]]
+ screen:expect {
+ any = [[echo "hello".*echo "world"]],
}
command('bdelete!')
- screen:expect{
- any='%[No Name%]'
+ screen:expect {
+ any = '%[No Name%]',
}
end
end)
@@ -130,7 +144,7 @@ describe('no crash when TermOpen autocommand', function()
command('set shellcmdflag=EXE shellredir= shellpipe= shellquote= shellxquote=')
screen = Screen.new(60, 4)
screen:set_default_attr_ids({
- [0] = {bold = true, foreground = Screen.colors.Blue};
+ [0] = { bold = true, foreground = Screen.colors.Blue },
})
screen:attach()
end)
@@ -138,58 +152,72 @@ describe('no crash when TermOpen autocommand', function()
it('processes job exit event when using termopen()', function()
command([[autocmd TermOpen * call input('')]])
async_meths.command('terminal foobar')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
{0:~ }|*2
^ |
- ]]}
+ ]],
+ }
feed('<CR>')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^ready $ foobar |
|
[Process exited 0] |
|
- ]]}
+ ]],
+ }
feed('i<CR>')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^ |
{0:~ }|*2
|
- ]]}
+ ]],
+ }
assert_alive()
end)
it('wipes buffer and processes events when using termopen()', function()
command([[autocmd TermOpen * bwipe! | call input('')]])
async_meths.command('terminal foobar')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
{0:~ }|*2
^ |
- ]]}
+ ]],
+ }
feed('<CR>')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^ |
{0:~ }|*2
|
- ]]}
+ ]],
+ }
assert_alive()
end)
it('wipes buffer and processes events when using nvim_open_term()', function()
command([[autocmd TermOpen * bwipe! | call input('')]])
async_meths.open_term(0, {})
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
{0:~ }|*2
^ |
- ]]}
+ ]],
+ }
feed('<CR>')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^ |
{0:~ }|*2
|
- ]]}
+ ]],
+ }
assert_alive()
end)
end)
@@ -206,10 +234,11 @@ describe('nvim_open_term', function()
it('with force_crlf=true converts newlines', function()
local win = meths.get_current_win()
local buf = meths.create_buf(false, true)
- local term = meths.open_term(buf, {force_crlf = true})
+ local term = meths.open_term(buf, { force_crlf = true })
meths.win_set_buf(win, buf)
meths.chan_send(term, 'here\nthere\nfoo\r\nbar\n\ntest')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^here |
there |
foo |
@@ -217,9 +246,11 @@ describe('nvim_open_term', function()
|
test |
|*4
- ]]}
+ ]],
+ }
meths.chan_send(term, '\nfirst')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
^here |
there |
foo |
@@ -228,19 +259,20 @@ describe('nvim_open_term', function()
test |
first |
|*3
- ]]}
+ ]],
+ }
end)
it('with force_crlf=false does not convert newlines', function()
local win = meths.get_current_win()
local buf = meths.create_buf(false, true)
- local term = meths.open_term(buf, {force_crlf = false})
+ local term = meths.open_term(buf, { force_crlf = false })
meths.win_set_buf(win, buf)
meths.chan_send(term, 'here\nthere')
- screen:expect{grid=[[
+ screen:expect { grid = [[
^here |
there |
|*8
- ]]}
+ ]] }
end)
end)
diff --git a/test/functional/terminal/cursor_spec.lua b/test/functional/terminal/cursor_spec.lua
index 5a40477d28..a818f8139c 100644
--- a/test/functional/terminal/cursor_spec.lua
+++ b/test/functional/terminal/cursor_spec.lua
@@ -19,7 +19,6 @@ describe(':terminal cursor', function()
screen = thelpers.screen_setup()
end)
-
it('moves the screen cursor when focused', function()
thelpers.feed_data('testing cursor')
screen:expect([[
@@ -114,7 +113,6 @@ describe(':terminal cursor', function()
end)
end)
-
describe('cursor with customized highlighting', function()
local screen
@@ -124,12 +122,12 @@ describe('cursor with customized highlighting', function()
nvim('command', 'highlight TermCursorNC ctermfg=55 ctermbg=56 cterm=NONE')
screen = Screen.new(50, 7)
screen:set_default_attr_ids({
- [1] = {foreground = 45, background = 46},
- [2] = {foreground = 55, background = 56},
- [3] = {bold = true},
+ [1] = { foreground = 45, background = 46 },
+ [2] = { foreground = 55, background = 56 },
+ [3] = { bold = true },
})
- screen:attach({rgb=false})
- command('call termopen(["'..testprg('tty-test')..'"])')
+ screen:attach({ rgb = false })
+ command('call termopen(["' .. testprg('tty-test') .. '"])')
feed('i')
poke_eventloop()
end)
@@ -155,22 +153,28 @@ describe('buffer cursor position is correct in terminal without number column',
local function setup_ex_register(str)
screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
'-E',
- '--cmd', string.format('let @r = "%s"', str),
+ '--cmd',
+ string.format('let @r = "%s"', str),
-- <Left> and <Right> don't always work
- '--cmd', 'cnoremap <C-X> <Left>',
- '--cmd', 'cnoremap <C-O> <Right>',
- '--cmd', 'set notermguicolors',
+ '--cmd',
+ 'cnoremap <C-X> <Left>',
+ '--cmd',
+ 'cnoremap <C-O> <Right>',
+ '--cmd',
+ 'set notermguicolors',
}, {
cols = 70,
})
screen:set_default_attr_ids({
- [1] = {foreground = 253, background = 11};
- [2] = {reverse = true};
- [3] = {bold = true},
- [4] = {background = 11};
+ [1] = { foreground = 253, background = 11 },
+ [2] = { reverse = true },
+ [3] = { bold = true },
+ [4] = { background = 11 },
})
-- Also check for real cursor position, as it is used for stuff like input methods
screen._handle_busy_start = function() end
@@ -198,7 +202,7 @@ describe('buffer cursor position is correct in terminal without number column',
:aaaaaaaa{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 9}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 9 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -206,7 +210,7 @@ describe('buffer cursor position is correct in terminal without number column',
:aaaaaaa^a{4: } |
|
]])
- eq({6, 8}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 8 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -217,7 +221,7 @@ describe('buffer cursor position is correct in terminal without number column',
:aaaaaa{2:^a}a |
{3:-- TERMINAL --} |
]])
- eq({6, 7}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 7 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -225,7 +229,7 @@ describe('buffer cursor position is correct in terminal without number column',
:aaaaa^a{4:a}a |
|
]])
- eq({6, 6}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 6 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -236,7 +240,7 @@ describe('buffer cursor position is correct in terminal without number column',
:a{2:^a}aaaaaa |
{3:-- TERMINAL --} |
]])
- eq({6, 2}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 2 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -244,7 +248,7 @@ describe('buffer cursor position is correct in terminal without number column',
:^a{4:a}aaaaaa |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
@@ -261,7 +265,7 @@ describe('buffer cursor position is correct in terminal without number column',
:µµµµµµµµ{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 17}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 17 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -269,7 +273,7 @@ describe('buffer cursor position is correct in terminal without number column',
:µµµµµµµ^µ{4: } |
|
]])
- eq({6, 15}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 15 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -280,7 +284,7 @@ describe('buffer cursor position is correct in terminal without number column',
:µµµµµµ{2:^µ}µ |
{3:-- TERMINAL --} |
]])
- eq({6, 13}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 13 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -288,7 +292,7 @@ describe('buffer cursor position is correct in terminal without number column',
:µµµµµ^µ{4:µ}µ |
|
]])
- eq({6, 11}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 11 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -299,7 +303,7 @@ describe('buffer cursor position is correct in terminal without number column',
:µ{2:^µ}µµµµµµ |
{3:-- TERMINAL --} |
]])
- eq({6, 3}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 3 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -307,77 +311,84 @@ describe('buffer cursor position is correct in terminal without number column',
:^µ{4:µ}µµµµµµ |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
- describe('in a line with single-cell composed multibyte characters and no trailing spaces,', function()
- if skip(is_os('win'), "Encoding problem?") then return end
+ describe(
+ 'in a line with single-cell composed multibyte characters and no trailing spaces,',
+ function()
+ if skip(is_os('win'), 'Encoding problem?') then
+ return
+ end
- before_each(function()
- setup_ex_register('µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳')
- end)
+ before_each(function()
+ setup_ex_register('µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳')
+ end)
- it('at the end', function()
- feed('<C-R>r')
- screen:expect([[
+ it('at the end', function()
+ feed('<C-R>r')
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 33}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 33 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:µ̳µ̳µ̳µ̳µ̳µ̳µ̳^µ̳{4: } |
|
]])
- eq({6, 29}, eval('nvim_win_get_cursor(0)'))
- end)
+ eq({ 6, 29 }, eval('nvim_win_get_cursor(0)'))
+ end)
- it('near the end', function()
- feed('<C-R>r<C-X><C-X>')
- screen:expect([[
+ it('near the end', function()
+ feed('<C-R>r<C-X><C-X>')
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:µ̳µ̳µ̳µ̳µ̳µ̳{2:^µ̳}µ̳ |
{3:-- TERMINAL --} |
]])
- eq({6, 25}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 25 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:µ̳µ̳µ̳µ̳µ̳^µ̳{4:µ̳}µ̳ |
|
]])
- eq({6, 21}, eval('nvim_win_get_cursor(0)'))
- end)
+ eq({ 6, 21 }, eval('nvim_win_get_cursor(0)'))
+ end)
- it('near the start', function()
- feed('<C-R>r<C-B><C-O>')
- screen:expect([[
+ it('near the start', function()
+ feed('<C-R>r<C-B><C-O>')
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:µ̳{2:^µ̳}µ̳µ̳µ̳µ̳µ̳µ̳ |
{3:-- TERMINAL --} |
]])
- eq({6, 5}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 5 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
|*4
Entering Ex mode. Type "visual" to go to Normal mode. |
:^µ̳{4:µ̳}µ̳µ̳µ̳µ̳µ̳µ̳ |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
- end)
- end)
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
+ end)
+ end
+ )
describe('in a line with double-cell multibyte characters and no trailing spaces,', function()
- if skip(is_os('win'), "Encoding problem?") then return end
+ if skip(is_os('win'), 'Encoding problem?') then
+ return
+ end
before_each(function()
setup_ex_register('哦哦哦哦哦哦哦哦')
@@ -391,7 +402,7 @@ describe('buffer cursor position is correct in terminal without number column',
:哦哦哦哦哦哦哦哦{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 25}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 25 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -399,7 +410,7 @@ describe('buffer cursor position is correct in terminal without number column',
:哦哦哦哦哦哦哦^哦{4: } |
|
]])
- eq({6, 22}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 22 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -410,7 +421,7 @@ describe('buffer cursor position is correct in terminal without number column',
:哦哦哦哦哦哦{2:^哦}哦 |
{3:-- TERMINAL --} |
]])
- eq({6, 19}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 19 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -418,7 +429,7 @@ describe('buffer cursor position is correct in terminal without number column',
:哦哦哦哦哦^哦{4:哦}哦 |
|
]])
- eq({6, 16}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 16 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -429,7 +440,7 @@ describe('buffer cursor position is correct in terminal without number column',
:哦{2:^哦}哦哦哦哦哦哦 |
{3:-- TERMINAL --} |
]])
- eq({6, 4}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 4 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -437,7 +448,7 @@ describe('buffer cursor position is correct in terminal without number column',
:^哦{4:哦}哦哦哦哦哦哦 |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
@@ -451,7 +462,7 @@ describe('buffer cursor position is correct in terminal without number column',
{3:-- TERMINAL --} |
]])
matches('^:aaaaaaaa [ ]*$', eval('nvim_get_current_line()'))
- eq({6, 13}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 13 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
|*4
@@ -459,7 +470,7 @@ describe('buffer cursor position is correct in terminal without number column',
:aaaaaaaa ^ {4: } |
|
]])
- eq({6, 12}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 12 }, eval('nvim_win_get_cursor(0)'))
end)
end)
@@ -468,23 +479,29 @@ describe('buffer cursor position is correct in terminal with number column', fun
local function setup_ex_register(str)
screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
'-E',
- '--cmd', string.format('let @r = "%s"', str),
+ '--cmd',
+ string.format('let @r = "%s"', str),
-- <Left> and <Right> don't always work
- '--cmd', 'cnoremap <C-X> <Left>',
- '--cmd', 'cnoremap <C-O> <Right>',
- '--cmd', 'set notermguicolors',
+ '--cmd',
+ 'cnoremap <C-X> <Left>',
+ '--cmd',
+ 'cnoremap <C-O> <Right>',
+ '--cmd',
+ 'set notermguicolors',
}, {
cols = 70,
})
screen:set_default_attr_ids({
- [1] = {foreground = 253, background = 11};
- [2] = {reverse = true};
- [3] = {bold = true},
- [4] = {background = 11};
- [7] = {foreground = 130};
+ [1] = { foreground = 253, background = 11 },
+ [2] = { reverse = true },
+ [3] = { bold = true },
+ [4] = { background = 11 },
+ [7] = { foreground = 130 },
})
-- Also check for real cursor position, as it is used for stuff like input methods
screen._handle_busy_start = function() end
@@ -521,7 +538,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:aaaaaaaa{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 9}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 9 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -532,7 +549,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:aaaaaaa^a{4: } |
|
]])
- eq({6, 8}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 8 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -546,7 +563,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:aaaaaa{2:^a}a |
{3:-- TERMINAL --} |
]])
- eq({6, 7}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 7 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -557,7 +574,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:aaaaa^a{4:a}a |
|
]])
- eq({6, 6}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 6 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -571,7 +588,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:a{2:^a}aaaaaa |
{3:-- TERMINAL --} |
]])
- eq({6, 2}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 2 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -582,7 +599,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:^a{4:a}aaaaaa |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
@@ -602,7 +619,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µµµµµµµµ{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 17}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 17 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -613,7 +630,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µµµµµµµ^µ{4: } |
|
]])
- eq({6, 15}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 15 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -627,7 +644,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µµµµµµ{2:^µ}µ |
{3:-- TERMINAL --} |
]])
- eq({6, 13}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 13 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -638,7 +655,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µµµµµ^µ{4:µ}µ |
|
]])
- eq({6, 11}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 11 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -652,7 +669,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ{2:^µ}µµµµµµ |
{3:-- TERMINAL --} |
]])
- eq({6, 3}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 3 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -663,20 +680,24 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:^µ{4:µ}µµµµµµ |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
- describe('in a line with single-cell composed multibyte characters and no trailing spaces,', function()
- if skip(is_os('win'), "Encoding problem?") then return end
+ describe(
+ 'in a line with single-cell composed multibyte characters and no trailing spaces,',
+ function()
+ if skip(is_os('win'), 'Encoding problem?') then
+ return
+ end
- before_each(function()
- setup_ex_register('µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳')
- end)
+ before_each(function()
+ setup_ex_register('µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳')
+ end)
- it('at the end', function()
- feed('<C-R>r')
- screen:expect([[
+ it('at the end', function()
+ feed('<C-R>r')
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -685,9 +706,9 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ̳µ̳µ̳µ̳µ̳µ̳µ̳µ̳{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 33}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 33 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -696,12 +717,12 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ̳µ̳µ̳µ̳µ̳µ̳µ̳^µ̳{4: } |
|
]])
- eq({6, 29}, eval('nvim_win_get_cursor(0)'))
- end)
+ eq({ 6, 29 }, eval('nvim_win_get_cursor(0)'))
+ end)
- it('near the end', function()
- feed('<C-R>r<C-X><C-X>')
- screen:expect([[
+ it('near the end', function()
+ feed('<C-R>r<C-X><C-X>')
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -710,9 +731,9 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ̳µ̳µ̳µ̳µ̳µ̳{2:^µ̳}µ̳ |
{3:-- TERMINAL --} |
]])
- eq({6, 25}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 25 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -721,12 +742,12 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ̳µ̳µ̳µ̳µ̳^µ̳{4:µ̳}µ̳ |
|
]])
- eq({6, 21}, eval('nvim_win_get_cursor(0)'))
- end)
+ eq({ 6, 21 }, eval('nvim_win_get_cursor(0)'))
+ end)
- it('near the start', function()
- feed('<C-R>r<C-B><C-O>')
- screen:expect([[
+ it('near the start', function()
+ feed('<C-R>r<C-B><C-O>')
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -735,9 +756,9 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:µ̳{2:^µ̳}µ̳µ̳µ̳µ̳µ̳µ̳ |
{3:-- TERMINAL --} |
]])
- eq({6, 5}, eval('nvim_win_get_cursor(0)'))
- feed([[<C-\><C-N>]])
- screen:expect([[
+ eq({ 6, 5 }, eval('nvim_win_get_cursor(0)'))
+ feed([[<C-\><C-N>]])
+ screen:expect([[
{7: 1 } |
{7: 2 } |
{7: 3 } |
@@ -746,12 +767,15 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:^µ̳{4:µ̳}µ̳µ̳µ̳µ̳µ̳µ̳ |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
- end)
- end)
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
+ end)
+ end
+ )
describe('in a line with double-cell multibyte characters and no trailing spaces,', function()
- if skip(is_os('win'), "Encoding problem?") then return end
+ if skip(is_os('win'), 'Encoding problem?') then
+ return
+ end
before_each(function()
setup_ex_register('哦哦哦哦哦哦哦哦')
@@ -768,7 +792,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:哦哦哦哦哦哦哦哦{2:^ } |
{3:-- TERMINAL --} |
]])
- eq({6, 25}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 25 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -779,7 +803,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:哦哦哦哦哦哦哦^哦{4: } |
|
]])
- eq({6, 22}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 22 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the end', function()
@@ -793,7 +817,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:哦哦哦哦哦哦{2:^哦}哦 |
{3:-- TERMINAL --} |
]])
- eq({6, 19}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 19 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -804,7 +828,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:哦哦哦哦哦^哦{4:哦}哦 |
|
]])
- eq({6, 16}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 16 }, eval('nvim_win_get_cursor(0)'))
end)
it('near the start', function()
@@ -818,7 +842,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:哦{2:^哦}哦哦哦哦哦哦 |
{3:-- TERMINAL --} |
]])
- eq({6, 4}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 4 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -829,7 +853,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:^哦{4:哦}哦哦哦哦哦哦 |
|
]])
- eq({6, 1}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 1 }, eval('nvim_win_get_cursor(0)'))
end)
end)
@@ -846,7 +870,7 @@ describe('buffer cursor position is correct in terminal with number column', fun
{3:-- TERMINAL --} |
]])
matches('^:aaaaaaaa [ ]*$', eval('nvim_get_current_line()'))
- eq({6, 13}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 13 }, eval('nvim_win_get_cursor(0)'))
feed([[<C-\><C-N>]])
screen:expect([[
{7: 1 } |
@@ -857,6 +881,6 @@ describe('buffer cursor position is correct in terminal with number column', fun
{7: 6 }:aaaaaaaa ^ {4: } |
|
]])
- eq({6, 12}, eval('nvim_win_get_cursor(0)'))
+ eq({ 6, 12 }, eval('nvim_win_get_cursor(0)'))
end)
end)
diff --git a/test/functional/terminal/edit_spec.lua b/test/functional/terminal/edit_spec.lua
index 29361bc0fa..e9062bc9b5 100644
--- a/test/functional/terminal/edit_spec.lua
+++ b/test/functional/terminal/edit_spec.lua
@@ -15,7 +15,7 @@ local pesc = helpers.pesc
describe(':edit term://*', function()
local get_screen = function(columns, lines)
local scr = screen.new(columns, lines)
- scr:attach({rgb=false})
+ scr:attach({ rgb = false })
return scr
end
@@ -32,7 +32,7 @@ describe(':edit term://*', function()
local termopen_runs = meths.get_var('termopen_runs')
eq(1, #termopen_runs)
local cwd = funcs.fnamemodify('.', ':p:~'):gsub([[[\/]*$]], '')
- matches('^term://'..pesc(cwd)..'//%d+:$', termopen_runs[1])
+ matches('^term://' .. pesc(cwd) .. '//%d+:$', termopen_runs[1])
end)
it("runs TermOpen early enough to set buffer-local 'scrollback'", function()
@@ -40,32 +40,30 @@ describe(':edit term://*', function()
local scr = get_screen(columns, lines)
local rep = 97
meths.set_option_value('shellcmdflag', 'REP ' .. rep, {})
- command('set shellxquote=') -- win: avoid extra quotes
+ command('set shellxquote=') -- win: avoid extra quotes
local sb = 10
- command('autocmd TermOpen * :setlocal scrollback='..tostring(sb)
- ..'|call feedkeys("G", "n")')
+ command(
+ 'autocmd TermOpen * :setlocal scrollback=' .. tostring(sb) .. '|call feedkeys("G", "n")'
+ )
command('edit term://foobar')
local bufcontents = {}
local winheight = curwinmeths.get_height()
local buf_cont_start = rep - sb - winheight + 2
- for i = buf_cont_start,(rep - 1) do
+ for i = buf_cont_start, (rep - 1) do
bufcontents[#bufcontents + 1] = ('%d: foobar'):format(i)
end
bufcontents[#bufcontents + 1] = ''
bufcontents[#bufcontents + 1] = '[Process exited 0]'
local exp_screen = '\n'
- for i = 1,(winheight - 1) do
+ for i = 1, (winheight - 1) do
local line = bufcontents[#bufcontents - winheight + i]
- exp_screen = (exp_screen
- .. line
- .. (' '):rep(columns - #line)
- .. '|\n')
+ exp_screen = (exp_screen .. line .. (' '):rep(columns - #line) .. '|\n')
end
- exp_screen = exp_screen..'^[Process exited 0] |\n'
+ exp_screen = exp_screen .. '^[Process exited 0] |\n'
- exp_screen = exp_screen..(' '):rep(columns)..'|\n'
+ exp_screen = exp_screen .. (' '):rep(columns) .. '|\n'
scr:expect(exp_screen)
eq(bufcontents, curbufmeths.get_lines(0, -1, true))
end)
diff --git a/test/functional/terminal/ex_terminal_spec.lua b/test/functional/terminal/ex_terminal_spec.lua
index 927c021a23..68d206c177 100644
--- a/test/functional/terminal/ex_terminal_spec.lua
+++ b/test/functional/terminal/ex_terminal_spec.lua
@@ -19,10 +19,10 @@ describe(':terminal', function()
before_each(function()
clear()
screen = Screen.new(50, 4)
- screen:attach({rgb=false})
+ screen:attach({ rgb = false })
end)
- it("does not interrupt Press-ENTER prompt #2748", function()
+ it('does not interrupt Press-ENTER prompt #2748', function()
-- Ensure that :messages shows Press-ENTER.
source([[
echomsg "msg1"
@@ -30,14 +30,14 @@ describe(':terminal', function()
echomsg "msg3"
]])
-- Invoke a command that emits frequent terminal activity.
- feed([[:terminal "]]..testprg('shell-test')..[[" REP 9999 !terminal_output!<cr>]])
+ feed([[:terminal "]] .. testprg('shell-test') .. [[" REP 9999 !terminal_output!<cr>]])
feed([[<C-\><C-N>]])
poke_eventloop()
-- Wait for some terminal activity.
retry(nil, 4000, function()
ok(funcs.line('$') > 6)
end)
- feed_command("messages")
+ feed_command('messages')
screen:expect([[
msg1 |
msg2 |
@@ -46,30 +46,34 @@ describe(':terminal', function()
]])
end)
- it("reads output buffer on terminal reporting #4151", function()
+ it('reads output buffer on terminal reporting #4151', function()
skip(is_ci('cirrus') or is_os('win'))
if is_os('win') then
- feed_command([[terminal powershell -NoProfile -NoLogo -Command Write-Host -NoNewline "\"$([char]27)[6n\""; Start-Sleep -Milliseconds 500 ]])
+ feed_command(
+ [[terminal powershell -NoProfile -NoLogo -Command Write-Host -NoNewline "\"$([char]27)[6n\""; Start-Sleep -Milliseconds 500 ]]
+ )
else
feed_command([[terminal printf '\e[6n'; sleep 0.5 ]])
end
- screen:expect{any='%^%[%[1;1R'}
+ screen:expect { any = '%^%[%[1;1R' }
end)
- it("in normal-mode :split does not move cursor", function()
+ it('in normal-mode :split does not move cursor', function()
if is_os('win') then
- feed_command([[terminal for /L \\%I in (1,0,2) do ( echo foo & ping -w 100 -n 1 127.0.0.1 > nul )]])
+ feed_command(
+ [[terminal for /L \\%I in (1,0,2) do ( echo foo & ping -w 100 -n 1 127.0.0.1 > nul )]]
+ )
else
feed_command([[terminal while true; do echo foo; sleep .1; done]])
end
- feed([[<C-\><C-N>M]]) -- move cursor away from last line
+ feed([[<C-\><C-N>M]]) -- move cursor away from last line
poke_eventloop()
- eq(3, eval("line('$')")) -- window height
- eq(2, eval("line('.')")) -- cursor is in the middle
+ eq(3, eval("line('$')")) -- window height
+ eq(2, eval("line('.')")) -- cursor is in the middle
feed_command('vsplit')
- eq(2, eval("line('.')")) -- cursor stays where we put it
+ eq(2, eval("line('.')")) -- cursor stays where we put it
feed_command('split')
- eq(2, eval("line('.')")) -- cursor stays where we put it
+ eq(2, eval("line('.')")) -- cursor stays where we put it
end)
it('Enter/Leave does not increment jumplist #3723', function()
@@ -92,7 +96,7 @@ describe(':terminal', function()
enter_and_leave()
enter_and_leave()
enter_and_leave()
- ok(funcs.line('$') > 6) -- Verify assumption.
+ ok(funcs.line('$') > 6) -- Verify assumption.
local jumps = funcs.split(funcs.execute('jumps'), '\n')
eq(' jump line col file/text', jumps[1])
eq(3, #jumps)
@@ -100,30 +104,30 @@ describe(':terminal', function()
it('nvim_get_mode() in :terminal', function()
command('terminal')
- eq({ blocking=false, mode='nt' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 'nt' }, nvim('get_mode'))
feed('i')
- eq({ blocking=false, mode='t' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 't' }, nvim('get_mode'))
feed([[<C-\><C-N>]])
- eq({ blocking=false, mode='nt' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 'nt' }, nvim('get_mode'))
end)
it(':stopinsert RPC request exits terminal-mode #7807', function()
command('terminal')
feed('i[tui] insert-mode')
- eq({ blocking=false, mode='t' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 't' }, nvim('get_mode'))
command('stopinsert')
- feed('<Ignore>') -- Add input to separate two RPC requests
- eq({ blocking=false, mode='nt' }, nvim('get_mode'))
+ feed('<Ignore>') -- Add input to separate two RPC requests
+ eq({ blocking = false, mode = 'nt' }, nvim('get_mode'))
end)
- it(':stopinsert in normal mode doesn\'t break insert mode #9889', function()
+ it(":stopinsert in normal mode doesn't break insert mode #9889", function()
command('terminal')
- eq({ blocking=false, mode='nt' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 'nt' }, nvim('get_mode'))
command('stopinsert')
- feed('<Ignore>') -- Add input to separate two RPC requests
- eq({ blocking=false, mode='nt' }, nvim('get_mode'))
+ feed('<Ignore>') -- Add input to separate two RPC requests
+ eq({ blocking = false, mode = 'nt' }, nvim('get_mode'))
feed('a')
- eq({ blocking=false, mode='t' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 't' }, nvim('get_mode'))
end)
it('switching to terminal buffer in Insert mode goes to Terminal mode #7164', function()
@@ -134,10 +138,10 @@ describe(':terminal', function()
command('autocmd InsertLeave * let g:events += ["InsertLeave"]')
command('autocmd TermEnter * let g:events += ["TermEnter"]')
command('inoremap <F2> <Cmd>wincmd p<CR>')
- eq({ blocking=false, mode='i' }, nvim('get_mode'))
+ eq({ blocking = false, mode = 'i' }, nvim('get_mode'))
feed('<F2>')
- eq({ blocking=false, mode='t' }, nvim('get_mode'))
- eq({'InsertLeave', 'TermEnter'}, eval('g:events'))
+ eq({ blocking = false, mode = 't' }, nvim('get_mode'))
+ eq({ 'InsertLeave', 'TermEnter' }, eval('g:events'))
end)
end)
@@ -153,7 +157,7 @@ local function test_terminal_with_fake_shell(backslash)
before_each(function()
clear()
screen = Screen.new(50, 4)
- screen:attach({rgb=false})
+ screen:attach({ rgb = false })
nvim('set_option_value', 'shell', shell_path, {})
nvim('set_option_value', 'shellcmdflag', 'EXE', {})
nvim('set_option_value', 'shellxquote', '', {})
@@ -163,7 +167,7 @@ local function test_terminal_with_fake_shell(backslash)
command('autocmd! nvim_terminal TermClose')
feed_command('terminal')
retry(nil, 4 * screen.timeout, function()
- screen:expect([[
+ screen:expect([[
^ready $ |
[Process exited 0] |
|
@@ -183,7 +187,7 @@ local function test_terminal_with_fake_shell(backslash)
end)
it("with no argument, but 'shell' has arguments, acts like termopen()", function()
- nvim('set_option_value', 'shell', shell_path ..' INTERACT', {})
+ nvim('set_option_value', 'shell', shell_path .. ' INTERACT', {})
feed_command('terminal')
screen:expect([[
^interact $ |
@@ -193,7 +197,7 @@ local function test_terminal_with_fake_shell(backslash)
end)
it('executes a given command through the shell', function()
- command('set shellxquote=') -- win: avoid extra quotes
+ command('set shellxquote=') -- win: avoid extra quotes
feed_command('terminal echo hi')
screen:expect([[
^ready $ echo hi |
@@ -204,8 +208,8 @@ local function test_terminal_with_fake_shell(backslash)
end)
it("executes a given command through the shell, when 'shell' has arguments", function()
- nvim('set_option_value', 'shell', shell_path ..' -t jeff', {})
- command('set shellxquote=') -- win: avoid extra quotes
+ nvim('set_option_value', 'shell', shell_path .. ' -t jeff', {})
+ command('set shellxquote=') -- win: avoid extra quotes
feed_command('terminal echo hi')
screen:expect([[
^jeff $ echo hi |
@@ -216,7 +220,7 @@ local function test_terminal_with_fake_shell(backslash)
end)
it('allows quotes and slashes', function()
- command('set shellxquote=') -- win: avoid extra quotes
+ command('set shellxquote=') -- win: avoid extra quotes
feed_command([[terminal echo 'hello' \ "world"]])
screen:expect([[
^ready $ echo 'hello' \ "world" |
@@ -230,7 +234,7 @@ local function test_terminal_with_fake_shell(backslash)
source([[
autocmd BufNew * set shell=foo
terminal]])
- -- Verify that BufNew actually fired (else the test is invalid).
+ -- Verify that BufNew actually fired (else the test is invalid).
eq('foo', eval('&shell'))
end)
@@ -249,7 +253,7 @@ local function test_terminal_with_fake_shell(backslash)
it('works with findfile()', function()
command('autocmd! nvim_terminal TermClose')
feed_command('terminal')
- eq('term://', string.match(eval('bufname("%")'), "^term://"))
+ eq('term://', string.match(eval('bufname("%")'), '^term://'))
eq('scripts/shadacat.py', eval('findfile("scripts/shadacat.py", ".")'))
end)
@@ -262,7 +266,7 @@ local function test_terminal_with_fake_shell(backslash)
|
:terminal |
]])
- eq('term://', string.match(eval('bufname("%")'), "^term://"))
+ eq('term://', string.match(eval('bufname("%")'), '^term://'))
feed([[<C-\><C-N>]])
feed_command([[find */shadacat.py]])
if is_os('win') then
@@ -273,10 +277,10 @@ local function test_terminal_with_fake_shell(backslash)
end)
it('works with gf', function()
- command('set shellxquote=') -- win: avoid extra quotes
+ command('set shellxquote=') -- win: avoid extra quotes
feed_command([[terminal echo "scripts/shadacat.py"]])
retry(nil, 4 * screen.timeout, function()
- screen:expect([[
+ screen:expect([[
^ready $ echo "scripts/shadacat.py" |
|
[Process exited 0] |
@@ -284,7 +288,7 @@ local function test_terminal_with_fake_shell(backslash)
]])
end)
feed([[<C-\><C-N>]])
- eq('term://', string.match(eval('bufname("%")'), "^term://"))
+ eq('term://', string.match(eval('bufname("%")'), '^term://'))
feed([[ggf"lgf]])
eq('scripts/shadacat.py', eval('bufname("%")'))
end)
diff --git a/test/functional/terminal/helpers.lua b/test/functional/terminal/helpers.lua
index 9566079389..babc2337fa 100644
--- a/test/functional/terminal/helpers.lua
+++ b/test/functional/terminal/helpers.lua
@@ -10,7 +10,7 @@ local nvim_prog = helpers.nvim_prog
local function feed_data(data)
if type(data) == 'table' then
- data = table.concat(data, '\n')
+ data = table.concat(data, '\n')
end
exec_lua('vim.api.nvim_chan_send(vim.b.terminal_job_id, ...)', data)
end
@@ -21,7 +21,7 @@ end
local function make_lua_executor(session)
return function(code, ...)
- local status, rv = session:request('nvim_exec_lua', code, {...})
+ local status, rv = session:request('nvim_exec_lua', code, { ... })
if not status then
session:stop()
error(rv[2])
@@ -33,24 +33,54 @@ end
-- some helpers for controlling the terminal. the codes were taken from
-- infocmp xterm-256color which is less what libvterm understands
-- civis/cnorm
-local function hide_cursor() feed_termcode('[?25l') end
-local function show_cursor() feed_termcode('[?25h') end
+local function hide_cursor()
+ feed_termcode('[?25l')
+end
+local function show_cursor()
+ feed_termcode('[?25h')
+end
-- smcup/rmcup
-local function enter_altscreen() feed_termcode('[?1049h') end
-local function exit_altscreen() feed_termcode('[?1049l') end
+local function enter_altscreen()
+ feed_termcode('[?1049h')
+end
+local function exit_altscreen()
+ feed_termcode('[?1049l')
+end
-- character attributes
-local function set_fg(num) feed_termcode('[38;5;'..num..'m') end
-local function set_bg(num) feed_termcode('[48;5;'..num..'m') end
-local function set_bold() feed_termcode('[1m') end
-local function set_italic() feed_termcode('[3m') end
-local function set_underline() feed_termcode('[4m') end
-local function set_underdouble() feed_termcode('[4:2m') end
-local function set_undercurl() feed_termcode('[4:3m') end
-local function set_strikethrough() feed_termcode('[9m') end
-local function clear_attrs() feed_termcode('[0;10m') end
+local function set_fg(num)
+ feed_termcode('[38;5;' .. num .. 'm')
+end
+local function set_bg(num)
+ feed_termcode('[48;5;' .. num .. 'm')
+end
+local function set_bold()
+ feed_termcode('[1m')
+end
+local function set_italic()
+ feed_termcode('[3m')
+end
+local function set_underline()
+ feed_termcode('[4m')
+end
+local function set_underdouble()
+ feed_termcode('[4:2m')
+end
+local function set_undercurl()
+ feed_termcode('[4:3m')
+end
+local function set_strikethrough()
+ feed_termcode('[9m')
+end
+local function clear_attrs()
+ feed_termcode('[0;10m')
+end
-- mouse
-local function enable_mouse() feed_termcode('[?1002h') end
-local function disable_mouse() feed_termcode('[?1002l') end
+local function enable_mouse()
+ feed_termcode('[?1002h')
+end
+local function disable_mouse()
+ feed_termcode('[?1002l')
+end
local default_command = { testprg('tty-test') }
@@ -64,36 +94,36 @@ local function screen_setup(extra_rows, command, cols, env, screen_opts)
local screen = Screen.new(cols, 7 + extra_rows)
screen:set_default_attr_ids({
- [1] = {reverse = true}, -- focused cursor
- [2] = {background = 11}, -- unfocused cursor
- [3] = {bold = true},
- [4] = {foreground = 12},
- [5] = {bold = true, reverse = true},
+ [1] = { reverse = true }, -- focused cursor
+ [2] = { background = 11 }, -- unfocused cursor
+ [3] = { bold = true },
+ [4] = { foreground = 12 },
+ [5] = { bold = true, reverse = true },
-- 6 was a duplicate item
- [7] = {foreground = 130},
- [8] = {foreground = 15, background = 1}, -- error message
- [9] = {foreground = 4},
- [10] = {foreground = 121}, -- "Press ENTER" in embedded :terminal session.
- [11] = {foreground = tonumber('0x00000b')},
- [12] = {underline = true},
- [13] = {underline = true, reverse = true},
- [14] = {underline = true, reverse = true, bold = true},
- [15] = {underline = true, foreground = 12},
+ [7] = { foreground = 130 },
+ [8] = { foreground = 15, background = 1 }, -- error message
+ [9] = { foreground = 4 },
+ [10] = { foreground = 121 }, -- "Press ENTER" in embedded :terminal session.
+ [11] = { foreground = tonumber('0x00000b') },
+ [12] = { underline = true },
+ [13] = { underline = true, reverse = true },
+ [14] = { underline = true, reverse = true, bold = true },
+ [15] = { underline = true, foreground = 12 },
})
- screen:attach(screen_opts or {rgb=false})
+ screen:attach(screen_opts or { rgb = false })
nvim('command', 'enew')
- nvim('call_function', 'termopen', {command, env and {env = env} or nil})
+ nvim('call_function', 'termopen', { command, env and { env = env } or nil })
nvim('input', '<CR>')
local vim_errmsg = nvim('eval', 'v:errmsg')
- if vim_errmsg and "" ~= vim_errmsg then
+ if vim_errmsg and '' ~= vim_errmsg then
error(vim_errmsg)
end
nvim('command', 'setlocal scrollback=10')
nvim('command', 'startinsert')
- nvim('input', '<Ignore>') -- Add input to separate two RPC requests
+ nvim('input', '<Ignore>') -- Add input to separate two RPC requests
-- tty-test puts the terminal into raw mode and echoes input. Tests work by
-- feeding termcodes to control the display and asserting by screen:expect.
@@ -102,8 +132,8 @@ local function screen_setup(extra_rows, command, cols, env, screen_opts)
-- still be in canonical mode (will echo characters for example).
local empty_line = (' '):rep(cols)
local expected = {
- 'tty ready'..(' '):rep(cols - 9),
- '{1: }' ..(' '):rep(cols - 1),
+ 'tty ready' .. (' '):rep(cols - 9),
+ '{1: }' .. (' '):rep(cols - 1),
empty_line,
empty_line,
empty_line,
@@ -114,11 +144,11 @@ local function screen_setup(extra_rows, command, cols, env, screen_opts)
end
table.insert(expected, '{3:-- TERMINAL --}' .. ((' '):rep(cols - 14)))
- screen:expect(table.concat(expected, '|\n')..'|')
+ screen:expect(table.concat(expected, '|\n') .. '|')
else
-- This eval also acts as a poke_eventloop().
if 0 == nvim('eval', "exists('b:terminal_job_id')") then
- error("terminal job failed to start")
+ error('terminal job failed to start')
end
end
return screen
diff --git a/test/functional/terminal/highlight_spec.lua b/test/functional/terminal/highlight_spec.lua
index 7abf12c886..951a0f6c65 100644
--- a/test/functional/terminal/highlight_spec.lua
+++ b/test/functional/terminal/highlight_spec.lua
@@ -17,21 +17,21 @@ describe(':terminal highlight', function()
clear()
screen = Screen.new(50, 7)
screen:set_default_attr_ids({
- [1] = {foreground = 45},
- [2] = {background = 46},
- [3] = {foreground = 45, background = 46},
- [4] = {bold = true, italic = true, underline = true, strikethrough = true},
- [5] = {bold = true},
- [6] = {foreground = 12},
- [7] = {bold = true, reverse = true},
- [8] = {background = 11},
- [9] = {foreground = 130},
- [10] = {reverse = true},
- [11] = {background = 11},
- [12] = {bold = true, underdouble = true},
- [13] = {italic = true, undercurl = true},
+ [1] = { foreground = 45 },
+ [2] = { background = 46 },
+ [3] = { foreground = 45, background = 46 },
+ [4] = { bold = true, italic = true, underline = true, strikethrough = true },
+ [5] = { bold = true },
+ [6] = { foreground = 12 },
+ [7] = { bold = true, reverse = true },
+ [8] = { background = 11 },
+ [9] = { foreground = 130 },
+ [10] = { reverse = true },
+ [11] = { background = 11 },
+ [12] = { bold = true, underdouble = true },
+ [13] = { italic = true, undercurl = true },
})
- screen:attach({rgb=false})
+ screen:attach({ rgb = false })
command(("enew | call termopen(['%s'])"):format(testprg('tty-test')))
feed('i')
screen:expect([[
@@ -73,7 +73,7 @@ describe(':terminal highlight', function()
pass_attrs()
local lines = {}
for i = 1, 8 do
- table.insert(lines, 'line'..tostring(i))
+ table.insert(lines, 'line' .. tostring(i))
end
table.insert(lines, '')
thelpers.feed_data(lines)
@@ -100,8 +100,12 @@ describe(':terminal highlight', function()
end)
end
- descr('foreground', 1, function() thelpers.set_fg(45) end)
- descr('background', 2, function() thelpers.set_bg(46) end)
+ descr('foreground', 1, function()
+ thelpers.set_fg(45)
+ end)
+ descr('background', 2, function()
+ thelpers.set_bg(46)
+ end)
descr('foreground and background', 3, function()
thelpers.set_fg(45)
thelpers.set_bg(46)
@@ -127,17 +131,34 @@ it(':terminal highlight has lower precedence than editor #9964', function()
local screen = Screen.new(30, 4)
screen:set_default_attr_ids({
-- "Normal" highlight emitted by the child nvim process.
- N_child = {foreground = tonumber('0x4040ff'), background = tonumber('0xffff40'), fg_indexed=true, bg_indexed=true},
+ N_child = {
+ foreground = tonumber('0x4040ff'),
+ background = tonumber('0xffff40'),
+ fg_indexed = true,
+ bg_indexed = true,
+ },
-- "Search" highlight in the parent nvim process.
- S = {background = Screen.colors.Green, italic = true, foreground = Screen.colors.Red},
+ S = { background = Screen.colors.Green, italic = true, foreground = Screen.colors.Red },
-- "Question" highlight in the parent nvim process.
-- note: bg is indexed as it comes from the (cterm) child, while fg isn't as it comes from (rgb) parent
- Q = {background = tonumber('0xffff40'), bold = true, foreground = Screen.colors.SeaGreen4, bg_indexed=true},
+ Q = {
+ background = tonumber('0xffff40'),
+ bold = true,
+ foreground = Screen.colors.SeaGreen4,
+ bg_indexed = true,
+ },
})
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
-- Child nvim process in :terminal (with cterm colors).
funcs.termopen({
- nvim_prog_abs(), '-n', '-u', 'NORC', '-i', 'NONE', '--cmd', nvim_set .. ' notermguicolors',
+ nvim_prog_abs(),
+ '-n',
+ '-u',
+ 'NORC',
+ '-i',
+ 'NONE',
+ '--cmd',
+ nvim_set .. ' notermguicolors',
'+hi Normal ctermfg=Blue ctermbg=Yellow',
'+norm! ichild nvim',
'+norm! oline 2',
@@ -177,10 +198,10 @@ describe(':terminal highlight forwarding', function()
screen = Screen.new(50, 7)
screen:set_rgb_cterm(true)
screen:set_default_attr_ids({
- [1] = {{reverse = true}, {reverse = true}},
- [2] = {{bold = true}, {bold = true}},
- [3] = {{fg_indexed = true, foreground = tonumber('0xe0e000')}, {foreground = 3}},
- [4] = {{foreground = tonumber('0xff8000')}, {}},
+ [1] = { { reverse = true }, { reverse = true } },
+ [2] = { { bold = true }, { bold = true } },
+ [3] = { { fg_indexed = true, foreground = tonumber('0xe0e000') }, { foreground = 3 } },
+ [4] = { { foreground = tonumber('0xff8000') }, {} },
})
screen:attach()
command(("enew | call termopen(['%s'])"):format(testprg('tty-test')))
@@ -201,16 +222,17 @@ describe(':terminal highlight forwarding', function()
thelpers.feed_data('color')
thelpers.clear_attrs()
thelpers.feed_data('text')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
{3:text}{4:color}text{1: } |
|*4
{2:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
end)
-
describe(':terminal highlight with custom palette', function()
local screen
@@ -218,16 +240,16 @@ describe(':terminal highlight with custom palette', function()
clear()
screen = Screen.new(50, 7)
screen:set_default_attr_ids({
- [1] = {foreground = tonumber('0x123456')}, -- no fg_indexed when overridden
- [2] = {foreground = 12},
- [3] = {bold = true, reverse = true},
- [5] = {background = 11},
- [6] = {foreground = 130},
- [7] = {reverse = true},
- [8] = {background = 11},
- [9] = {bold = true},
+ [1] = { foreground = tonumber('0x123456') }, -- no fg_indexed when overridden
+ [2] = { foreground = 12 },
+ [3] = { bold = true, reverse = true },
+ [5] = { background = 11 },
+ [6] = { foreground = 130 },
+ [7] = { reverse = true },
+ [8] = { background = 11 },
+ [9] = { bold = true },
})
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
nvim('set_var', 'terminal_color_3', '#123456')
command(("enew | call termopen(['%s'])"):format(testprg('tty-test')))
feed('i')
@@ -261,35 +283,37 @@ describe('synIDattr()', function()
screen = Screen.new(50, 7)
command('highlight Normal ctermfg=252 guifg=#ff0000 guibg=Black')
-- Salmon #fa8072 Maroon #800000
- command('highlight Keyword ctermfg=79 guifg=Salmon guisp=Maroon cterm=strikethrough gui=strikethrough')
+ command(
+ 'highlight Keyword ctermfg=79 guifg=Salmon guisp=Maroon cterm=strikethrough gui=strikethrough'
+ )
end)
it('returns cterm-color if RGB-capable UI is _not_ attached', function()
eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
eq('252', eval('synIDattr(hlID("Normal"), "fg#")'))
- eq('', eval('synIDattr(hlID("Normal"), "bg")'))
- eq('', eval('synIDattr(hlID("Normal"), "bg#")'))
- eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
- eq('79', eval('synIDattr(hlID("Keyword"), "fg#")'))
- eq('', eval('synIDattr(hlID("Keyword"), "sp")'))
- eq('', eval('synIDattr(hlID("Keyword"), "sp#")'))
+ eq('', eval('synIDattr(hlID("Normal"), "bg")'))
+ eq('', eval('synIDattr(hlID("Normal"), "bg#")'))
+ eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
+ eq('79', eval('synIDattr(hlID("Keyword"), "fg#")'))
+ eq('', eval('synIDattr(hlID("Keyword"), "sp")'))
+ eq('', eval('synIDattr(hlID("Keyword"), "sp#")'))
end)
it('returns gui-color if "gui" arg is passed', function()
- eq('Black', eval('synIDattr(hlID("Normal"), "bg", "gui")'))
+ eq('Black', eval('synIDattr(hlID("Normal"), "bg", "gui")'))
eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp", "gui")'))
end)
it('returns gui-color if RGB-capable UI is attached', function()
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg")'))
- eq('Black', eval('synIDattr(hlID("Normal"), "bg")'))
- eq('Salmon', eval('synIDattr(hlID("Keyword"), "fg")'))
- eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp")'))
+ eq('Black', eval('synIDattr(hlID("Normal"), "bg")'))
+ eq('Salmon', eval('synIDattr(hlID("Keyword"), "fg")'))
+ eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp")'))
end)
it('returns #RRGGBB value for fg#/bg#/sp#', function()
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg#")'))
eq('#000000', eval('synIDattr(hlID("Normal"), "bg#")'))
eq('#fa8072', eval('synIDattr(hlID("Keyword"), "fg#")'))
@@ -297,19 +321,24 @@ describe('synIDattr()', function()
end)
it('returns color number if non-GUI', function()
- screen:attach({rgb=false})
+ screen:attach({ rgb = false })
eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
end)
it('returns "1" if group has given highlight attribute', function()
local hl_attrs = {
- 'underline', 'undercurl', 'underdouble', 'underdotted', 'underdashed', 'strikethrough'
+ 'underline',
+ 'undercurl',
+ 'underdouble',
+ 'underdotted',
+ 'underdashed',
+ 'strikethrough',
}
- for _,hl_attr in ipairs(hl_attrs) do
+ for _, hl_attr in ipairs(hl_attrs) do
local context = 'using ' .. hl_attr .. ' attr'
command('highlight Keyword cterm=' .. hl_attr .. ' gui=' .. hl_attr)
- eq('', eval('synIDattr(hlID("Normal"), "'.. hl_attr .. '")'), context)
+ eq('', eval('synIDattr(hlID("Normal"), "' .. hl_attr .. '")'), context)
eq('1', eval('synIDattr(hlID("Keyword"), "' .. hl_attr .. '")'), context)
eq('1', eval('synIDattr(hlID("Keyword"), "' .. hl_attr .. '", "gui")'), context)
end
@@ -326,14 +355,10 @@ describe('fg/bg special colors', function()
end)
it('resolve to "Normal" values', function()
- eq(eval('synIDattr(hlID("Normal"), "bg")'),
- eval('synIDattr(hlID("Visual"), "fg")'))
- eq(eval('synIDattr(hlID("Normal"), "bg#")'),
- eval('synIDattr(hlID("Visual"), "fg#")'))
- eq(eval('synIDattr(hlID("Normal"), "fg")'),
- eval('synIDattr(hlID("Visual"), "bg")'))
- eq(eval('synIDattr(hlID("Normal"), "fg#")'),
- eval('synIDattr(hlID("Visual"), "bg#")'))
+ eq(eval('synIDattr(hlID("Normal"), "bg")'), eval('synIDattr(hlID("Visual"), "fg")'))
+ eq(eval('synIDattr(hlID("Normal"), "bg#")'), eval('synIDattr(hlID("Visual"), "fg#")'))
+ eq(eval('synIDattr(hlID("Normal"), "fg")'), eval('synIDattr(hlID("Visual"), "bg")'))
+ eq(eval('synIDattr(hlID("Normal"), "fg#")'), eval('synIDattr(hlID("Visual"), "bg#")'))
eq('bg', eval('synIDattr(hlID("Visual"), "fg", "gui")'))
eq('bg', eval('synIDattr(hlID("Visual"), "fg#", "gui")'))
eq('fg', eval('synIDattr(hlID("Visual"), "bg", "gui")'))
@@ -343,23 +368,20 @@ describe('fg/bg special colors', function()
end)
it('resolve to "Normal" values in RGB-capable UI', function()
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
eq('bg', eval('synIDattr(hlID("Visual"), "fg")'))
- eq(eval('synIDattr(hlID("Normal"), "bg#")'),
- eval('synIDattr(hlID("Visual"), "fg#")'))
+ eq(eval('synIDattr(hlID("Normal"), "bg#")'), eval('synIDattr(hlID("Visual"), "fg#")'))
eq('fg', eval('synIDattr(hlID("Visual"), "bg")'))
- eq(eval('synIDattr(hlID("Normal"), "fg#")'),
- eval('synIDattr(hlID("Visual"), "bg#")'))
+ eq(eval('synIDattr(hlID("Normal"), "fg#")'), eval('synIDattr(hlID("Visual"), "bg#")'))
eq('bg', eval('synIDattr(hlID("Visual"), "sp")'))
- eq(eval('synIDattr(hlID("Normal"), "bg#")'),
- eval('synIDattr(hlID("Visual"), "sp#")'))
+ eq(eval('synIDattr(hlID("Normal"), "bg#")'), eval('synIDattr(hlID("Visual"), "sp#")'))
end)
it('resolve after the "Normal" group is modified', function()
- screen:attach({rgb=true})
+ screen:attach({ rgb = true })
local new_guibg = '#282c34'
local new_guifg = '#abb2bf'
- command('highlight Normal guifg='..new_guifg..' guibg='..new_guibg)
+ command('highlight Normal guifg=' .. new_guifg .. ' guibg=' .. new_guibg)
eq(new_guibg, eval('synIDattr(hlID("Visual"), "fg#")'))
eq(new_guifg, eval('synIDattr(hlID("Visual"), "bg#")'))
eq(new_guibg, eval('synIDattr(hlID("Visual"), "sp#")'))
diff --git a/test/functional/terminal/mouse_spec.lua b/test/functional/terminal/mouse_spec.lua
index 3291a38e03..fd0dd46d71 100644
--- a/test/functional/terminal/mouse_spec.lua
+++ b/test/functional/terminal/mouse_spec.lua
@@ -18,7 +18,7 @@ describe(':terminal mouse', function()
screen = thelpers.screen_setup()
local lines = {}
for i = 1, 30 do
- table.insert(lines, 'line'..tostring(i))
+ table.insert(lines, 'line' .. tostring(i))
end
table.insert(lines, '')
feed_data(lines)
diff --git a/test/functional/terminal/scrollback_spec.lua b/test/functional/terminal/scrollback_spec.lua
index 00104734ef..f5c9887cdd 100644
--- a/test/functional/terminal/scrollback_spec.lua
+++ b/test/functional/terminal/scrollback_spec.lua
@@ -28,7 +28,7 @@ describe(':terminal scrollback', function()
before_each(function()
local lines = {}
for i = 1, 30 do
- table.insert(lines, 'line'..tostring(i))
+ table.insert(lines, 'line' .. tostring(i))
end
table.insert(lines, '')
feed_data(lines)
@@ -59,7 +59,7 @@ describe(':terminal scrollback', function()
describe('with cursor at last row', function()
before_each(function()
- feed_data({'line1', 'line2', 'line3', 'line4', ''})
+ feed_data({ 'line1', 'line2', 'line3', 'line4', '' })
screen:expect([[
tty ready |
line1 |
@@ -72,7 +72,9 @@ describe(':terminal scrollback', function()
end)
describe('and 1 line is printed', function()
- before_each(function() feed_data({'line5', ''}) end)
+ before_each(function()
+ feed_data({ 'line5', '' })
+ end)
it('will hide the top line', function()
screen:expect([[
@@ -88,7 +90,9 @@ describe(':terminal scrollback', function()
end)
describe('and then 3 more lines are printed', function()
- before_each(function() feed_data({'line6', 'line7', 'line8'}) end)
+ before_each(function()
+ feed_data({ 'line6', 'line7', 'line8' })
+ end)
it('will hide the top 4 lines', function()
screen:expect([[
@@ -137,7 +141,6 @@ describe(':terminal scrollback', function()
end)
end)
-
describe('and height decreased by 1', function()
local function will_hide_top_line()
feed([[<C-\><C-N>]])
@@ -184,7 +187,9 @@ describe(':terminal scrollback', function()
-- XXX: Can't test this reliably on Windows unless the cursor is _moved_
-- by the resize. http://docs.libuv.org/en/v1.x/signal.html
-- See also: https://github.com/rprichard/winpty/issues/110
- if skip(is_os('win')) then return end
+ if skip(is_os('win')) then
+ return
+ end
describe('and the height is decreased by 2', function()
before_each(function()
@@ -239,7 +244,7 @@ describe(':terminal scrollback', function()
describe('with 4 lines hidden in the scrollback', function()
before_each(function()
- feed_data({'line1', 'line2', 'line3', 'line4', ''})
+ feed_data({ 'line1', 'line2', 'line3', 'line4', '' })
screen:expect([[
tty ready |
line1 |
@@ -263,7 +268,9 @@ describe(':terminal scrollback', function()
-- XXX: Can't test this reliably on Windows unless the cursor is _moved_
-- by the resize. http://docs.libuv.org/en/v1.x/signal.html
-- See also: https://github.com/rprichard/winpty/issues/110
- if skip(is_os('win')) then return end
+ if skip(is_os('win')) then
+ return
+ end
local function pop_then_push()
screen:try_resize(screen._width, screen._height + 1)
screen:expect([[
@@ -347,7 +354,7 @@ describe(':terminal prints more lines than the screen height and exits', functio
it('will push extra lines to scrollback', function()
clear()
local screen = Screen.new(30, 7)
- screen:attach({rgb=false})
+ screen:attach({ rgb = false })
command(("call termopen(['%s', '10']) | startinsert"):format(testprg('tty-test')))
screen:expect([[
line6 |
@@ -381,7 +388,7 @@ describe("'scrollback' option", function()
local ep = epsilon and epsilon or 0
local actual = eval("line('$')")
if expected > actual + ep and expected < actual - ep then
- error('expected (+/- '..ep..'): '..expected..', actual: '..tostring(actual))
+ error('expected (+/- ' .. ep .. '): ' .. expected .. ', actual: ' .. tostring(actual))
end
end
@@ -395,8 +402,10 @@ describe("'scrollback' option", function()
meths.set_option_value('scrollback', 0, {})
feed_data(('%s REP 31 line%s'):format(testprg('shell-test'), is_os('win') and '\r' or '\n'))
- screen:expect{any='30: line '}
- retry(nil, nil, function() expect_lines(7) end)
+ screen:expect { any = '30: line ' }
+ retry(nil, nil, function()
+ expect_lines(7)
+ end)
end)
it('deletes lines (only) if necessary', function()
@@ -412,24 +421,31 @@ describe("'scrollback' option", function()
meths.set_option_value('scrollback', 200, {})
-- Wait for prompt.
- screen:expect{any='%$'}
+ screen:expect { any = '%$' }
feed_data(('%s REP 31 line%s'):format(testprg('shell-test'), is_os('win') and '\r' or '\n'))
- screen:expect{any='30: line '}
+ screen:expect { any = '30: line ' }
- retry(nil, nil, function() expect_lines(33, 2) end)
+ retry(nil, nil, function()
+ expect_lines(33, 2)
+ end)
meths.set_option_value('scrollback', 10, {})
poke_eventloop()
- retry(nil, nil, function() expect_lines(16) end)
+ retry(nil, nil, function()
+ expect_lines(16)
+ end)
meths.set_option_value('scrollback', 10000, {})
- retry(nil, nil, function() expect_lines(16) end)
+ retry(nil, nil, function()
+ expect_lines(16)
+ end)
-- Terminal job data is received asynchronously, may happen before the
-- 'scrollback' option is synchronized with the internal sb_buffer.
command('sleep 100m')
feed_data(('%s REP 41 line%s'):format(testprg('shell-test'), is_os('win') and '\r' or '\n'))
if is_os('win') then
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
37: line |
38: line |
39: line |
@@ -437,9 +453,11 @@ describe("'scrollback' option", function()
|
${1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
else
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
36: line |
37: line |
38: line |
@@ -447,7 +465,8 @@ describe("'scrollback' option", function()
40: line |
{MATCH:.*}|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end
expect_lines(58)
@@ -461,11 +480,11 @@ describe("'scrollback' option", function()
local screen = thelpers.screen_setup(nil, nil, 30)
local lines = {}
for i = 1, 30 do
- table.insert(lines, 'line'..tostring(i))
+ table.insert(lines, 'line' .. tostring(i))
end
table.insert(lines, '')
feed_data(lines)
- screen:expect([[
+ screen:expect([[
line26 |
line27 |
line28 |
@@ -474,7 +493,7 @@ describe("'scrollback' option", function()
{1: } |
{3:-- TERMINAL --} |
]])
- local term_height = 6 -- Actual terminal screen height, not the scrollback
+ local term_height = 6 -- Actual terminal screen height, not the scrollback
-- Initial
local scrollback = meths.get_option_value('scrollback', {})
eq(scrollback + term_height, eval('line("$")'))
@@ -491,10 +510,11 @@ describe("'scrollback' option", function()
end)
it('error if set to invalid value', function()
- eq('Vim(set):E474: Invalid argument: scrollback=-2',
- pcall_err(command, 'set scrollback=-2'))
- eq('Vim(set):E474: Invalid argument: scrollback=100001',
- pcall_err(command, 'set scrollback=100001'))
+ eq('Vim(set):E474: Invalid argument: scrollback=-2', pcall_err(command, 'set scrollback=-2'))
+ eq(
+ 'Vim(set):E474: Invalid argument: scrollback=100001',
+ pcall_err(command, 'set scrollback=100001')
+ )
end)
it('defaults to -1 on normal buffers', function()
@@ -512,7 +532,7 @@ describe("'scrollback' option", function()
-- _Local_ scrollback=-1 in :terminal forces the _maximum_.
command('setlocal scrollback=-1')
- retry(nil, nil, function() -- Fixup happens on refresh, not immediately.
+ retry(nil, nil, function() -- Fixup happens on refresh, not immediately.
eq(100000, meths.get_option_value('scrollback', {}))
end)
@@ -535,23 +555,22 @@ describe("'scrollback' option", function()
it(':set updates local value and global default', function()
set_fake_shell()
- command('set scrollback=42') -- set global value
+ command('set scrollback=42') -- set global value
eq(42, meths.get_option_value('scrollback', {}))
command('terminal')
eq(42, meths.get_option_value('scrollback', {})) -- inherits global default
command('setlocal scrollback=99')
eq(99, meths.get_option_value('scrollback', {}))
- command('set scrollback<') -- reset to global default
+ command('set scrollback<') -- reset to global default
eq(42, meths.get_option_value('scrollback', {}))
- command('setglobal scrollback=734') -- new global default
+ command('setglobal scrollback=734') -- new global default
eq(42, meths.get_option_value('scrollback', {})) -- local value did not change
command('terminal')
eq(734, meths.get_option_value('scrollback', {}))
end)
-
end)
-describe("pending scrollback line handling", function()
+describe('pending scrollback line handling', function()
local screen
before_each(function()
@@ -559,9 +578,9 @@ describe("pending scrollback line handling", function()
screen = Screen.new(30, 7)
screen:attach()
screen:set_default_attr_ids {
- [1] = {foreground = Screen.colors.Brown},
- [2] = {reverse = true},
- [3] = {bold = true},
+ [1] = { foreground = Screen.colors.Brown },
+ [2] = { reverse = true },
+ [3] = { bold = true },
}
end)
@@ -597,7 +616,8 @@ describe("pending scrollback line handling", function()
end)
it('does not crash after nvim_buf_call #14891', function()
- exec_lua([[
+ exec_lua(
+ [[
local bufnr = vim.api.nvim_create_buf(false, true)
local args = ...
vim.api.nvim_buf_call(bufnr, function()
@@ -605,9 +625,9 @@ describe("pending scrollback line handling", function()
end)
vim.api.nvim_win_set_buf(0, bufnr)
vim.cmd('startinsert')
- ]], is_os('win')
- and {'cmd.exe', '/c', 'for /L %I in (1,1,12) do @echo hi'}
- or {'printf', ('hi\n'):rep(12)}
+ ]],
+ is_os('win') and { 'cmd.exe', '/c', 'for /L %I in (1,1,12) do @echo hi' }
+ or { 'printf', ('hi\n'):rep(12) }
)
screen:expect [[
hi |*4
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index a4e3c1d199..831075fc08 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -30,7 +30,9 @@ local spawn_argv = helpers.spawn_argv
local set_session = helpers.set_session
local write_file = helpers.write_file
-if helpers.skip(is_os('win')) then return end
+if helpers.skip(is_os('win')) then
+ return
+end
describe('TUI', function()
local screen
@@ -41,11 +43,16 @@ describe('TUI', function()
clear()
local child_server = new_pipename()
screen = thelpers.setup_child_nvim({
- '--listen', child_server,
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', nvim_set .. ' notermguicolors laststatus=2 background=dark',
- '--cmd', 'colorscheme vim'
+ '--listen',
+ child_server,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ nvim_set .. ' notermguicolors laststatus=2 background=dark',
+ '--cmd',
+ 'colorscheme vim',
})
screen:expect([[
{1: } |
@@ -78,7 +85,7 @@ describe('TUI', function()
it('rapid resize #7572 #7628', function()
helpers.skip(helpers.is_asan(), 'Test extra unstable with ASAN. See #23762')
-- Need buffer rows to provoke the behavior.
- feed_data(":edit test/functional/fixtures/bigfile.txt\n")
+ feed_data(':edit test/functional/fixtures/bigfile.txt\n')
screen:expect([[
{1:0}000;<control>;Cc;0;BN;;;;;N;NULL;;;; |
0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;; |
@@ -105,21 +112,26 @@ describe('TUI', function()
screen:try_resize(57, 17)
command('call jobresize(b:terminal_job_id, 57, 17)')
retry(nil, nil, function()
- eq({true, 57}, {child_session:request('nvim_win_get_width', 0)})
+ eq({ true, 57 }, { child_session:request('nvim_win_get_width', 0) })
end)
end)
it('accepts resize while pager is active', function()
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
set more
func! ManyErr()
for i in range(20)
echoerr "FAIL ".i
endfor
endfunc
- ]], {})
+ ]],
+ {}
+ )
feed_data(':call ManyErr()\r')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{8:Error detected while processing function ManyErr:} |
{11:line 2:} |
{8:FAIL 0} |
@@ -127,10 +139,12 @@ describe('TUI', function()
{8:FAIL 2} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- screen:try_resize(50,10)
- screen:expect{grid=[[
+ screen:try_resize(50, 10)
+ screen:expect {
+ grid = [[
:call ManyErr() |
{8:Error detected while processing function ManyErr:} |
{11:line 2:} |
@@ -140,10 +154,12 @@ describe('TUI', function()
|*2
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('j')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{8:Error detected while processing function ManyErr:} |
{11:line 2:} |
{8:FAIL 0} |
@@ -154,10 +170,12 @@ describe('TUI', function()
{8:FAIL 5} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- screen:try_resize(50,7)
- screen:expect{grid=[[
+ screen:try_resize(50, 7)
+ screen:expect {
+ grid = [[
{8:FAIL 1} |
{8:FAIL 2} |
{8:FAIL 3} |
@@ -165,28 +183,34 @@ describe('TUI', function()
{8:FAIL 5} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- screen:try_resize(50,5)
- screen:expect{grid=[[
+ screen:try_resize(50, 5)
+ screen:expect {
+ grid = [[
{8:FAIL 3} |
{8:FAIL 4} |
{8:FAIL 5} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('g')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
:call ManyErr() |
{8:Error detected while processing function ManyErr:} |
{11:line 2:} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- screen:try_resize(50,10)
- screen:expect{grid=[[
+ screen:try_resize(50, 10)
+ screen:expect {
+ grid = [[
:call ManyErr() |
{8:Error detected while processing function ManyErr:} |
{11:line 2:} |
@@ -197,16 +221,19 @@ describe('TUI', function()
{8:FAIL 4} |
{10:-- More --}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('\003')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*6
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('accepts basic utf-8 input', function()
@@ -235,8 +262,8 @@ describe('TUI', function()
it('interprets leading <Esc> byte as ALT modifier in normal-mode', function()
local keys = 'dfghjkl'
for c in keys:gmatch('.') do
- feed_data(':nnoremap <a-'..c..'> ialt-'..c..'<cr><esc>\r')
- feed_data('\027'..c)
+ feed_data(':nnoremap <a-' .. c .. '> ialt-' .. c .. '<cr><esc>\r')
+ feed_data('\027' .. c)
end
screen:expect([[
alt-j |
@@ -273,11 +300,15 @@ describe('TUI', function()
end)
it('interprets <Esc>[27u as <Esc>', function()
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
nnoremap <M-;> <Nop>
nnoremap <Esc> AESC<Esc>
nnoremap ; Asemicolon<Esc>
- ]], {})
+ ]],
+ {}
+ )
feed_data('\027[27u;')
screen:expect([[
ESCsemicolo{1:n} |
@@ -308,22 +339,29 @@ describe('TUI', function()
feed_data('\022\022') -- ctrl+v
feed_data('\022\013') -- ctrl+m
local attrs = screen:get_default_attr_ids()
- attrs[11] = {foreground = 81}
- screen:expect([[
+ attrs[11] = { foreground = 81 }
+ screen:expect(
+ [[
{11:^G^V^M}{1: } |
{4:~ }|*3
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]], attrs)
+ ]],
+ attrs
+ )
end)
local function test_mouse_wheel(esc)
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
set number nostartofline nowrap mousescroll=hor:1,ver:1
call setline(1, repeat([join(range(10), '----')], 10))
vsplit
- ]], {})
+ ]],
+ {}
+ )
screen:expect([[
{11: 1 }{1:0}----1----2----3----4│{11: 1 }0----1----2----3----|
{11: 2 }0----1----2----3----4│{11: 2 }0----1----2----3----|
@@ -586,7 +624,9 @@ describe('TUI', function()
end)
local function test_mouse_popup(esc)
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
call setline(1, 'popup menu test')
set mouse=a mousemodel=popup
@@ -596,7 +636,9 @@ describe('TUI', function()
menu PopUp.baz :let g:menustr = 'baz'<CR>
highlight Pmenu ctermbg=NONE ctermfg=NONE cterm=underline,reverse
highlight PmenuSel ctermbg=NONE ctermfg=NONE cterm=underline,reverse,bold
- ]], {})
+ ]],
+ {}
+ )
if esc then
feed_data('\027[<2;5;1M')
else
@@ -825,11 +867,15 @@ describe('TUI', function()
|
{3:-- TERMINAL --} |
]])
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
tab split
tabnew
highlight Tabline ctermbg=NONE ctermfg=NONE cterm=underline
- ]], {})
+ ]],
+ {}
+ )
screen:expect([[
{12: + [No Name] + [No Name] }{3: [No Name] }{1: }{12:X}|
{1: } |
@@ -861,15 +907,15 @@ describe('TUI', function()
it('supports Super and Meta modifiers', function()
feed_data('i')
- feed_data('\022\027[106;9u') -- Super + j
- feed_data('\022\027[107;33u') -- Meta + k
- feed_data('\022\027[13;41u') -- Super + Meta + Enter
- feed_data('\022\027[127;48u') -- Shift + Alt + Ctrl + Super + Meta + Backspace
+ feed_data('\022\027[106;9u') -- Super + j
+ feed_data('\022\027[107;33u') -- Meta + k
+ feed_data('\022\027[13;41u') -- Super + Meta + Enter
+ feed_data('\022\027[127;48u') -- Shift + Alt + Ctrl + Super + Meta + Backspace
feed_data('\n')
- feed_data('\022\027[57376;9u') -- Super + F13
- feed_data('\022\027[57377;33u') -- Meta + F14
- feed_data('\022\027[57378;41u') -- Super + Meta + F15
- feed_data('\022\027[57379;48u') -- Shift + Alt + Ctrl + Super + Meta + F16
+ feed_data('\022\027[57376;9u') -- Super + F13
+ feed_data('\022\027[57377;33u') -- Meta + F14
+ feed_data('\022\027[57378;41u') -- Super + Meta + F15
+ feed_data('\022\027[57379;48u') -- Shift + Alt + Ctrl + Super + Meta + F16
screen:expect([[
<D-j><T-k><T-D-CR><M-T-C-S-D-BS> |
<D-F13><T-F14><T-D-F15><M-T-C-S-D-F16>{1: } |
@@ -891,7 +937,7 @@ describe('TUI', function()
{3:-- TERMINAL --} |
]])
feed_data('pasted from terminal')
- expect_child_buf_lines({'"pasted from terminal"'})
+ expect_child_buf_lines({ '"pasted from terminal"' })
screen:expect([[
"pasted from terminal{1:"} |
{4:~ }|*3
@@ -899,8 +945,8 @@ describe('TUI', function()
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
- feed_data('\027[201~') -- End paste.
- feed_data('\027[27u') -- ESC: go to Normal mode.
+ feed_data('\027[201~') -- End paste.
+ feed_data('\027[27u') -- ESC: go to Normal mode.
wait_for_mode('n')
screen:expect([[
"pasted from termina{1:l}" |
@@ -911,7 +957,7 @@ describe('TUI', function()
]])
-- Dot-repeat/redo.
feed_data('2.')
- expect_child_buf_lines({'"pasted from terminapasted from terminalpasted from terminall"'})
+ expect_child_buf_lines({ '"pasted from terminapasted from terminalpasted from terminall"' })
screen:expect([[
"pasted from terminapasted from terminalpasted fro|
m termina{1:l}l" |
@@ -922,17 +968,18 @@ describe('TUI', function()
]])
-- Undo.
feed_data('u')
- expect_child_buf_lines({'"pasted from terminal"'})
+ expect_child_buf_lines({ '"pasted from terminal"' })
feed_data('u')
- expect_child_buf_lines({'""'})
+ expect_child_buf_lines({ '""' })
feed_data('u')
- expect_child_buf_lines({''})
+ expect_child_buf_lines({ '' })
end)
it('paste: select-mode', function()
feed_data('ithis is line 1\nthis is line 2\nline 3 is here\n\027')
wait_for_mode('n')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
this is line 1 |
this is line 2 |
line 3 is here |
@@ -940,32 +987,35 @@ describe('TUI', function()
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Select-mode. Use <C-n> to move down.
feed_data('gg04lgh\14\14')
wait_for_mode('s')
feed_data('\027[200~')
feed_data('just paste it™')
feed_data('\027[201~')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
thisjust paste it{1:™}3 is here |
|
{4:~ }|*2
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Undo.
feed_data('u')
- expect_child_buf_lines{
+ expect_child_buf_lines {
'this is line 1',
'this is line 2',
'line 3 is here',
'',
}
-- Redo.
- feed_data('\18') -- <C-r>
- expect_child_buf_lines{
+ feed_data('\18') -- <C-r>
+ expect_child_buf_lines {
'thisjust paste it™3 is here',
'',
}
@@ -973,28 +1023,32 @@ describe('TUI', function()
it('paste: terminal mode', function()
if is_ci('github') then
- pending("tty-test complains about not owning the terminal -- actions/runner#241")
+ pending('tty-test complains about not owning the terminal -- actions/runner#241')
end
child_exec_lua('vim.o.statusline="^^^^^^^"')
child_exec_lua('vim.cmd.terminal(...)', testprg('tty-test'))
feed_data('i')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
{1: } |
|*2
{5:^^^^^^^ }|
{3:-- TERMINAL --} |*2
- ]]}
+ ]],
+ }
feed_data('\027[200~')
feed_data('hallo')
feed_data('\027[201~')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
tty ready |
hallo{1: } |
|*2
{5:^^^^^^^ }|
{3:-- TERMINAL --} |*2
- ]]}
+ ]],
+ }
end)
it('paste: normal-mode (+CRLF #10872)', function()
@@ -1002,8 +1056,8 @@ describe('TUI', function()
wait_for_mode('c')
feed_data('\n')
wait_for_mode('n')
- local expected_lf = {'line 1', 'ESC:\027 / CR: \rx'}
- local expected_crlf = {'line 1', 'ESC:\027 / CR: ', 'x'}
+ local expected_lf = { 'line 1', 'ESC:\027 / CR: \rx' }
+ local expected_crlf = { 'line 1', 'ESC:\027 / CR: ', 'x' }
local expected_grid1 = [[
line 1 |
ESC:{11:^[} / CR: |
@@ -1014,19 +1068,20 @@ describe('TUI', function()
{3:-- TERMINAL --} |
]]
local expected_attr = {
- [1] = {reverse = true},
- [3] = {bold = true},
- [4] = {foreground = tonumber('0x00000c')},
- [5] = {bold = true, reverse = true},
- [11] = {foreground = tonumber('0x000051')},
- [12] = {reverse = true, foreground = tonumber('0x000051')},
+ [1] = { reverse = true },
+ [3] = { bold = true },
+ [4] = { foreground = tonumber('0x00000c') },
+ [5] = { bold = true, reverse = true },
+ [11] = { foreground = tonumber('0x000051') },
+ [12] = { reverse = true, foreground = tonumber('0x000051') },
}
-- "bracketed paste"
- feed_data('\027[200~'..table.concat(expected_lf,'\n')..'\027[201~')
- screen:expect{grid=expected_grid1, attr_ids=expected_attr}
+ feed_data('\027[200~' .. table.concat(expected_lf, '\n') .. '\027[201~')
+ screen:expect { grid = expected_grid1, attr_ids = expected_attr }
-- Dot-repeat/redo.
feed_data('.')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
ESC:{11:^[} / CR: |
xline 1 |
ESC:{11:^[} / CR: |
@@ -1034,64 +1089,69 @@ describe('TUI', function()
{5:[No Name] [+] 5,1 Bot}|
|
{3:-- TERMINAL --} |
- ]], attr_ids=expected_attr}
+ ]],
+ attr_ids = expected_attr,
+ }
-- Undo.
feed_data('u')
expect_child_buf_lines(expected_crlf)
feed_data('u')
- expect_child_buf_lines({''})
+ expect_child_buf_lines({ '' })
feed_data(':echo')
wait_for_mode('c')
feed_data('\n')
wait_for_mode('n')
-- CRLF input
- feed_data('\027[200~'..table.concat(expected_lf,'\r\n')..'\027[201~')
- screen:expect{grid=expected_grid1, attr_ids=expected_attr}
+ feed_data('\027[200~' .. table.concat(expected_lf, '\r\n') .. '\027[201~')
+ screen:expect { grid = expected_grid1, attr_ids = expected_attr }
expect_child_buf_lines(expected_crlf)
end)
it('paste: cmdline-mode inserts 1 line', function()
- feed_data('ifoo\n') -- Insert some text (for dot-repeat later).
- feed_data('\027:""') -- Enter Cmdline-mode.
- feed_data('\027[D') -- <Left> to place cursor between quotes.
+ feed_data('ifoo\n') -- Insert some text (for dot-repeat later).
+ feed_data('\027:""') -- Enter Cmdline-mode.
+ feed_data('\027[D') -- <Left> to place cursor between quotes.
wait_for_mode('c')
-- "bracketed paste"
feed_data('\027[200~line 1\nline 2\n')
wait_for_mode('c')
feed_data('line 3\nline 4\n\027[201~')
wait_for_mode('c')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |
|
{4:~ }|*2
{5:[No Name] [+] }|
:"line 1{1:"} |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Dot-repeat/redo.
feed_data('\027[27u')
wait_for_mode('n')
feed_data('.')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |*2
{1: } |
{4:~ }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('paste: cmdline-mode collects chunks of unfinished line', function()
local function expect_cmdline(expected)
retry(nil, nil, function()
- local _, cmdline = child_session:request(
- 'nvim_call_function', 'getcmdline', {})
+ local _, cmdline = child_session:request('nvim_call_function', 'getcmdline', {})
eq(expected, cmdline)
end)
end
- feed_data('\027:""') -- Enter Cmdline-mode.
- feed_data('\027[D') -- <Left> to place cursor between quotes.
+ feed_data('\027:""') -- Enter Cmdline-mode.
+ feed_data('\027[D') -- <Left> to place cursor between quotes.
wait_for_mode('c')
feed_data('\027[200~stuff 1 ')
expect_cmdline('"stuff 1 "')
@@ -1107,26 +1167,33 @@ describe('TUI', function()
end)
it('paste: recovers from vim.paste() failure', function()
- child_session:request('nvim_exec_lua', [[
+ child_session:request(
+ 'nvim_exec_lua',
+ [[
_G.save_paste_fn = vim.paste
-- Stack traces for this test are non-deterministic, so disable them
_G.debug.traceback = function(msg) return msg end
vim.paste = function(lines, phase) error("fake fail") end
- ]], {})
+ ]],
+ {}
+ )
-- Prepare something for dot-repeat/redo.
feed_data('ifoo\n\027[27u')
wait_for_mode('n')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |
{1: } |
{4:~ }|*2
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Start pasting...
feed_data('\027[200~line 1\nline 2\n')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |
|
{5: }|
@@ -1134,42 +1201,52 @@ describe('TUI', function()
{8:ake fail} |
{10:Press ENTER or type command to continue}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Remaining chunks are discarded after vim.paste() failure.
feed_data('line 3\nline 4\n')
feed_data('line 5\nline 6\n')
feed_data('line 7\nline 8\n')
-- Stop paste.
feed_data('\027[201~')
- feed_data('\n') -- <CR>
- expect_child_buf_lines({'foo',''})
+ feed_data('\n') -- <CR>
+ expect_child_buf_lines({ 'foo', '' })
--Dot-repeat/redo is not modified by failed paste.
feed_data('.')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |*2
{1: } |
{4:~ }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Editor should still work after failed/drained paste.
feed_data('ityped input...\027[27u')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
foo |*2
typed input..{1:.} |
{4:~ }|
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Paste works if vim.paste() succeeds.
- child_session:request('nvim_exec_lua', [[
+ child_session:request(
+ 'nvim_exec_lua',
+ [[
vim.paste = _G.save_paste_fn
- ]], {})
+ ]],
+ {}
+ )
feed_data('\027[200~line A\nline B\n\027[201~')
- feed_data('\n') -- <CR>
- screen:expect{grid=[[
+ feed_data('\n') -- <CR>
+ screen:expect {
+ grid = [[
foo |
typed input...line A |
line B |
@@ -1177,28 +1254,38 @@ describe('TUI', function()
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('paste: vim.paste() cancel (retval=false) #10865', function()
-- This test only exercises the "cancel" case. Use-case would be "dangling
-- paste", but that is not implemented yet. #10865
- child_session:request('nvim_exec_lua', [[
+ child_session:request(
+ 'nvim_exec_lua',
+ [[
vim.paste = function(lines, phase) return false end
- ]], {})
+ ]],
+ {}
+ )
feed_data('\027[200~line A\nline B\n\027[201~')
feed_data('ifoo\n\027[27u')
- expect_child_buf_lines({'foo',''})
+ expect_child_buf_lines({ 'foo', '' })
end)
it("paste: 'nomodifiable' buffer", function()
child_session:request('nvim_command', 'set nomodifiable')
- child_session:request('nvim_exec_lua', [[
+ child_session:request(
+ 'nvim_exec_lua',
+ [[
-- Truncate the error message to hide the line number
_G.debug.traceback = function(msg) return msg:sub(-49) end
- ]], {})
+ ]],
+ {}
+ )
feed_data('\027[200~fail 1\nfail 2\n\027[201~')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
{4:~ }|
{5: }|
@@ -1206,11 +1293,13 @@ describe('TUI', function()
{8:hanges, 'modifiable' is off} |
{10:Press ENTER or type command to continue}{1: } |
{3:-- TERMINAL --} |
- ]]}
- feed_data('\n') -- <Enter>
+ ]],
+ }
+ feed_data('\n') -- <Enter>
child_session:request('nvim_command', 'set modifiable')
feed_data('\027[200~success 1\nsuccess 2\n\027[201~')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
success 1 |
success 2 |
{1: } |
@@ -1218,7 +1307,8 @@ describe('TUI', function()
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('paste: exactly 64 bytes #10311', function()
@@ -1226,10 +1316,10 @@ describe('TUI', function()
feed_data('i')
wait_for_mode('i')
-- "bracketed paste"
- feed_data('\027[200~'..expected..'\027[201~')
- expect_child_buf_lines({expected})
+ feed_data('\027[200~' .. expected .. '\027[201~')
+ expect_child_buf_lines({ expected })
feed_data(' end')
- expected = expected..' end'
+ expected = expected .. ' end'
screen:expect([[
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz|
zzzzzzzzzzzzzz end{1: } |
@@ -1238,7 +1328,7 @@ describe('TUI', function()
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
- expect_child_buf_lines({expected})
+ expect_child_buf_lines({ expected })
end)
it('paste: less-than sign in cmdline #11088', function()
@@ -1246,14 +1336,16 @@ describe('TUI', function()
feed_data(':')
wait_for_mode('c')
-- "bracketed paste"
- feed_data('\027[200~'..expected..'\027[201~')
- screen:expect{grid=[[
+ feed_data('\027[200~' .. expected .. '\027[201~')
+ screen:expect {
+ grid = [[
|
{4:~ }|*3
{5:[No Name] }|
:<{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('paste: big burst of input', function()
@@ -1265,7 +1357,7 @@ describe('TUI', function()
feed_data('i')
wait_for_mode('i')
-- "bracketed paste"
- feed_data('\027[200~'..table.concat(t, '\n')..'\027[201~')
+ feed_data('\027[200~' .. table.concat(t, '\n') .. '\027[201~')
expect_child_buf_lines(t)
feed_data(' end')
screen:expect([[
@@ -1277,7 +1369,7 @@ describe('TUI', function()
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
- feed_data('\027[27u') -- ESC: go to Normal mode.
+ feed_data('\027[27u') -- ESC: go to Normal mode.
wait_for_mode('n')
-- Dot-repeat/redo.
feed_data('.')
@@ -1305,7 +1397,8 @@ describe('TUI', function()
-- Send the "stop paste" sequence.
feed_data('\027[201~')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
pasted from terminal (1) |
{6:^[}[200~ |
@@ -1313,14 +1406,16 @@ describe('TUI', function()
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]], attr_ids={
- [1] = {reverse = true},
- [2] = {background = tonumber('0x00000b')},
- [3] = {bold = true},
- [4] = {foreground = tonumber('0x00000c')},
- [5] = {bold = true, reverse = true},
- [6] = {foreground = tonumber('0x000051')},
- }}
+ ]],
+ attr_ids = {
+ [1] = { reverse = true },
+ [2] = { background = tonumber('0x00000b') },
+ [3] = { bold = true },
+ [4] = { foreground = tonumber('0x00000c') },
+ [5] = { bold = true, reverse = true },
+ [6] = { foreground = tonumber('0x000051') },
+ },
+ }
end)
it('paste: ignores spurious "stop paste" code', function()
@@ -1340,13 +1435,15 @@ describe('TUI', function()
it('paste: split "start paste" code', function()
feed_data('i')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Send split "start paste" sequence.
feed_data('\027[2')
feed_data('00~pasted from terminal\027[201~')
@@ -1361,13 +1458,15 @@ describe('TUI', function()
it('paste: split "stop paste" code', function()
feed_data('i')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- Send split "stop paste" sequence.
feed_data('\027[200~pasted from terminal\027[20')
feed_data('1~')
@@ -1381,7 +1480,9 @@ describe('TUI', function()
end)
it('paste: streamed paste with isolated "stop paste" code', function()
- child_session:request('nvim_exec_lua', [[
+ child_session:request(
+ 'nvim_exec_lua',
+ [[
_G.paste_phases = {}
vim.paste = (function(overridden)
return function(lines, phase)
@@ -1389,16 +1490,20 @@ describe('TUI', function()
overridden(lines, phase)
end
end)(vim.paste)
- ]], {})
+ ]],
+ {}
+ )
feed_data('i')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
- feed_data('\027[200~pasted') -- phase 1
+ ]],
+ }
+ feed_data('\027[200~pasted') -- phase 1
screen:expect([[
pasted{1: } |
{4:~ }|*3
@@ -1406,7 +1511,7 @@ describe('TUI', function()
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
- feed_data(' from terminal') -- phase 2
+ feed_data(' from terminal') -- phase 2
screen:expect([[
pasted from terminal{1: } |
{4:~ }|*3
@@ -1415,25 +1520,25 @@ describe('TUI', function()
{3:-- TERMINAL --} |
]])
-- Send isolated "stop paste" sequence.
- feed_data('\027[201~') -- phase 3
+ feed_data('\027[201~') -- phase 3
screen:expect_unchanged()
local _, rv = child_session:request('nvim_exec_lua', [[return _G.paste_phases]], {})
- eq({1, 2, 3}, rv)
+ eq({ 1, 2, 3 }, rv)
end)
it('allows termguicolors to be set at runtime', function()
screen:set_option('rgb', true)
screen:set_default_attr_ids({
- [1] = {reverse = true},
- [2] = {foreground = tonumber('0x4040ff'), fg_indexed=true},
- [3] = {bold = true, reverse = true},
- [4] = {bold = true},
- [5] = {reverse = true, foreground = tonumber('0xe0e000'), fg_indexed=true},
- [6] = {foreground = tonumber('0xe0e000'), fg_indexed=true},
- [7] = {reverse = true, foreground = Screen.colors.SeaGreen4},
- [8] = {foreground = Screen.colors.SeaGreen4},
- [9] = {bold = true, foreground = Screen.colors.Blue1},
- [10] = {foreground = Screen.colors.Blue},
+ [1] = { reverse = true },
+ [2] = { foreground = tonumber('0x4040ff'), fg_indexed = true },
+ [3] = { bold = true, reverse = true },
+ [4] = { bold = true },
+ [5] = { reverse = true, foreground = tonumber('0xe0e000'), fg_indexed = true },
+ [6] = { foreground = tonumber('0xe0e000'), fg_indexed = true },
+ [7] = { reverse = true, foreground = Screen.colors.SeaGreen4 },
+ [8] = { foreground = Screen.colors.SeaGreen4 },
+ [9] = { bold = true, foreground = Screen.colors.Blue1 },
+ [10] = { foreground = Screen.colors.Blue },
})
feed_data(':hi SpecialKey ctermfg=3 guifg=SeaGreen\n')
@@ -1470,46 +1575,54 @@ describe('TUI', function()
it('forwards :term palette colors with termguicolors', function()
if is_ci('github') then
- pending("tty-test complains about not owning the terminal -- actions/runner#241")
+ pending('tty-test complains about not owning the terminal -- actions/runner#241')
end
screen:set_rgb_cterm(true)
screen:set_default_attr_ids({
- [1] = {{reverse = true}, {reverse = true}},
- [2] = {{bold = true, reverse = true}, {bold = true, reverse = true}},
- [3] = {{bold = true}, {bold = true}},
- [4] = {{fg_indexed = true, foreground = tonumber('0xe0e000')}, {foreground = 3}},
- [5] = {{foreground = tonumber('0xff8000')}, {}},
+ [1] = { { reverse = true }, { reverse = true } },
+ [2] = { { bold = true, reverse = true }, { bold = true, reverse = true } },
+ [3] = { { bold = true }, { bold = true } },
+ [4] = { { fg_indexed = true, foreground = tonumber('0xe0e000') }, { foreground = 3 } },
+ [5] = { { foreground = tonumber('0xff8000') }, {} },
})
child_exec_lua('vim.o.statusline="^^^^^^^"')
child_exec_lua('vim.o.termguicolors=true')
child_exec_lua('vim.cmd.terminal(...)', testprg('tty-test'))
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1:t}ty ready |
|*3
{2:^^^^^^^ }|
|
{3:-- TERMINAL --} |
- ]]}
- feed_data(':call chansend(&channel, "\\033[38;5;3mtext\\033[38:2:255:128:0mcolor\\033[0;10mtext")\n')
- screen:expect{grid=[[
+ ]],
+ }
+ feed_data(
+ ':call chansend(&channel, "\\033[38;5;3mtext\\033[38:2:255:128:0mcolor\\033[0;10mtext")\n'
+ )
+ screen:expect {
+ grid = [[
{1:t}ty ready |
{4:text}{5:color}text |
|*2
{2:^^^^^^^ }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data(':set notermguicolors\n')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1:t}ty ready |
{4:text}colortext |
|*2
{2:^^^^^^^ }|
:set notermguicolors |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('in nvim_list_uis()', function()
@@ -1535,7 +1648,7 @@ describe('TUI', function()
term_background = '',
term_colors = 256,
term_name = exp_term,
- width = 50
+ width = 50,
},
}
local _, rv = child_session:request('nvim_list_uis')
@@ -1543,10 +1656,17 @@ describe('TUI', function()
end)
it('allows grid to assume wider ambiguous-width characters than host terminal #19686', function()
- child_session:request('nvim_buf_set_lines', 0, 0, -1, true, { ('℃'):rep(60), ('℃'):rep(60) })
+ child_session:request(
+ 'nvim_buf_set_lines',
+ 0,
+ 0,
+ -1,
+ true,
+ { ('℃'):rep(60), ('℃'):rep(60) }
+ )
child_session:request('nvim_set_option_value', 'cursorline', true, {})
child_session:request('nvim_set_option_value', 'list', true, {})
- child_session:request('nvim_set_option_value', 'listchars', 'eol:$', {win=0})
+ child_session:request('nvim_set_option_value', 'listchars', 'eol:$', { win = 0 })
feed_data('gg')
local singlewidth_screen = [[
{13:℃}{12:℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃℃}|
@@ -1573,9 +1693,9 @@ describe('TUI', function()
screen:expect(doublewidth_screen)
child_session:request('nvim_set_option_value', 'ambiwidth', 'single', {})
screen:expect(singlewidth_screen)
- child_session:request('nvim_call_function', 'setcellwidths', {{{0x2103, 0x2103, 2}}})
+ child_session:request('nvim_call_function', 'setcellwidths', { { { 0x2103, 0x2103, 2 } } })
screen:expect(doublewidth_screen)
- child_session:request('nvim_call_function', 'setcellwidths', {{{0x2103, 0x2103, 1}}})
+ child_session:request('nvim_call_function', 'setcellwidths', { { { 0x2103, 0x2103, 1 } } })
screen:expect(singlewidth_screen)
end)
@@ -1583,80 +1703,102 @@ describe('TUI', function()
helpers.skip(is_os('mac'), 'FIXME: crashes/errors on macOS')
screen:try_resize(77, 855)
retry(nil, nil, function()
- eq({true, 852}, {child_session:request('nvim_win_get_height', 0)})
+ eq({ true, 852 }, { child_session:request('nvim_win_get_height', 0) })
end)
-- Use full screen message so that redrawing afterwards is more deterministic.
child_session:notify('nvim_command', 'intro')
- screen:expect({any = 'Nvim'})
+ screen:expect({ any = 'Nvim' })
-- Going to top-left corner needs 3 bytes.
-- Setting underline attribute needs 9 bytes.
-- The whole line needs 3 + 9 + 65513 + 3 = 65528 bytes.
-- The cursor_address that comes after will overflow the 65535-byte buffer.
local line = ('a'):rep(65513) .. '℃'
- child_session:notify('nvim_exec_lua', [[
+ child_session:notify(
+ 'nvim_exec_lua',
+ [[
vim.api.nvim_buf_set_lines(0, 0, -1, true, {...})
vim.o.cursorline = true
- ]], {line, 'b'})
+ ]],
+ { line, 'b' }
+ )
-- Close the :intro message and redraw the lines.
feed_data('\n')
screen:expect(
- '{13:a}{12:' .. ('a'):rep(76) .. '}|\n'
- .. ('{12:' .. ('a'):rep(77) .. '}|\n'):rep(849)
- .. '{12:' .. ('a'):rep(63) .. '℃' .. (' '):rep(13) .. '}|\n' .. dedent([[
+ '{13:a}{12:'
+ .. ('a'):rep(76)
+ .. '}|\n'
+ .. ('{12:' .. ('a'):rep(77) .. '}|\n'):rep(849)
+ .. '{12:'
+ .. ('a'):rep(63)
+ .. '℃'
+ .. (' '):rep(13)
+ .. '}|\n'
+ .. dedent([[
b |
{5:[No Name] [+] }|
|
- {3:-- TERMINAL --} |]]))
+ {3:-- TERMINAL --} |]])
+ )
end)
it('visual bell (padding) does not crash #21610', function()
feed_data ':set visualbell\n'
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
:set visualbell |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- move left is enough to invoke the bell
feed_data 'h'
-- visual change to show we process events after this
feed_data 'i'
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('no assert failure on deadly signal #21896', function()
exec_lua([[vim.uv.kill(vim.fn.jobpid(vim.bo.channel), 'sigterm')]])
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
Vim: Caught deadly signal 'SIGTERM' |
|*2
[Process exited 1]{1: } |
|*2
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('no stack-use-after-scope with cursor color #22432', function()
screen:set_option('rgb', true)
command('set termguicolors')
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
set tgc
hi Cursor guifg=Red guibg=Green
set guicursor=n:block-Cursor/lCursor
- ]], {})
+ ]],
+ {}
+ )
screen:set_default_attr_ids({
- [1] = {reverse = true},
- [2] = {bold = true, foreground = Screen.colors.Blue},
- [3] = {foreground = Screen.colors.Blue},
- [4] = {reverse = true, bold = true},
- [5] = {bold = true},
+ [1] = { reverse = true },
+ [2] = { bold = true, foreground = Screen.colors.Blue },
+ [3] = { foreground = Screen.colors.Blue },
+ [4] = { reverse = true, bold = true },
+ [5] = { bold = true },
})
screen:expect([[
{1: } |
@@ -1676,7 +1818,7 @@ describe('TUI', function()
end)
it('redraws on SIGWINCH even if terminal size is unchanged #23411', function()
- child_session:request('nvim_echo', {{'foo'}}, false, {})
+ child_session:request('nvim_echo', { { 'foo' } }, false, {})
screen:expect([[
{1: } |
{4:~ }|*3
@@ -1695,8 +1837,10 @@ describe('TUI', function()
end)
it('supports hiding cursor', function()
- child_session:request('nvim_command',
- "let g:id = jobstart([v:progpath, '--clean', '--headless'])")
+ child_session:request(
+ 'nvim_command',
+ "let g:id = jobstart([v:progpath, '--clean', '--headless'])"
+ )
feed_data(':call jobwait([g:id])\n')
screen:expect([[
|
@@ -1752,19 +1896,22 @@ describe('TUI', function()
it('resize at startup #17285 #15044 #11330', function()
local screen = Screen.new(50, 10)
screen:set_default_attr_ids({
- [1] = {reverse = true},
- [2] = {bold = true, foreground = Screen.colors.Blue},
- [3] = {bold = true},
- [4] = {foreground = tonumber('0x4040ff'), fg_indexed = true},
- [5] = {bold = true, reverse = true},
+ [1] = { reverse = true },
+ [2] = { bold = true, foreground = Screen.colors.Blue },
+ [3] = { bold = true },
+ [4] = { foreground = tonumber('0x4040ff'), fg_indexed = true },
+ [5] = { bold = true, reverse = true },
})
screen:attach()
funcs.termopen({
nvim_prog,
'--clean',
- '--cmd', 'colorscheme vim',
- '--cmd', 'set notermguicolors',
- '--cmd', 'let start = reltime() | while v:true | if reltimefloat(reltime(start)) > 2 | break | endif | endwhile',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set notermguicolors',
+ '--cmd',
+ 'let start = reltime() | while v:true | if reltimefloat(reltime(start)) > 2 | break | endif | endwhile',
}, {
env = {
VIMRUNTIME = os.getenv('VIMRUNTIME'),
@@ -1792,24 +1939,30 @@ describe('TUI', function()
pending('missing LuaJIT FFI')
end
local script_file = 'Xargv0.lua'
- write_file(script_file, [=[
+ write_file(
+ script_file,
+ [=[
local ffi = require('ffi')
ffi.cdef([[int execl(const char *, const char *, ...);]])
ffi.C.execl(vim.v.progpath, 'Xargv0nvim', '--clean')
- ]=])
+ ]=]
+ )
finally(function()
os.remove(script_file)
end)
- local screen = thelpers.setup_child_nvim({'--clean', '-l', script_file})
- screen:expect{grid=[[
+ local screen = thelpers.setup_child_nvim({ '--clean', '-l', script_file })
+ screen:expect {
+ grid = [[
{1: } |
~ |*3
[No Name] 0,0-1 All|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data(':put =v:argv + [v:progname]\n')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
Xargv0nvim |
--embed |
--clean |
@@ -1817,16 +1970,22 @@ describe('TUI', function()
[No Name] [+] 5,1 Bot|
4 more lines |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
it('with non-tty (pipe) stdout/stderr', function()
finally(function()
os.remove('testF')
end)
- local screen = thelpers.screen_setup(0,
- ('"%s" -u NONE -i NONE --cmd "set noswapfile noshowcmd noruler" --cmd "normal iabc" > /dev/null 2>&1 && cat testF && rm testF'):format(nvim_prog),
- nil, { VIMRUNTIME = os.getenv('VIMRUNTIME') })
+ local screen = thelpers.screen_setup(
+ 0,
+ ('"%s" -u NONE -i NONE --cmd "set noswapfile noshowcmd noruler" --cmd "normal iabc" > /dev/null 2>&1 && cat testF && rm testF'):format(
+ nvim_prog
+ ),
+ nil,
+ { VIMRUNTIME = os.getenv('VIMRUNTIME') }
+ )
feed_data(':w testF\n:q\n')
screen:expect([[
:w testF |
@@ -1841,19 +2000,26 @@ describe('TUI', function()
it('<C-h> #10134', function()
local screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', 'set noruler notermguicolors',
- '--cmd', ':nnoremap <C-h> :echomsg "\\<C-h\\>"<CR>',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set noruler notermguicolors',
+ '--cmd',
+ ':nnoremap <C-h> :echomsg "\\<C-h\\>"<CR>',
})
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
command([[call chansend(b:terminal_job_id, "\<C-h>")]])
screen:expect([[
@@ -1867,22 +2033,30 @@ describe('TUI', function()
it('draws line with many trailing spaces correctly #24955', function()
local screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'set notermguicolors',
- '--cmd', 'colorscheme vim',
- '--cmd', 'call setline(1, ["1st line" .. repeat(" ", 153), "2nd line"])',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'set notermguicolors',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'call setline(1, ["1st line" .. repeat(" ", 153), "2nd line"])',
}, { cols = 80 })
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1:1}st line |
|*2
2nd line |
{5:[No Name] [+] 1,1 All}|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('$')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
1st line |
|
{1: } |
@@ -1890,7 +2064,8 @@ describe('TUI', function()
{5:[No Name] [+] 1,161 All}|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
end)
@@ -1898,30 +2073,42 @@ describe('TUI UIEnter/UILeave', function()
it('fires exactly once, after VimEnter', function()
clear()
local screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', 'set noswapfile noshowcmd noruler notermguicolors',
- '--cmd', 'let g:evs = []',
- '--cmd', 'autocmd UIEnter * :call add(g:evs, "UIEnter")',
- '--cmd', 'autocmd UILeave * :call add(g:evs, "UILeave")',
- '--cmd', 'autocmd VimEnter * :call add(g:evs, "VimEnter")',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set noswapfile noshowcmd noruler notermguicolors',
+ '--cmd',
+ 'let g:evs = []',
+ '--cmd',
+ 'autocmd UIEnter * :call add(g:evs, "UIEnter")',
+ '--cmd',
+ 'autocmd UILeave * :call add(g:evs, "UILeave")',
+ '--cmd',
+ 'autocmd VimEnter * :call add(g:evs, "VimEnter")',
})
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]]}
- feed_data(":echo g:evs\n")
- screen:expect{grid=[[
+ ]],
+ }
+ feed_data(':echo g:evs\n')
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
['VimEnter', 'UIEnter'] |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
end)
end)
@@ -1933,11 +2120,16 @@ describe('TUI FocusGained/FocusLost', function()
clear()
local child_server = new_pipename()
screen = thelpers.setup_child_nvim({
- '--listen', child_server,
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', 'set noswapfile noshowcmd noruler notermguicolors',
+ '--listen',
+ child_server,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set noswapfile noshowcmd noruler notermguicolors',
})
screen:expect([[
@@ -1948,11 +2140,15 @@ describe('TUI FocusGained/FocusLost', function()
{3:-- TERMINAL --} |
]])
child_session = helpers.connect(child_server)
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
autocmd FocusGained * echo 'gained'
autocmd FocusLost * echo 'lost'
- ]], {})
- feed_data("\034\016") -- CTRL-\ CTRL-N
+ ]],
+ {}
+ )
+ feed_data('\034\016') -- CTRL-\ CTRL-N
end)
it('in normal-mode', function()
@@ -1980,13 +2176,15 @@ describe('TUI FocusGained/FocusLost', function()
it('in insert-mode', function()
feed_data(':set noshowmode\r')
feed_data('i')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
:set noshowmode |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
retry(2, 3 * screen.timeout, function()
feed_data('\027[I')
screen:expect([[
@@ -2020,24 +2218,31 @@ describe('TUI FocusGained/FocusLost', function()
{3:-- TERMINAL --} |
]])
feed_data('\027[O')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
|
{4:~ }|*3
{5:[No Name] }|
:{1: } |
{3:-- TERMINAL --} |
- ]], unchanged=true}
+ ]],
+ unchanged = true,
+ }
end)
it('in cmdline-mode', function()
-- Set up autocmds that modify the buffer, instead of just calling :echo.
-- This is how we can test handling of focus gained/lost during cmdline-mode.
-- See commit: 5cc87d4dabd02167117be7a978b5c8faaa975419.
- child_session:request('nvim_exec2', [[
+ child_session:request(
+ 'nvim_exec2',
+ [[
autocmd!
autocmd FocusLost * call append(line('$'), 'lost')
autocmd FocusGained * call append(line('$'), 'gained')
- ]], {})
+ ]],
+ {}
+ )
retry(2, 3 * screen.timeout, function()
-- Enter cmdline-mode.
feed_data(':')
@@ -2049,34 +2254,39 @@ describe('TUI FocusGained/FocusLost', function()
-- Exit cmdline-mode. Redraws from timers/events are blocked during
-- cmdline-mode, so the buffer won't be updated until we exit cmdline-mode.
feed_data('\n')
- screen:expect{any='lost'..(' '):rep(46)..'|\ngained'}
+ screen:expect { any = 'lost' .. (' '):rep(46) .. '|\ngained' }
end)
end)
it('in terminal-mode', function()
- feed_data(':set shell='..testprg('shell-test')..' shellcmdflag=EXE\n')
+ feed_data(':set shell=' .. testprg('shell-test') .. ' shellcmdflag=EXE\n')
feed_data(':set noshowmode laststatus=0\n')
feed_data(':terminal zia\n')
-- Wait for terminal to be ready.
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1:r}eady $ zia |
|
[Process exited 0] |
|*2
:terminal zia |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('\027[I')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1:r}eady $ zia |
|
[Process exited 0] |
|*2
gained |
{3:-- TERMINAL --} |
- ]], timeout=(4 * screen.timeout)}
+ ]],
+ timeout = (4 * screen.timeout),
+ }
feed_data('\027[O')
screen:expect([[
@@ -2092,8 +2302,9 @@ describe('TUI FocusGained/FocusLost', function()
it('in press-enter prompt', function()
feed_data(":echom 'msg1'|echom 'msg2'|echom 'msg3'|echom 'msg4'|echom 'msg5'\n")
-- Execute :messages to provoke the press-enter prompt.
- feed_data(":messages\n")
- screen:expect{grid=[[
+ feed_data(':messages\n')
+ screen:expect {
+ grid = [[
msg1 |
msg2 |
msg3 |
@@ -2101,10 +2312,12 @@ describe('TUI FocusGained/FocusLost', function()
msg5 |
{10:Press ENTER or type command to continue}{1: } |
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
feed_data('\027[I')
feed_data('\027[I')
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
msg1 |
msg2 |
msg3 |
@@ -2112,7 +2325,9 @@ describe('TUI FocusGained/FocusLost', function()
msg5 |
{10:Press ENTER or type command to continue}{1: } |
{3:-- TERMINAL --} |
- ]], unchanged=true}
+ ]],
+ unchanged = true,
+ }
end)
end)
@@ -2122,12 +2337,16 @@ describe("TUI 't_Co' (terminal colors)", function()
local screen
local function assert_term_colors(term, colorterm, maxcolors)
- clear({env={TERM=term}, args={}})
+ clear({ env = { TERM = term }, args = {} })
screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', nvim_set .. ' notermguicolors',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ nvim_set .. ' notermguicolors',
}, {
env = {
LANG = 'C',
@@ -2138,81 +2357,88 @@ describe("TUI 't_Co' (terminal colors)", function()
local tline
if maxcolors == 8 then
- tline = "{9:~ }"
+ tline = '{9:~ }'
elseif maxcolors == 16 then
- tline = "~ "
+ tline = '~ '
else
- tline = "{4:~ }"
+ tline = '{4:~ }'
end
- screen:expect(string.format([[
+ screen:expect(string.format(
+ [[
{1: } |
%s|*4
|
{3:-- TERMINAL --} |
- ]], tline))
+ ]],
+ tline
+ ))
- feed_data(":echo &t_Co\n")
- screen:expect(string.format([[
+ feed_data(':echo &t_Co\n')
+ screen:expect(string.format(
+ [[
{1: } |
%s|*4
%-3s |
{3:-- TERMINAL --} |
- ]], tline, tostring(maxcolors and maxcolors or "")))
+ ]],
+ tline,
+ tostring(maxcolors and maxcolors or '')
+ ))
end
-- ansi and no terminal type at all:
- it("no TERM uses 8 colors", function()
+ it('no TERM uses 8 colors', function()
assert_term_colors(nil, nil, 8)
end)
- it("TERM=ansi no COLORTERM uses 8 colors", function()
- assert_term_colors("ansi", nil, 8)
+ it('TERM=ansi no COLORTERM uses 8 colors', function()
+ assert_term_colors('ansi', nil, 8)
end)
- it("TERM=ansi with COLORTERM=anything-no-number uses 16 colors", function()
- assert_term_colors("ansi", "yet-another-term", 16)
+ it('TERM=ansi with COLORTERM=anything-no-number uses 16 colors', function()
+ assert_term_colors('ansi', 'yet-another-term', 16)
end)
- it("unknown TERM COLORTERM with 256 in name uses 256 colors", function()
- assert_term_colors("ansi", "yet-another-term-256color", 256)
+ it('unknown TERM COLORTERM with 256 in name uses 256 colors', function()
+ assert_term_colors('ansi', 'yet-another-term-256color', 256)
end)
- it("TERM=ansi-256color sets 256 colours", function()
- assert_term_colors("ansi-256color", nil, 256)
+ it('TERM=ansi-256color sets 256 colours', function()
+ assert_term_colors('ansi-256color', nil, 256)
end)
-- Unknown terminal types:
- it("unknown TERM no COLORTERM sets 8 colours", function()
- assert_term_colors("yet-another-term", nil, 8)
+ it('unknown TERM no COLORTERM sets 8 colours', function()
+ assert_term_colors('yet-another-term', nil, 8)
end)
- it("unknown TERM with COLORTERM=anything-no-number uses 16 colors", function()
- assert_term_colors("yet-another-term", "yet-another-term", 16)
+ it('unknown TERM with COLORTERM=anything-no-number uses 16 colors', function()
+ assert_term_colors('yet-another-term', 'yet-another-term', 16)
end)
- it("unknown TERM with 256 in name sets 256 colours", function()
- assert_term_colors("yet-another-term-256color", nil, 256)
+ it('unknown TERM with 256 in name sets 256 colours', function()
+ assert_term_colors('yet-another-term-256color', nil, 256)
end)
- it("unknown TERM COLORTERM with 256 in name uses 256 colors", function()
- assert_term_colors("yet-another-term", "yet-another-term-256color", 256)
+ it('unknown TERM COLORTERM with 256 in name uses 256 colors', function()
+ assert_term_colors('yet-another-term', 'yet-another-term-256color', 256)
end)
-- Linux kernel terminal emulator:
- it("TERM=linux uses 256 colors", function()
- assert_term_colors("linux", nil, 256)
+ it('TERM=linux uses 256 colors', function()
+ assert_term_colors('linux', nil, 256)
end)
- it("TERM=linux-16color uses 256 colors", function()
- assert_term_colors("linux-16color", nil, 256)
+ it('TERM=linux-16color uses 256 colors', function()
+ assert_term_colors('linux-16color', nil, 256)
end)
- it("TERM=linux-256color uses 256 colors", function()
- assert_term_colors("linux-256color", nil, 256)
+ it('TERM=linux-256color uses 256 colors', function()
+ assert_term_colors('linux-256color', nil, 256)
end)
-- screen:
@@ -2221,28 +2447,28 @@ describe("TUI 't_Co' (terminal colors)", function()
-- Linux and MacOS have a screen entry in external terminfo with 8 colours,
-- which is raised to 16 by COLORTERM.
- it("TERM=screen no COLORTERM uses 8/256 colors", function()
+ it('TERM=screen no COLORTERM uses 8/256 colors', function()
if is_os('freebsd') then
- assert_term_colors("screen", nil, 256)
+ assert_term_colors('screen', nil, 256)
else
- assert_term_colors("screen", nil, 8)
+ assert_term_colors('screen', nil, 8)
end
end)
- it("TERM=screen COLORTERM=screen uses 16/256 colors", function()
+ it('TERM=screen COLORTERM=screen uses 16/256 colors', function()
if is_os('freebsd') then
- assert_term_colors("screen", "screen", 256)
+ assert_term_colors('screen', 'screen', 256)
else
- assert_term_colors("screen", "screen", 16)
+ assert_term_colors('screen', 'screen', 16)
end
end)
- it("TERM=screen COLORTERM=screen-256color uses 256 colors", function()
- assert_term_colors("screen", "screen-256color", 256)
+ it('TERM=screen COLORTERM=screen-256color uses 256 colors', function()
+ assert_term_colors('screen', 'screen-256color', 256)
end)
- it("TERM=screen-256color no COLORTERM uses 256 colors", function()
- assert_term_colors("screen-256color", nil, 256)
+ it('TERM=screen-256color no COLORTERM uses 256 colors', function()
+ assert_term_colors('screen-256color', nil, 256)
end)
-- tmux:
@@ -2251,38 +2477,38 @@ describe("TUI 't_Co' (terminal colors)", function()
-- Linux has a tmux entry in external terminfo with 8 colours,
-- which is raised to 256.
- it("TERM=tmux no COLORTERM uses 256 colors", function()
- assert_term_colors("tmux", nil, 256)
+ it('TERM=tmux no COLORTERM uses 256 colors', function()
+ assert_term_colors('tmux', nil, 256)
end)
- it("TERM=tmux COLORTERM=tmux uses 256 colors", function()
- assert_term_colors("tmux", "tmux", 256)
+ it('TERM=tmux COLORTERM=tmux uses 256 colors', function()
+ assert_term_colors('tmux', 'tmux', 256)
end)
- it("TERM=tmux COLORTERM=tmux-256color uses 256 colors", function()
- assert_term_colors("tmux", "tmux-256color", 256)
+ it('TERM=tmux COLORTERM=tmux-256color uses 256 colors', function()
+ assert_term_colors('tmux', 'tmux-256color', 256)
end)
- it("TERM=tmux-256color no COLORTERM uses 256 colors", function()
- assert_term_colors("tmux-256color", nil, 256)
+ it('TERM=tmux-256color no COLORTERM uses 256 colors', function()
+ assert_term_colors('tmux-256color', nil, 256)
end)
-- xterm and imitators:
- it("TERM=xterm uses 256 colors", function()
- assert_term_colors("xterm", nil, 256)
+ it('TERM=xterm uses 256 colors', function()
+ assert_term_colors('xterm', nil, 256)
end)
- it("TERM=xterm COLORTERM=gnome-terminal uses 256 colors", function()
- assert_term_colors("xterm", "gnome-terminal", 256)
+ it('TERM=xterm COLORTERM=gnome-terminal uses 256 colors', function()
+ assert_term_colors('xterm', 'gnome-terminal', 256)
end)
- it("TERM=xterm COLORTERM=mate-terminal uses 256 colors", function()
- assert_term_colors("xterm", "mate-terminal", 256)
+ it('TERM=xterm COLORTERM=mate-terminal uses 256 colors', function()
+ assert_term_colors('xterm', 'mate-terminal', 256)
end)
- it("TERM=xterm-256color uses 256 colors", function()
- assert_term_colors("xterm-256color", nil, 256)
+ it('TERM=xterm-256color uses 256 colors', function()
+ assert_term_colors('xterm-256color', nil, 256)
end)
-- rxvt and stterm:
@@ -2292,44 +2518,44 @@ describe("TUI 't_Co' (terminal colors)", function()
-- Linux has an rxvt, an st, and an st-16color entry in external terminfo
-- with 8, 8, and 16 colours respectively, which are raised to 256.
- it("TERM=rxvt no COLORTERM uses 256 colors", function()
- assert_term_colors("rxvt", nil, 256)
+ it('TERM=rxvt no COLORTERM uses 256 colors', function()
+ assert_term_colors('rxvt', nil, 256)
end)
- it("TERM=rxvt COLORTERM=rxvt uses 256 colors", function()
- assert_term_colors("rxvt", "rxvt", 256)
+ it('TERM=rxvt COLORTERM=rxvt uses 256 colors', function()
+ assert_term_colors('rxvt', 'rxvt', 256)
end)
- it("TERM=rxvt-256color uses 256 colors", function()
- assert_term_colors("rxvt-256color", nil, 256)
+ it('TERM=rxvt-256color uses 256 colors', function()
+ assert_term_colors('rxvt-256color', nil, 256)
end)
- it("TERM=st no COLORTERM uses 256 colors", function()
- assert_term_colors("st", nil, 256)
+ it('TERM=st no COLORTERM uses 256 colors', function()
+ assert_term_colors('st', nil, 256)
end)
- it("TERM=st COLORTERM=st uses 256 colors", function()
- assert_term_colors("st", "st", 256)
+ it('TERM=st COLORTERM=st uses 256 colors', function()
+ assert_term_colors('st', 'st', 256)
end)
- it("TERM=st COLORTERM=st-256color uses 256 colors", function()
- assert_term_colors("st", "st-256color", 256)
+ it('TERM=st COLORTERM=st-256color uses 256 colors', function()
+ assert_term_colors('st', 'st-256color', 256)
end)
- it("TERM=st-16color no COLORTERM uses 8/256 colors", function()
- assert_term_colors("st", nil, 256)
+ it('TERM=st-16color no COLORTERM uses 8/256 colors', function()
+ assert_term_colors('st', nil, 256)
end)
- it("TERM=st-16color COLORTERM=st uses 16/256 colors", function()
- assert_term_colors("st", "st", 256)
+ it('TERM=st-16color COLORTERM=st uses 16/256 colors', function()
+ assert_term_colors('st', 'st', 256)
end)
- it("TERM=st-16color COLORTERM=st-256color uses 256 colors", function()
- assert_term_colors("st", "st-256color", 256)
+ it('TERM=st-16color COLORTERM=st-256color uses 256 colors', function()
+ assert_term_colors('st', 'st-256color', 256)
end)
- it("TERM=st-256color uses 256 colors", function()
- assert_term_colors("st-256color", nil, 256)
+ it('TERM=st-256color uses 256 colors', function()
+ assert_term_colors('st-256color', nil, 256)
end)
-- gnome and vte:
@@ -2339,54 +2565,53 @@ describe("TUI 't_Co' (terminal colors)", function()
-- external terminfo with 8, 8, 256, and 256 colours respectively, which are
-- raised to 256.
- it("TERM=gnome no COLORTERM uses 256 colors", function()
- assert_term_colors("gnome", nil, 256)
+ it('TERM=gnome no COLORTERM uses 256 colors', function()
+ assert_term_colors('gnome', nil, 256)
end)
- it("TERM=gnome COLORTERM=gnome uses 256 colors", function()
- assert_term_colors("gnome", "gnome", 256)
+ it('TERM=gnome COLORTERM=gnome uses 256 colors', function()
+ assert_term_colors('gnome', 'gnome', 256)
end)
- it("TERM=gnome COLORTERM=gnome-256color uses 256 colors", function()
- assert_term_colors("gnome", "gnome-256color", 256)
+ it('TERM=gnome COLORTERM=gnome-256color uses 256 colors', function()
+ assert_term_colors('gnome', 'gnome-256color', 256)
end)
- it("TERM=gnome-256color uses 256 colors", function()
- assert_term_colors("gnome-256color", nil, 256)
+ it('TERM=gnome-256color uses 256 colors', function()
+ assert_term_colors('gnome-256color', nil, 256)
end)
- it("TERM=vte no COLORTERM uses 256 colors", function()
- assert_term_colors("vte", nil, 256)
+ it('TERM=vte no COLORTERM uses 256 colors', function()
+ assert_term_colors('vte', nil, 256)
end)
- it("TERM=vte COLORTERM=vte uses 256 colors", function()
- assert_term_colors("vte", "vte", 256)
+ it('TERM=vte COLORTERM=vte uses 256 colors', function()
+ assert_term_colors('vte', 'vte', 256)
end)
- it("TERM=vte COLORTERM=vte-256color uses 256 colors", function()
- assert_term_colors("vte", "vte-256color", 256)
+ it('TERM=vte COLORTERM=vte-256color uses 256 colors', function()
+ assert_term_colors('vte', 'vte-256color', 256)
end)
- it("TERM=vte-256color uses 256 colors", function()
- assert_term_colors("vte-256color", nil, 256)
+ it('TERM=vte-256color uses 256 colors', function()
+ assert_term_colors('vte-256color', nil, 256)
end)
-- others:
-- TODO(blueyed): this is made pending, since it causes failure + later hang
-- when using non-compatible libvterm (#9494/#10179).
- pending("TERM=interix uses 8 colors", function()
- assert_term_colors("interix", nil, 8)
+ pending('TERM=interix uses 8 colors', function()
+ assert_term_colors('interix', nil, 8)
end)
- it("TERM=iTerm.app uses 256 colors", function()
- assert_term_colors("iTerm.app", nil, 256)
+ it('TERM=iTerm.app uses 256 colors', function()
+ assert_term_colors('iTerm.app', nil, 256)
end)
- it("TERM=iterm uses 256 colors", function()
- assert_term_colors("iterm", nil, 256)
+ it('TERM=iterm uses 256 colors', function()
+ assert_term_colors('iterm', nil, 256)
end)
-
end)
-- These tests require `thelpers` because --headless/--embed
@@ -2397,9 +2622,12 @@ describe("TUI 'term' option", function()
local function assert_term(term_envvar, term_expected)
clear()
screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', nvim_set .. ' notermguicolors',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ nvim_set .. ' notermguicolors',
}, {
env = {
LANG = 'C',
@@ -2408,29 +2636,29 @@ describe("TUI 'term' option", function()
})
local full_timeout = screen.timeout
- screen.timeout = 250 -- We want screen:expect() to fail quickly.
- retry(nil, 2 * full_timeout, function() -- Wait for TUI thread to set 'term'.
+ screen.timeout = 250 -- We want screen:expect() to fail quickly.
+ retry(nil, 2 * full_timeout, function() -- Wait for TUI thread to set 'term'.
feed_data(":echo 'term='.(&term)\n")
- screen:expect{any='term='..term_expected}
+ screen:expect { any = 'term=' .. term_expected }
end)
end
it('gets builtin term if $TERM is invalid', function()
- assert_term("foo", "builtin_ansi")
+ assert_term('foo', 'builtin_ansi')
end)
it('gets system-provided term if $TERM is valid', function()
if is_os('openbsd') then
- assert_term("xterm", "xterm")
- elseif is_os('bsd') then -- BSD lacks terminfo, builtin is always used.
- assert_term("xterm", "builtin_xterm")
+ assert_term('xterm', 'xterm')
+ elseif is_os('bsd') then -- BSD lacks terminfo, builtin is always used.
+ assert_term('xterm', 'builtin_xterm')
elseif is_os('mac') then
- local status, _ = pcall(assert_term, "xterm", "xterm")
+ local status, _ = pcall(assert_term, 'xterm', 'xterm')
if not status then
- pending("macOS: unibilium could not find terminfo")
+ pending('macOS: unibilium could not find terminfo')
end
else
- assert_term("xterm", "xterm")
+ assert_term('xterm', 'xterm')
end
end)
@@ -2440,12 +2668,11 @@ describe("TUI 'term' option", function()
assert_term('conemu', 'builtin_conemu')
assert_term('vtpcon', 'builtin_vtpcon')
end)
-
end)
-- These tests require `thelpers` because --headless/--embed
-- does not initialize the TUI.
-describe("TUI", function()
+describe('TUI', function()
local screen
local logfile = 'Xtest_tui_verbose_log'
after_each(function()
@@ -2456,10 +2683,14 @@ describe("TUI", function()
local function nvim_tui(extra_args)
clear()
screen = thelpers.setup_child_nvim({
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', nvim_set .. ' notermguicolors',
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ nvim_set .. ' notermguicolors',
extra_args,
}, {
env = {
@@ -2469,7 +2700,7 @@ describe("TUI", function()
end
it('-V3log logs terminfo values', function()
- nvim_tui('-V3'..logfile)
+ nvim_tui('-V3' .. logfile)
-- Wait for TUI to start.
feed_data('Gitext')
@@ -2480,7 +2711,7 @@ describe("TUI", function()
{3:-- TERMINAL --} |
]])
- retry(nil, 3000, function() -- Wait for log file to be flushed.
+ retry(nil, 3000, function() -- Wait for log file to be flushed.
local log = read_file('Xtest_tui_verbose_log') or ''
eq('--- Terminal info --- {{{\n', string.match(log, '%-%-%- Terminal.-\n')) -- }}}
ok(#log > 50)
@@ -2499,12 +2730,15 @@ describe("TUI", function()
feed_data(string.format('\027]52;c;%s\027\\', string.rep('A', 8192)))
- screen:expect{grid=[[
+ screen:expect {
+ grid = [[
{1: } |
{4:~ }|*4
|
{3:-- TERMINAL --} |
- ]], unchanged=true}
+ ]],
+ unchanged = true,
+ }
end)
end)
@@ -2538,10 +2772,10 @@ describe('TUI bg color', function()
{3:-- TERMINAL --} |
]])
feed_data('\027]11;rgb:ffff/ffff/ffff\027\\')
- screen:expect{any='did OptionSet, yay!'}
+ screen:expect { any = 'did OptionSet, yay!' }
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=light'}
+ screen:expect { any = 'new_bg=light' }
setup_bg_test()
screen:expect([[
@@ -2552,10 +2786,10 @@ describe('TUI bg color', function()
{3:-- TERMINAL --} |
]])
feed_data('\027]11;rgba:ffff/ffff/ffff/8000\027\\')
- screen:expect{any='did OptionSet, yay!'}
+ screen:expect { any = 'did OptionSet, yay!' }
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=light'}
+ screen:expect { any = 'new_bg=light' }
end)
it('triggers OptionSet event with split terminal-response', function()
@@ -2569,10 +2803,10 @@ describe('TUI bg color', function()
-- Send a background response with the OSC command part split.
feed_data('\027]11;rgb')
feed_data(':ffff/ffff/ffff\027\\')
- screen:expect{any='did OptionSet, yay!'}
+ screen:expect { any = 'did OptionSet, yay!' }
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=light'}
+ screen:expect { any = 'new_bg=light' }
setup_bg_test()
screen:expect([[
@@ -2585,10 +2819,10 @@ describe('TUI bg color', function()
-- Send a background response with the Pt portion split.
feed_data('\027]11;rgba:ffff/fff')
feed_data('f/ffff/8000\027\\')
- screen:expect{any='did OptionSet, yay!'}
+ screen:expect { any = 'did OptionSet, yay!' }
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=light'}
+ screen:expect { any = 'new_bg=light' }
end)
it('not triggers OptionSet event with invalid terminal-response', function()
@@ -2603,7 +2837,7 @@ describe('TUI bg color', function()
screen:expect_unchanged()
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=dark'}
+ screen:expect { any = 'new_bg=dark' }
setup_bg_test()
screen:expect([[
@@ -2617,76 +2851,89 @@ describe('TUI bg color', function()
screen:expect_unchanged()
feed_data(':echo "new_bg=".&background\n')
- screen:expect{any='new_bg=dark'}
+ screen:expect { any = 'new_bg=dark' }
end)
end)
-- These tests require `thelpers` because --headless/--embed
-- does not initialize the TUI.
-describe("TUI as a client", function()
-
- it("connects to remote instance (with its own TUI)", function()
+describe('TUI as a client', function()
+ it('connects to remote instance (with its own TUI)', function()
local server_super = spawn_argv(false) -- equivalent to clear()
local client_super = spawn_argv(true)
set_session(server_super)
local server_pipe = new_pipename()
local screen_server = thelpers.setup_child_nvim({
- '--listen', server_pipe,
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', nvim_set .. ' notermguicolors laststatus=2 background=dark',
+ '--listen',
+ server_pipe,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ nvim_set .. ' notermguicolors laststatus=2 background=dark',
})
- feed_data("iHello, World")
- screen_server:expect{grid=[[
+ feed_data('iHello, World')
+ screen_server:expect {
+ grid = [[
Hello, World{1: } |
{4:~ }|*3
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
- feed_data("\027")
- screen_server:expect{grid=[[
+ ]],
+ }
+ feed_data('\027')
+ screen_server:expect {
+ grid = [[
Hello, Worl{1:d} |
{4:~ }|*3
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
set_session(client_super)
local screen_client = thelpers.setup_child_nvim({
- '--server', server_pipe,
+ '--server',
+ server_pipe,
'--remote-ui',
})
- screen_client:expect{grid=[[
+ screen_client:expect {
+ grid = [[
Hello, Worl{1:d} |
{4:~ }|*3
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- grid smaller than containing terminal window is cleared properly
feed_data(":call setline(1,['a'->repeat(&columns)]->repeat(&lines))\n")
- feed_data("0:set lines=3\n")
- screen_server:expect{grid=[[
+ feed_data('0:set lines=3\n')
+ screen_server:expect {
+ grid = [[
{1:a}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
{5:[No Name] [+] }|
|*4
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- feed_data(":q!\n")
+ feed_data(':q!\n')
server_super:close()
client_super:close()
end)
- it("connects to remote instance (--headless)", function()
+ it('connects to remote instance (--headless)', function()
local server = spawn_argv(false) -- equivalent to clear()
local client_super = spawn_argv(true)
@@ -2697,41 +2944,47 @@ describe("TUI as a client", function()
set_session(client_super)
local screen_client = thelpers.setup_child_nvim({
- '--server', server_pipe,
+ '--server',
+ server_pipe,
'--remote-ui',
})
- screen_client:expect{grid=[[
+ screen_client:expect {
+ grid = [[
Halloj{1:!} |
{4:~ }|*4
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- No heap-use-after-free when receiving UI events after deadly signal #22184
server:request('nvim_input', ('a'):rep(1000))
exec_lua([[vim.uv.kill(vim.fn.jobpid(vim.bo.channel), 'sigterm')]])
- screen_client:expect{grid=[[
+ screen_client:expect {
+ grid = [[
Vim: Caught deadly signal 'SIGTERM' |
|*2
[Process exited 1]{1: } |
|*2
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
eq(0, meths.get_vvar('shell_error'))
-- exits on input eof #22244
- funcs.system({nvim_prog, '--server', server_pipe, '--remote-ui'})
+ funcs.system({ nvim_prog, '--server', server_pipe, '--remote-ui' })
eq(1, meths.get_vvar('shell_error'))
client_super:close()
server:close()
end)
- it("throws error when no server exists", function()
+ it('throws error when no server exists', function()
clear()
local screen = thelpers.setup_child_nvim({
- '--server', '127.0.0.1:2436546',
+ '--server',
+ '127.0.0.1:2436546',
'--remote-ui',
}, { cols = 60 })
@@ -2751,79 +3004,97 @@ describe("TUI as a client", function()
set_session(server_super)
local server_pipe = new_pipename()
local screen_server = thelpers.setup_child_nvim({
- '--listen', server_pipe,
- '-u', 'NONE',
- '-i', 'NONE',
- '--cmd', 'colorscheme vim',
- '--cmd', nvim_set .. ' notermguicolors laststatus=2 background=dark',
+ '--listen',
+ server_pipe,
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ nvim_set .. ' notermguicolors laststatus=2 background=dark',
})
- screen_server:expect{grid=[[
+ screen_server:expect {
+ grid = [[
{1: } |
{4:~ }|*3
{5:[No Name] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
- feed_data("iHello, World")
- screen_server:expect{grid=[[
+ feed_data('iHello, World')
+ screen_server:expect {
+ grid = [[
Hello, World{1: } |
{4:~ }|*3
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
- ]]}
- feed_data("\027")
- screen_server:expect{grid=[[
+ ]],
+ }
+ feed_data('\027')
+ screen_server:expect {
+ grid = [[
Hello, Worl{1:d} |
{4:~ }|*3
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
set_session(client_super)
local screen_client = thelpers.setup_child_nvim({
- '--server', server_pipe,
+ '--server',
+ server_pipe,
'--remote-ui',
})
- screen_client:expect{grid=[[
+ screen_client:expect {
+ grid = [[
Hello, Worl{1:d} |
{4:~ }|*3
{5:[No Name] [+] }|
|
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- quitting the server
set_session(server_super)
- feed_data(status and ':' .. status .. 'cquit!\n' or ":quit!\n")
+ feed_data(status and ':' .. status .. 'cquit!\n' or ':quit!\n')
status = status and status or 0
- screen_server:expect{grid=[[
+ screen_server:expect {
+ grid = [[
|
[Process exited ]] .. status .. [[]{1: }{MATCH:%s+}|
|*4
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
-- assert that client has exited
- screen_client:expect{grid=[[
+ screen_client:expect {
+ grid = [[
|
[Process exited ]] .. status .. [[]{1: }{MATCH:%s+}|
|*4
{3:-- TERMINAL --} |
- ]]}
+ ]],
+ }
server_super:close()
client_super:close()
end
- describe("exits when server quits", function()
- it("with :quit", function()
+ describe('exits when server quits', function()
+ it('with :quit', function()
test_remote_tui_quit()
end)
- it("with :cquit", function()
+ it('with :cquit', function()
test_remote_tui_quit(42)
end)
end)
diff --git a/test/functional/terminal/window_spec.lua b/test/functional/terminal/window_spec.lua
index 1686160680..3781933cad 100644
--- a/test/functional/terminal/window_spec.lua
+++ b/test/functional/terminal/window_spec.lua
@@ -22,13 +22,15 @@ describe(':terminal window', function()
skip(is_os('win'))
-- Test has hardcoded assumptions of dimensions.
eq(7, eval('&lines'))
- feed_data('\n\n\n') -- Add blank lines.
+ feed_data('\n\n\n') -- Add blank lines.
-- Terminal/shell contents must exceed the height of this window.
command('topleft 1split')
eq('terminal', eval('&buftype'))
feed([[i<cr>]])
-- Check topline _while_ in terminal-mode.
- retry(nil, nil, function() eq(6, eval('winsaveview()["topline"]')) end)
+ retry(nil, nil, function()
+ eq(6, eval('winsaveview()["topline"]'))
+ end)
end)
describe("with 'number'", function()
@@ -139,7 +141,7 @@ describe(':terminal window', function()
describe('with fold set', function()
before_each(function()
feed([[<C-\><C-N>:set foldenable foldmethod=manual<CR>i]])
- feed_data({'line1', 'line2', 'line3', 'line4', ''})
+ feed_data({ 'line1', 'line2', 'line3', 'line4', '' })
screen:expect([[
tty ready |
line1 |
@@ -172,7 +174,7 @@ describe(':terminal with multigrid', function()
before_each(function()
clear()
- screen = thelpers.screen_setup(0, nil, 50, nil, {ext_multigrid=true})
+ screen = thelpers.screen_setup(0, nil, 50, nil, { ext_multigrid = true })
end)
it('resizes to requested size', function()
@@ -190,7 +192,7 @@ describe(':terminal with multigrid', function()
screen:try_resize_grid(2, 20, 10)
if is_os('win') then
- screen:expect{any="rows: 10, cols: 20"}
+ screen:expect { any = 'rows: 10, cols: 20' }
else
screen:expect([[
## grid 1
@@ -208,7 +210,7 @@ describe(':terminal with multigrid', function()
screen:try_resize_grid(2, 70, 3)
if is_os('win') then
- screen:expect{any="rows: 3, cols: 70"}
+ screen:expect { any = 'rows: 3, cols: 70' }
else
screen:expect([[
## grid 1
@@ -225,7 +227,7 @@ describe(':terminal with multigrid', function()
screen:try_resize_grid(2, 0, 0)
if is_os('win') then
- screen:expect{any="rows: 6, cols: 50"}
+ screen:expect { any = 'rows: 6, cols: 50' }
else
screen:expect([[
## grid 1
diff --git a/test/functional/terminal/window_split_tab_spec.lua b/test/functional/terminal/window_split_tab_spec.lua
index f160dc6864..1fb759b571 100644
--- a/test/functional/terminal/window_split_tab_spec.lua
+++ b/test/functional/terminal/window_split_tab_spec.lua
@@ -35,7 +35,7 @@ describe(':terminal', function()
command('terminal')
command('vsplit foo')
eq(3, eval("winnr('$')"))
- feed('ZQ') -- Close split, should not crash. #7538
+ feed('ZQ') -- Close split, should not crash. #7538
assert_alive()
end)
@@ -91,9 +91,9 @@ describe(':terminal', function()
-- 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:expect { any = 'rows: 7, cols: 47' }
screen:try_resize(w2, h2)
- screen:expect{any='rows: 4, cols: 41'}
+ screen:expect { any = 'rows: 4, cols: 41' }
end)
return
end
@@ -122,8 +122,7 @@ describe(':terminal', function()
command('split')
command('terminal')
feed('a<Cmd>wincmd j<CR>')
- eq(2, eval("winnr()"))
+ eq(2, eval('winnr()'))
eq('t', eval('mode(1)'))
end)
-
end)