mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +00:00
refactor(tests): merge n.spawn/n.spawn_argv into n.new_session #31859
Problem: - `n.spawn()` is misleading because it also connects RPC, it's not just "spawning" a process. - It's confusing that `n.spawn()` and `n.spawn_argv()` are separate. Solution: - Replace `n.spawn()`/`n.spawn_argv()` with a single function `n.new_session()`. This name aligns with the existing functions `n.set_session`/`n.get_session`. - Note: removes direct handling of `prepend_argv`, but I doubt that was important or intentional. If callers want to control use of `prepend_argv` then we should add a new flag to `test.session.Opts`. - Move `keep` to first parameter of `n.new_session()`. - Add a `merge` flag to `test.session.Opts` - Mark `_new_argv()` as private. Test should use clear/new_session/spawn_wait instead.
This commit is contained in:
@@ -9,7 +9,6 @@ local nvim_prog, command, fn = n.nvim_prog, n.command, n.fn
|
|||||||
local source, next_msg = n.source, n.next_msg
|
local source, next_msg = n.source, n.next_msg
|
||||||
local ok = t.ok
|
local ok = t.ok
|
||||||
local api = n.api
|
local api = n.api
|
||||||
local spawn, merge_args = n.spawn, n.merge_args
|
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
local pcall_err = t.pcall_err
|
local pcall_err = t.pcall_err
|
||||||
local assert_alive = n.assert_alive
|
local assert_alive = n.assert_alive
|
||||||
@@ -281,10 +280,9 @@ describe('server -> client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
describe('connecting to another (peer) nvim', function()
|
describe('connecting to another (peer) nvim', function()
|
||||||
local nvim_argv = merge_args(n.nvim_argv, { '--headless' })
|
|
||||||
local function connect_test(server, mode, address)
|
local function connect_test(server, mode, address)
|
||||||
local serverpid = fn.getpid()
|
local serverpid = fn.getpid()
|
||||||
local client = spawn(nvim_argv, false, nil, true)
|
local client = n.new_session(true)
|
||||||
set_session(client)
|
set_session(client)
|
||||||
|
|
||||||
local clientpid = fn.getpid()
|
local clientpid = fn.getpid()
|
||||||
@@ -312,7 +310,7 @@ describe('server -> client', function()
|
|||||||
end
|
end
|
||||||
|
|
||||||
it('via named pipe', function()
|
it('via named pipe', function()
|
||||||
local server = spawn(nvim_argv)
|
local server = n.new_session(false)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local address = fn.serverlist()[1]
|
local address = fn.serverlist()[1]
|
||||||
local first = string.sub(address, 1, 1)
|
local first = string.sub(address, 1, 1)
|
||||||
@@ -321,7 +319,7 @@ describe('server -> client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('via ipv4 address', function()
|
it('via ipv4 address', function()
|
||||||
local server = spawn(nvim_argv)
|
local server = n.new_session(false)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local status, address = pcall(fn.serverstart, '127.0.0.1:')
|
local status, address = pcall(fn.serverstart, '127.0.0.1:')
|
||||||
if not status then
|
if not status then
|
||||||
@@ -332,7 +330,7 @@ describe('server -> client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('via ipv6 address', function()
|
it('via ipv6 address', function()
|
||||||
local server = spawn(nvim_argv)
|
local server = n.new_session(false)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local status, address = pcall(fn.serverstart, '::1:')
|
local status, address = pcall(fn.serverstart, '::1:')
|
||||||
if not status then
|
if not status then
|
||||||
@@ -343,7 +341,7 @@ describe('server -> client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('via hostname', function()
|
it('via hostname', function()
|
||||||
local server = spawn(nvim_argv)
|
local server = n.new_session(false)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local address = fn.serverstart('localhost:')
|
local address = fn.serverstart('localhost:')
|
||||||
eq('localhost:', string.sub(address, 1, 10))
|
eq('localhost:', string.sub(address, 1, 10))
|
||||||
@@ -351,10 +349,10 @@ describe('server -> client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('does not crash on receiving UI events', function()
|
it('does not crash on receiving UI events', function()
|
||||||
local server = spawn(nvim_argv)
|
local server = n.new_session(false)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local address = fn.serverlist()[1]
|
local address = fn.serverlist()[1]
|
||||||
local client = spawn(nvim_argv, false, nil, true)
|
local client = n.new_session(true)
|
||||||
set_session(client)
|
set_session(client)
|
||||||
|
|
||||||
local id = fn.sockconnect('pipe', address, { rpc = true })
|
local id = fn.sockconnect('pipe', address, { rpc = true })
|
||||||
|
@@ -5,7 +5,6 @@ local clear, eq, eval, next_msg, ok, source = n.clear, t.eq, n.eval, n.next_msg,
|
|||||||
local command, fn, api = n.command, n.fn, n.api
|
local command, fn, api = n.command, n.fn, n.api
|
||||||
local matches = t.matches
|
local matches = t.matches
|
||||||
local sleep = vim.uv.sleep
|
local sleep = vim.uv.sleep
|
||||||
local spawn, nvim_argv = n.spawn, n.nvim_argv
|
|
||||||
local get_session, set_session = n.get_session, n.set_session
|
local get_session, set_session = n.get_session, n.set_session
|
||||||
local nvim_prog = n.nvim_prog
|
local nvim_prog = n.nvim_prog
|
||||||
local is_os = t.is_os
|
local is_os = t.is_os
|
||||||
@@ -33,10 +32,10 @@ describe('channels', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
pending('can connect to socket', function()
|
pending('can connect to socket', function()
|
||||||
local server = spawn(nvim_argv, nil, nil, true)
|
local server = n.new_session(true)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local address = fn.serverlist()[1]
|
local address = fn.serverlist()[1]
|
||||||
local client = spawn(nvim_argv, nil, nil, true)
|
local client = n.new_session(true)
|
||||||
set_session(client)
|
set_session(client)
|
||||||
source(init)
|
source(init)
|
||||||
|
|
||||||
@@ -63,7 +62,7 @@ describe('channels', function()
|
|||||||
|
|
||||||
it('dont crash due to garbage in rpc #23781', function()
|
it('dont crash due to garbage in rpc #23781', function()
|
||||||
local client = get_session()
|
local client = get_session()
|
||||||
local server = spawn(nvim_argv, nil, nil, true)
|
local server = n.new_session(true)
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local address = fn.serverlist()[1]
|
local address = fn.serverlist()[1]
|
||||||
set_session(client)
|
set_session(client)
|
||||||
|
@@ -31,7 +31,6 @@ local feed_command = n.feed_command
|
|||||||
local skip = t.skip
|
local skip = t.skip
|
||||||
local is_os = t.is_os
|
local is_os = t.is_os
|
||||||
local is_ci = t.is_ci
|
local is_ci = t.is_ci
|
||||||
local spawn = n.spawn
|
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
|
|
||||||
describe('fileio', function()
|
describe('fileio', function()
|
||||||
@@ -51,12 +50,11 @@ describe('fileio', function()
|
|||||||
rmdir('Xtest_backupdir with spaces')
|
rmdir('Xtest_backupdir with spaces')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local args = { nvim_prog, '--clean', '--cmd', 'set nofsync directory=Xtest_startup_swapdir' }
|
local args = { '--clean', '--cmd', 'set nofsync directory=Xtest_startup_swapdir' }
|
||||||
--- Starts a new nvim session and returns an attached screen.
|
--- Starts a new nvim session and returns an attached screen.
|
||||||
local function startup(extra_args)
|
local function startup()
|
||||||
extra_args = extra_args or {}
|
local argv = vim.iter({ args, '--embed' }):flatten():totable()
|
||||||
local argv = vim.iter({ args, '--embed', extra_args }):flatten():totable()
|
local screen_nvim = n.new_session(false, { args = argv, merge = false })
|
||||||
local screen_nvim = spawn(argv)
|
|
||||||
set_session(screen_nvim)
|
set_session(screen_nvim)
|
||||||
local screen = Screen.new(70, 10)
|
local screen = Screen.new(70, 10)
|
||||||
screen:set_default_attr_ids({
|
screen:set_default_attr_ids({
|
||||||
@@ -100,7 +98,8 @@ describe('fileio', function()
|
|||||||
eq('foozubbaz', trim(read_file('Xtest_startup_file1')))
|
eq('foozubbaz', trim(read_file('Xtest_startup_file1')))
|
||||||
|
|
||||||
-- 4. Exit caused by deadly signal (+ 'swapfile').
|
-- 4. Exit caused by deadly signal (+ 'swapfile').
|
||||||
local j = fn.jobstart(vim.iter({ args, '--embed' }):flatten():totable(), { rpc = true })
|
local j =
|
||||||
|
fn.jobstart(vim.iter({ nvim_prog, args, '--embed' }):flatten():totable(), { rpc = true })
|
||||||
fn.rpcrequest(
|
fn.rpcrequest(
|
||||||
j,
|
j,
|
||||||
'nvim_exec2',
|
'nvim_exec2',
|
||||||
|
@@ -10,10 +10,8 @@ local expect = n.expect
|
|||||||
local fn = n.fn
|
local fn = n.fn
|
||||||
local insert = n.insert
|
local insert = n.insert
|
||||||
local nvim_prog = n.nvim_prog
|
local nvim_prog = n.nvim_prog
|
||||||
local new_argv = n.new_argv
|
|
||||||
local neq = t.neq
|
local neq = t.neq
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
local spawn = n.spawn
|
|
||||||
local tmpname = t.tmpname
|
local tmpname = t.tmpname
|
||||||
local write_file = t.write_file
|
local write_file = t.write_file
|
||||||
|
|
||||||
@@ -32,8 +30,7 @@ describe('Remote', function()
|
|||||||
describe('connect to server and', function()
|
describe('connect to server and', function()
|
||||||
local server
|
local server
|
||||||
before_each(function()
|
before_each(function()
|
||||||
server = spawn(new_argv(), true)
|
server = n.clear()
|
||||||
set_session(server)
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
after_each(function()
|
after_each(function()
|
||||||
@@ -49,7 +46,7 @@ describe('Remote', function()
|
|||||||
-- to wait for the remote instance to exit and calling jobwait blocks
|
-- to wait for the remote instance to exit and calling jobwait blocks
|
||||||
-- the event loop. If the server event loop is blocked, it can't process
|
-- the event loop. If the server event loop is blocked, it can't process
|
||||||
-- our incoming --remote calls.
|
-- our incoming --remote calls.
|
||||||
local client_starter = spawn(new_argv(), false, nil, true)
|
local client_starter = n.new_session(true)
|
||||||
set_session(client_starter)
|
set_session(client_starter)
|
||||||
-- Call jobstart() and jobwait() in the same RPC request to reduce flakiness.
|
-- Call jobstart() and jobwait() in the same RPC request to reduce flakiness.
|
||||||
eq(
|
eq(
|
||||||
@@ -144,15 +141,8 @@ describe('Remote', function()
|
|||||||
|
|
||||||
describe('exits with error on', function()
|
describe('exits with error on', function()
|
||||||
local function run_and_check_exit_code(...)
|
local function run_and_check_exit_code(...)
|
||||||
local bogus_argv = new_argv(...)
|
local p = n.spawn_wait { args = { ... } }
|
||||||
|
eq(2, p.status)
|
||||||
-- Create an nvim instance just to run the remote-invoking nvim. We want
|
|
||||||
-- to wait for the remote instance to exit and calling jobwait blocks
|
|
||||||
-- the event loop. If the server event loop is blocked, it can't process
|
|
||||||
-- our incoming --remote calls.
|
|
||||||
clear()
|
|
||||||
-- Call jobstart() and jobwait() in the same RPC request to reduce flakiness.
|
|
||||||
eq({ 2 }, exec_lua([[return vim.fn.jobwait({ vim.fn.jobstart(...) })]], bogus_argv))
|
|
||||||
end
|
end
|
||||||
it('bogus subcommand', function()
|
it('bogus subcommand', function()
|
||||||
run_and_check_exit_code('--remote-bogus')
|
run_and_check_exit_code('--remote-bogus')
|
||||||
|
@@ -12,12 +12,10 @@ local fn = n.fn
|
|||||||
local nvim_prog = n.nvim_prog
|
local nvim_prog = n.nvim_prog
|
||||||
local ok = t.ok
|
local ok = t.ok
|
||||||
local rmdir = n.rmdir
|
local rmdir = n.rmdir
|
||||||
local new_argv = n.new_argv
|
|
||||||
local new_pipename = n.new_pipename
|
local new_pipename = n.new_pipename
|
||||||
local pesc = vim.pesc
|
local pesc = vim.pesc
|
||||||
local os_kill = n.os_kill
|
local os_kill = n.os_kill
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
local spawn = n.spawn
|
|
||||||
local async_meths = n.async_meths
|
local async_meths = n.async_meths
|
||||||
local expect_msg_seq = n.expect_msg_seq
|
local expect_msg_seq = n.expect_msg_seq
|
||||||
local pcall_err = t.pcall_err
|
local pcall_err = t.pcall_err
|
||||||
@@ -56,7 +54,7 @@ describe("preserve and (R)ecover with custom 'directory'", function()
|
|||||||
|
|
||||||
local nvim0
|
local nvim0
|
||||||
before_each(function()
|
before_each(function()
|
||||||
nvim0 = spawn(new_argv())
|
nvim0 = n.new_session(false)
|
||||||
set_session(nvim0)
|
set_session(nvim0)
|
||||||
rmdir(swapdir)
|
rmdir(swapdir)
|
||||||
mkdir(swapdir)
|
mkdir(swapdir)
|
||||||
@@ -76,7 +74,8 @@ describe("preserve and (R)ecover with custom 'directory'", function()
|
|||||||
|
|
||||||
local function test_recover(swappath1)
|
local function test_recover(swappath1)
|
||||||
-- Start another Nvim instance.
|
-- Start another Nvim instance.
|
||||||
local nvim2 = spawn({ nvim_prog, '-u', 'NONE', '-i', 'NONE', '--embed' }, true)
|
local nvim2 =
|
||||||
|
n.new_session(false, { args = { '-u', 'NONE', '-i', 'NONE', '--embed' }, merge = false })
|
||||||
set_session(nvim2)
|
set_session(nvim2)
|
||||||
|
|
||||||
exec(init)
|
exec(init)
|
||||||
@@ -141,7 +140,7 @@ describe('swapfile detection', function()
|
|||||||
set swapfile fileformat=unix nomodified undolevels=-1 nohidden
|
set swapfile fileformat=unix nomodified undolevels=-1 nohidden
|
||||||
]]
|
]]
|
||||||
before_each(function()
|
before_each(function()
|
||||||
nvim0 = spawn(new_argv())
|
nvim0 = n.new_session(false)
|
||||||
set_session(nvim0)
|
set_session(nvim0)
|
||||||
rmdir(swapdir)
|
rmdir(swapdir)
|
||||||
mkdir(swapdir)
|
mkdir(swapdir)
|
||||||
@@ -168,7 +167,8 @@ describe('swapfile detection', function()
|
|||||||
command('preserve')
|
command('preserve')
|
||||||
|
|
||||||
-- Start another Nvim instance.
|
-- Start another Nvim instance.
|
||||||
local nvim2 = spawn({ nvim_prog, '-u', 'NONE', '-i', 'NONE', '--embed' }, true, nil, true)
|
local nvim2 =
|
||||||
|
n.new_session(true, { args = { '-u', 'NONE', '-i', 'NONE', '--embed' }, merge = false })
|
||||||
set_session(nvim2)
|
set_session(nvim2)
|
||||||
local screen2 = Screen.new(256, 40)
|
local screen2 = Screen.new(256, 40)
|
||||||
screen2._default_attr_ids = nil
|
screen2._default_attr_ids = nil
|
||||||
@@ -251,7 +251,7 @@ describe('swapfile detection', function()
|
|||||||
command('preserve') -- Make sure the swap file exists.
|
command('preserve') -- Make sure the swap file exists.
|
||||||
local nvimpid = fn.getpid()
|
local nvimpid = fn.getpid()
|
||||||
|
|
||||||
local nvim1 = spawn(new_argv(), true, nil, true)
|
local nvim1 = n.new_session(true)
|
||||||
set_session(nvim1)
|
set_session(nvim1)
|
||||||
local screen = Screen.new(75, 18)
|
local screen = Screen.new(75, 18)
|
||||||
exec(init)
|
exec(init)
|
||||||
@@ -273,7 +273,7 @@ describe('swapfile detection', function()
|
|||||||
[1] = { bold = true, foreground = Screen.colors.SeaGreen }, -- MoreMsg
|
[1] = { bold = true, foreground = Screen.colors.SeaGreen }, -- MoreMsg
|
||||||
})
|
})
|
||||||
|
|
||||||
local nvim1 = spawn(new_argv(), true, nil, true)
|
local nvim1 = n.new_session(true)
|
||||||
set_session(nvim1)
|
set_session(nvim1)
|
||||||
screen:attach()
|
screen:attach()
|
||||||
exec(init)
|
exec(init)
|
||||||
@@ -292,7 +292,7 @@ describe('swapfile detection', function()
|
|||||||
]])
|
]])
|
||||||
nvim1:close()
|
nvim1:close()
|
||||||
|
|
||||||
local nvim2 = spawn(new_argv(), true, nil, true)
|
local nvim2 = n.new_session(true)
|
||||||
set_session(nvim2)
|
set_session(nvim2)
|
||||||
screen:attach()
|
screen:attach()
|
||||||
exec(init)
|
exec(init)
|
||||||
|
@@ -5,8 +5,6 @@ local n = require('test.functional.testnvim')()
|
|||||||
local command = n.command
|
local command = n.command
|
||||||
local clear = n.clear
|
local clear = n.clear
|
||||||
local eval = n.eval
|
local eval = n.eval
|
||||||
local spawn = n.spawn
|
|
||||||
local nvim_prog = n.nvim_prog
|
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
|
|
||||||
describe(':wundo', function()
|
describe(':wundo', function()
|
||||||
@@ -24,15 +22,11 @@ end)
|
|||||||
|
|
||||||
describe('u_* functions', function()
|
describe('u_* functions', function()
|
||||||
it('safely fail on new, non-empty buffer', function()
|
it('safely fail on new, non-empty buffer', function()
|
||||||
local session = spawn({
|
local session = n.new_session(false, {
|
||||||
nvim_prog,
|
args = {
|
||||||
'-u',
|
'-c',
|
||||||
'NONE',
|
'set undodir=. undofile',
|
||||||
'-i',
|
},
|
||||||
'NONE',
|
|
||||||
'--embed',
|
|
||||||
'-c',
|
|
||||||
'set undodir=. undofile',
|
|
||||||
})
|
})
|
||||||
set_session(session)
|
set_session(session)
|
||||||
command('echo "True"') -- Should not error out due to crashed Neovim
|
command('echo "True"') -- Should not error out due to crashed Neovim
|
||||||
|
@@ -218,7 +218,7 @@ describe('ShaDa support code', function()
|
|||||||
-- -c temporary sets lnum to zero to make `+/pat` work, so calling setpcmark()
|
-- -c temporary sets lnum to zero to make `+/pat` work, so calling setpcmark()
|
||||||
-- during -c used to add item with zero lnum to jump list.
|
-- during -c used to add item with zero lnum to jump list.
|
||||||
it('does not create incorrect file for non-existent buffers when writing from -c', function()
|
it('does not create incorrect file for non-existent buffers when writing from -c', function()
|
||||||
local argv = n.new_argv {
|
local p = n.spawn_wait {
|
||||||
args_rm = {
|
args_rm = {
|
||||||
'-i',
|
'-i',
|
||||||
'--embed', -- no --embed
|
'--embed', -- no --embed
|
||||||
@@ -232,12 +232,13 @@ describe('ShaDa support code', function()
|
|||||||
'qall',
|
'qall',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
eq('', fn.system(argv))
|
eq('', p:output())
|
||||||
|
eq(0, p.status)
|
||||||
eq(0, exc_exec('rshada'))
|
eq(0, exc_exec('rshada'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('does not create incorrect file for non-existent buffers opened from -c', function()
|
it('does not create incorrect file for non-existent buffers opened from -c', function()
|
||||||
local argv = n.new_argv {
|
local p = n.spawn_wait {
|
||||||
args_rm = {
|
args_rm = {
|
||||||
'-i',
|
'-i',
|
||||||
'--embed', -- no --embed
|
'--embed', -- no --embed
|
||||||
@@ -251,7 +252,8 @@ describe('ShaDa support code', function()
|
|||||||
'autocmd VimEnter * qall',
|
'autocmd VimEnter * qall',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
eq('', fn.system(argv))
|
eq('', p:output())
|
||||||
|
eq(0, p.status)
|
||||||
eq(0, exc_exec('rshada'))
|
eq(0, exc_exec('rshada'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@@ -6,8 +6,7 @@ local uv = vim.uv
|
|||||||
local paths = t.paths
|
local paths = t.paths
|
||||||
|
|
||||||
local api, nvim_command, fn, eq = n.api, n.command, n.fn, t.eq
|
local api, nvim_command, fn, eq = n.api, n.command, n.fn, t.eq
|
||||||
local write_file, spawn, set_session, nvim_prog, exc_exec =
|
local write_file, set_session, exc_exec = t.write_file, n.set_session, n.exc_exec
|
||||||
t.write_file, n.spawn, n.set_session, n.nvim_prog, n.exc_exec
|
|
||||||
local is_os = t.is_os
|
local is_os = t.is_os
|
||||||
local skip = t.skip
|
local skip = t.skip
|
||||||
|
|
||||||
@@ -254,7 +253,7 @@ describe('ShaDa support code', function()
|
|||||||
it('does not crash when ShaDa file directory is not writable', function()
|
it('does not crash when ShaDa file directory is not writable', function()
|
||||||
skip(is_os('win'))
|
skip(is_os('win'))
|
||||||
|
|
||||||
fn.mkdir(dirname, '', 0)
|
fn.mkdir(dirname, '', '0')
|
||||||
eq(0, fn.filewritable(dirname))
|
eq(0, fn.filewritable(dirname))
|
||||||
reset { shadafile = dirshada, args = { '--cmd', 'set shada=' } }
|
reset { shadafile = dirshada, args = { '--cmd', 'set shada=' } }
|
||||||
api.nvim_set_option_value('shada', "'10", {})
|
api.nvim_set_option_value('shada', "'10", {})
|
||||||
@@ -270,10 +269,10 @@ end)
|
|||||||
|
|
||||||
describe('ShaDa support code', function()
|
describe('ShaDa support code', function()
|
||||||
it('does not write NONE file', function()
|
it('does not write NONE file', function()
|
||||||
local session = spawn(
|
local session = n.new_session(false, {
|
||||||
{ nvim_prog, '-u', 'NONE', '-i', 'NONE', '--embed', '--headless', '--cmd', 'qall' },
|
merge = false,
|
||||||
true
|
args = { '-u', 'NONE', '-i', 'NONE', '--embed', '--headless', '--cmd', 'qall' },
|
||||||
)
|
})
|
||||||
session:close()
|
session:close()
|
||||||
eq(nil, uv.fs_stat('NONE'))
|
eq(nil, uv.fs_stat('NONE'))
|
||||||
eq(nil, uv.fs_stat('NONE.tmp.a'))
|
eq(nil, uv.fs_stat('NONE.tmp.a'))
|
||||||
@@ -281,7 +280,10 @@ describe('ShaDa support code', function()
|
|||||||
|
|
||||||
it('does not read NONE file', function()
|
it('does not read NONE file', function()
|
||||||
write_file('NONE', '\005\001\015\131\161na\162rX\194\162rc\145\196\001-')
|
write_file('NONE', '\005\001\015\131\161na\162rX\194\162rc\145\196\001-')
|
||||||
local session = spawn({ nvim_prog, '-u', 'NONE', '-i', 'NONE', '--embed', '--headless' }, true)
|
local session = n.new_session(
|
||||||
|
false,
|
||||||
|
{ merge = false, args = { '-u', 'NONE', '-i', 'NONE', '--embed', '--headless' } }
|
||||||
|
)
|
||||||
set_session(session)
|
set_session(session)
|
||||||
eq('', fn.getreg('a'))
|
eq('', fn.getreg('a'))
|
||||||
session:close()
|
session:close()
|
||||||
|
@@ -26,7 +26,6 @@ local api = n.api
|
|||||||
local is_ci = t.is_ci
|
local is_ci = t.is_ci
|
||||||
local is_os = t.is_os
|
local is_os = t.is_os
|
||||||
local new_pipename = n.new_pipename
|
local new_pipename = n.new_pipename
|
||||||
local spawn_argv = n.spawn_argv
|
|
||||||
local set_session = n.set_session
|
local set_session = n.set_session
|
||||||
local write_file = t.write_file
|
local write_file = t.write_file
|
||||||
local eval = n.eval
|
local eval = n.eval
|
||||||
@@ -3320,8 +3319,8 @@ describe('TUI as a client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('connects to remote instance (with its own TUI)', function()
|
it('connects to remote instance (with its own TUI)', function()
|
||||||
local server_super = spawn_argv(false) -- equivalent to clear()
|
local server_super = n.new_session(false)
|
||||||
local client_super = spawn_argv(true)
|
local client_super = n.new_session(true)
|
||||||
|
|
||||||
set_session(server_super)
|
set_session(server_super)
|
||||||
local server_pipe = new_pipename()
|
local server_pipe = new_pipename()
|
||||||
@@ -3395,8 +3394,8 @@ describe('TUI as a client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('connects to remote instance (--headless)', function()
|
it('connects to remote instance (--headless)', function()
|
||||||
local server = spawn_argv(false) -- equivalent to clear()
|
local server = n.new_session(false)
|
||||||
local client_super = spawn_argv(true, { env = { NVIM_LOG_FILE = testlog } })
|
local client_super = n.new_session(true, { env = { NVIM_LOG_FILE = testlog } })
|
||||||
|
|
||||||
set_session(server)
|
set_session(server)
|
||||||
local server_pipe = api.nvim_get_vvar('servername')
|
local server_pipe = api.nvim_get_vvar('servername')
|
||||||
@@ -3462,8 +3461,8 @@ describe('TUI as a client', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
local function test_remote_tui_quit(status)
|
local function test_remote_tui_quit(status)
|
||||||
local server_super = spawn_argv(false) -- equivalent to clear()
|
local server_super = n.new_session(false)
|
||||||
local client_super = spawn_argv(true)
|
local client_super = n.new_session(true)
|
||||||
|
|
||||||
set_session(server_super)
|
set_session(server_super)
|
||||||
local server_pipe = new_pipename()
|
local server_pipe = new_pipename()
|
||||||
|
@@ -455,23 +455,6 @@ function M.check_close()
|
|||||||
session = nil
|
session = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Starts `argv` process as a Nvim msgpack-RPC session.
|
|
||||||
---
|
|
||||||
--- @param argv string[]
|
|
||||||
--- @param merge boolean?
|
|
||||||
--- @param env string[]?
|
|
||||||
--- @param keep boolean? Don't close the current global session.
|
|
||||||
--- @param io_extra uv.uv_pipe_t? used for stdin_fd, see :help ui-option
|
|
||||||
--- @return test.Session
|
|
||||||
function M.spawn(argv, merge, env, keep, io_extra)
|
|
||||||
if not keep then
|
|
||||||
M.check_close()
|
|
||||||
end
|
|
||||||
|
|
||||||
local proc = ProcStream.spawn(merge and M.merge_args(prepend_argv, argv) or argv, env, io_extra)
|
|
||||||
return Session.new(proc)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Creates a new Session connected by domain socket (named pipe) or TCP.
|
-- Creates a new Session connected by domain socket (named pipe) or TCP.
|
||||||
function M.connect(file_or_address)
|
function M.connect(file_or_address)
|
||||||
local addr, port = string.match(file_or_address, '(.*):(%d+)')
|
local addr, port = string.match(file_or_address, '(.*):(%d+)')
|
||||||
@@ -480,9 +463,9 @@ function M.connect(file_or_address)
|
|||||||
return Session.new(stream)
|
return Session.new(stream)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Starts (and returns) a new global Nvim session.
|
--- Starts a new, global Nvim session and clears the current one.
|
||||||
---
|
---
|
||||||
--- Use `spawn_argv()` to get a new session without replacing the current global session.
|
--- Note: Use `new_session()` to start a session without replacing the current one.
|
||||||
---
|
---
|
||||||
--- Parameters are interpreted as startup args, OR a map with these keys:
|
--- Parameters are interpreted as startup args, OR a map with these keys:
|
||||||
--- - args: List: Args appended to the default `nvim_argv` set.
|
--- - args: List: Args appended to the default `nvim_argv` set.
|
||||||
@@ -499,33 +482,41 @@ end
|
|||||||
---
|
---
|
||||||
--- @param ... string Nvim CLI args
|
--- @param ... string Nvim CLI args
|
||||||
--- @return test.Session
|
--- @return test.Session
|
||||||
--- @overload fun(opts: test.new_argv.Opts): test.Session
|
--- @overload fun(opts: test.session.Opts): test.Session
|
||||||
function M.clear(...)
|
function M.clear(...)
|
||||||
M.set_session(M.spawn_argv(false, ...))
|
M.set_session(M.new_session(false, ...))
|
||||||
return M.get_session()
|
return M.get_session()
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Same as clear(), but doesn't replace the current global session.
|
--- Starts a new Nvim process with the given args and returns a msgpack-RPC session.
|
||||||
---
|
---
|
||||||
--- @param keep boolean Don't close the current global session.
|
--- Does not replace the current global session, unlike `clear()`.
|
||||||
--- @param ... string Nvim CLI args
|
---
|
||||||
|
--- @param keep boolean (default: false) Don't close the current global session.
|
||||||
|
--- @param ... string Nvim CLI args (or see overload)
|
||||||
--- @return test.Session
|
--- @return test.Session
|
||||||
--- @overload fun(opts: test.new_argv.Opts): test.Session
|
--- @overload fun(keep: boolean, opts: test.session.Opts): test.Session
|
||||||
function M.spawn_argv(keep, ...)
|
function M.new_session(keep, ...)
|
||||||
local argv, env, io_extra = M.new_argv(...)
|
if not keep then
|
||||||
return M.spawn(argv, nil, env, keep, io_extra)
|
M.check_close()
|
||||||
|
end
|
||||||
|
|
||||||
|
local argv, env, io_extra = M._new_argv(...)
|
||||||
|
|
||||||
|
local proc = ProcStream.spawn(argv, env, io_extra)
|
||||||
|
return Session.new(proc)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Starts a (non-RPC, `--headless --listen "Tx"`) Nvim process, waits for exit, and returns result.
|
--- Starts a (non-RPC, `--headless --listen "Tx"`) Nvim process, waits for exit, and returns result.
|
||||||
---
|
---
|
||||||
--- @param ... string Nvim CLI args
|
--- @param ... string Nvim CLI args, or `test.session.Opts` table.
|
||||||
--- @return test.ProcStream
|
--- @return test.ProcStream
|
||||||
--- @overload fun(opts: test.new_argv.Opts): test.ProcStream
|
--- @overload fun(opts: test.session.Opts): test.ProcStream
|
||||||
function M.spawn_wait(...)
|
function M.spawn_wait(...)
|
||||||
local opts = type(...) == 'string' and { args = { ... } } or ...
|
local opts = type(...) == 'string' and { args = { ... } } or ...
|
||||||
opts.args_rm = opts.args_rm and opts.args_rm or {}
|
opts.args_rm = opts.args_rm and opts.args_rm or {}
|
||||||
table.insert(opts.args_rm, '--embed')
|
table.insert(opts.args_rm, '--embed')
|
||||||
local argv, env, io_extra = M.new_argv(opts)
|
local argv, env, io_extra = M._new_argv(opts)
|
||||||
local proc = ProcStream.spawn(argv, env, io_extra)
|
local proc = ProcStream.spawn(argv, env, io_extra)
|
||||||
proc.collect_text = true
|
proc.collect_text = true
|
||||||
proc:read_start()
|
proc:read_start()
|
||||||
@@ -534,36 +525,50 @@ function M.spawn_wait(...)
|
|||||||
return proc
|
return proc
|
||||||
end
|
end
|
||||||
|
|
||||||
--- @class test.new_argv.Opts
|
--- @class test.session.Opts
|
||||||
|
--- Nvim CLI args
|
||||||
--- @field args? string[]
|
--- @field args? string[]
|
||||||
|
--- Remove these args from the default `nvim_argv` args set. Ignored if `merge=false`.
|
||||||
--- @field args_rm? string[]
|
--- @field args_rm? string[]
|
||||||
|
--- (default: true) Merge `args` with the default set. Else use only the provided `args`.
|
||||||
|
--- @field merge? boolean
|
||||||
|
--- Environment variables
|
||||||
--- @field env? table<string,string>
|
--- @field env? table<string,string>
|
||||||
|
--- Used for stdin_fd, see `:help ui-option`
|
||||||
--- @field io_extra? uv.uv_pipe_t
|
--- @field io_extra? uv.uv_pipe_t
|
||||||
|
|
||||||
--- Builds an argument list for use in clear().
|
--- @private
|
||||||
---
|
---
|
||||||
--- @param ... string See clear().
|
--- Builds an argument list for use in `new_session()`, `clear()`, and `spawn_wait()`.
|
||||||
|
---
|
||||||
|
--- @param ... string Nvim CLI args, or `test.session.Opts` table.
|
||||||
--- @return string[]
|
--- @return string[]
|
||||||
--- @return string[]?
|
--- @return string[]?
|
||||||
--- @return uv.uv_pipe_t?
|
--- @return uv.uv_pipe_t?
|
||||||
--- @overload fun(opts: test.new_argv.Opts): string[], string[]?, uv.uv_pipe_t?
|
--- @overload fun(opts: test.session.Opts): string[], string[]?, uv.uv_pipe_t?
|
||||||
function M.new_argv(...)
|
function M._new_argv(...)
|
||||||
local args = { unpack(M.nvim_argv) }
|
--- @type test.session.Opts|string
|
||||||
table.insert(args, '--headless')
|
local opts = select(1, ...)
|
||||||
if _G._nvim_test_id then
|
local merge = type(opts) ~= 'table' and true or opts.merge ~= false
|
||||||
-- Set the server name to the test-id for logging. #8519
|
|
||||||
table.insert(args, '--listen')
|
local args = merge and { unpack(M.nvim_argv) } or { M.nvim_prog }
|
||||||
table.insert(args, _G._nvim_test_id)
|
if merge then
|
||||||
|
table.insert(args, '--headless')
|
||||||
|
if _G._nvim_test_id then
|
||||||
|
-- Set the server name to the test-id for logging. #8519
|
||||||
|
table.insert(args, '--listen')
|
||||||
|
table.insert(args, _G._nvim_test_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local new_args --- @type string[]
|
local new_args --- @type string[]
|
||||||
local io_extra --- @type uv.uv_pipe_t?
|
local io_extra --- @type uv.uv_pipe_t?
|
||||||
local env --- @type string[]?
|
local env --- @type string[]? List of "key=value" env vars.
|
||||||
--- @type test.new_argv.Opts|string
|
|
||||||
local opts = select(1, ...)
|
|
||||||
if type(opts) ~= 'table' then
|
if type(opts) ~= 'table' then
|
||||||
new_args = { ... }
|
new_args = { ... }
|
||||||
else
|
else
|
||||||
args = remove_args(args, opts.args_rm)
|
args = merge and remove_args(args, opts.args_rm) or args
|
||||||
if opts.env then
|
if opts.env then
|
||||||
local env_opt = {} --- @type table<string,string>
|
local env_opt = {} --- @type table<string,string>
|
||||||
for k, v in pairs(opts.env) do
|
for k, v in pairs(opts.env) do
|
||||||
|
@@ -2,7 +2,7 @@ local t = require('test.testutil')
|
|||||||
local n = require('test.functional.testnvim')()
|
local n = require('test.functional.testnvim')()
|
||||||
local Screen = require('test.functional.ui.screen')
|
local Screen = require('test.functional.ui.screen')
|
||||||
|
|
||||||
local spawn, set_session, clear = n.spawn, n.set_session, n.clear
|
local set_session, clear = n.set_session, n.clear
|
||||||
local feed, command = n.feed, n.command
|
local feed, command = n.feed, n.command
|
||||||
local exec = n.exec
|
local exec = n.exec
|
||||||
local insert = n.insert
|
local insert = n.insert
|
||||||
@@ -26,7 +26,7 @@ describe('screen', function()
|
|||||||
}
|
}
|
||||||
|
|
||||||
before_each(function()
|
before_each(function()
|
||||||
local screen_nvim = spawn(nvim_argv)
|
local screen_nvim = n.new_session(false, { args = nvim_argv, merge = false })
|
||||||
set_session(screen_nvim)
|
set_session(screen_nvim)
|
||||||
screen = Screen.new()
|
screen = Screen.new()
|
||||||
end)
|
end)
|
||||||
@@ -766,7 +766,7 @@ describe('Screen default colors', function()
|
|||||||
'colorscheme vim',
|
'colorscheme vim',
|
||||||
'--embed',
|
'--embed',
|
||||||
}
|
}
|
||||||
local screen_nvim = spawn(nvim_argv)
|
local screen_nvim = n.new_session(false, { args = nvim_argv, merge = false })
|
||||||
set_session(screen_nvim)
|
set_session(screen_nvim)
|
||||||
screen = Screen.new(53, 14, { rgb = true, ext_termcolors = termcolors or nil })
|
screen = Screen.new(53, 14, { rgb = true, ext_termcolors = termcolors or nil })
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user