diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 58d9d56789..0bdf88b0e0 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -1755,7 +1755,7 @@ void tui_chdir(TUIData *tui, String path) { int err = uv_chdir(path.data); if (err != 0) { - ELOG("Failed to chdir to %s: %s", path.data, strerror(err)); + ELOG("Failed to chdir to %s: %s", path.data, uv_strerror(err)); } } diff --git a/test/busted/outputHandlers/nvim.lua b/test/busted/outputHandlers/nvim.lua index ef388a6b59..c1a4c4842d 100644 --- a/test/busted/outputHandlers/nvim.lua +++ b/test/busted/outputHandlers/nvim.lua @@ -106,6 +106,19 @@ return function(options) local failureCount = 0 local errorCount = 0 + local naCheck = function(pending) + if pending.name:find(' N/A[: ]') or pending.name:find(' N/A$') then + return true + end + if type(pending.message) ~= 'string' then + return false + end + if pending.message:find(' N/A[: ]') or pending.message:find(' N/A$') then + return true + end + return false + end + local pendingDescription = function(pending) local string = '' @@ -156,10 +169,21 @@ return function(options) local testString = summaryStrings[status].test if testString then + local naCount = 0 for _, t in ipairs(list) do - local fullname = getFileLine(t.element) .. colors.bright(t.name) - string = string .. testString:format(fullname) - string = string .. getDescription(t) + if status == 'skipped' and naCheck(t) then + naCount = naCount + 1 + else + local fullname = getFileLine(t.element) .. colors.bright(t.name) + string = string .. testString:format(fullname) + string = string .. getDescription(t) + end + end + if naCount > 0 then + string = string + .. colors.bright( + ('%d N/A %s not shown\n'):format(naCount, naCount == 1 and 'test' or 'tests') + ) end end end diff --git a/test/functional/autocmd/signal_spec.lua b/test/functional/autocmd/signal_spec.lua index 86e0e905cc..33ccba4464 100644 --- a/test/functional/autocmd/signal_spec.lua +++ b/test/functional/autocmd/signal_spec.lua @@ -12,7 +12,7 @@ local read_file = t.read_file local feed = n.feed local retry = t.retry -if skip(is_os('win'), 'Only applies to POSIX systems') then +if skip(is_os('win'), 'N/A: Only applies to POSIX systems') then return end diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua index bfd0a1612d..969988d937 100644 --- a/test/functional/core/job_spec.lua +++ b/test/functional/core/job_spec.lua @@ -749,7 +749,7 @@ describe('jobs', function() it('lists passed to callbacks are freed if not stored #25891', function() if not exec_lua('return pcall(require, "ffi")') then - pending('missing LuaJIT FFI') + pending('N/A: missing LuaJIT FFI') end source([[ diff --git a/test/functional/core/server_spec.lua b/test/functional/core/server_spec.lua index e59be55d1c..7a1f79b12e 100644 --- a/test/functional/core/server_spec.lua +++ b/test/functional/core/server_spec.lua @@ -220,12 +220,10 @@ describe('server', function() end) it('removes stale socket files automatically #26053', function() - if is_os('win') then - -- Windows named pipes are ephemeral kernel objects that are automatically - -- cleaned up when the process terminates. Unix domain sockets persist as - -- files on the filesystem and can become stale after crashes. - return - end + -- Windows named pipes are ephemeral kernel objects that are automatically + -- cleaned up when the process terminates. Unix domain sockets persist as + -- files on the filesystem and can become stale after crashes. + t.skip(is_os('win'), 'N/A on Windows') clear() clear_serverlist() @@ -246,9 +244,7 @@ describe('server', function() end) it('does not remove live sockets #26053', function() - if is_os('win') then - return - end + t.skip(is_os('win'), 'N/A on Windows') clear() local socket_path = './Xtest-live-socket' diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua index 0bfa419dac..a1c5db4d89 100644 --- a/test/functional/editor/completion_spec.lua +++ b/test/functional/editor/completion_spec.lua @@ -31,9 +31,7 @@ describe('completion', function() end) it('ctrl-x_ctrl-f completes Windows drive letter', function() - if not t.is_os('win') then - return - end + t.skip(not t.is_os('win'), 'N/A for non-Windows') feed('iblablaC:/W') screen:expect { any = [[C:\Windows\]], diff --git a/test/functional/ex_cmds/source_spec.lua b/test/functional/ex_cmds/source_spec.lua index 3c6a8d2c8d..e90411b91d 100644 --- a/test/functional/ex_cmds/source_spec.lua +++ b/test/functional/ex_cmds/source_spec.lua @@ -48,10 +48,8 @@ describe(':source', function() end) it("changing 'shellslash' changes the result of expand()", function() - if not is_os('win') then - pending("'shellslash' only works on Windows") - return - end + t.skip(not is_os('win'), "N/A: 'shellslash' only works on Windows") + api.nvim_set_option_value('shellslash', false, {}) mkdir('Xshellslash') diff --git a/test/functional/lua/ffi_spec.lua b/test/functional/lua/ffi_spec.lua index 96f5812493..136e2e7c69 100644 --- a/test/functional/lua/ffi_spec.lua +++ b/test/functional/lua/ffi_spec.lua @@ -10,7 +10,7 @@ before_each(clear) describe('ffi.cdef', function() it('can use Neovim core functions', function() if not exec_lua("return pcall(require, 'ffi')") then - pending('missing LuaJIT FFI') + pending('N/A: missing LuaJIT FFI') end eq( diff --git a/test/functional/lua/uri_spec.lua b/test/functional/lua/uri_spec.lua index d706f8b78b..e1cd546fdc 100644 --- a/test/functional/lua/uri_spec.lua +++ b/test/functional/lua/uri_spec.lua @@ -206,7 +206,7 @@ describe('URI methods', function() describe('uri from bufnr', function() it('Windows paths should not be treated as uris', function() - skip(not is_os('win'), 'Not applicable on non-Windows') + skip(not is_os('win'), 'N/A on non-Windows') local file = t.tmpname() write_file(file, 'Test content') diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index db92f14dc0..df0cf9dae4 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -2744,7 +2744,7 @@ describe('TUI', function() it('argv[0] can be overridden #23953', function() if not exec_lua('return pcall(require, "ffi")') then - pending('missing LuaJIT FFI') + pending('N/A: missing LuaJIT FFI') end local script_file = 'Xargv0.lua' write_file( @@ -3674,7 +3674,7 @@ describe('TUI', function() it('queries the terminal for OSC 52 support with XTGETTCAP', function() clear() if not exec_lua('return pcall(require, "ffi")') then - pending('missing LuaJIT FFI') + pending('N/A: missing LuaJIT FFI') end -- Change vterm's DA1 response so that it doesn't include 52 @@ -4122,33 +4122,29 @@ describe('TUI client', function() screen_client:expect({ any = vim.pesc('[Process exited 0]') }) end) + local ffi_str_defs = [[ + local ffi = require('ffi') + local cstr = ffi.typeof('char[?]') + ffi.cdef('typedef struct { char *data; size_t size; } String;') + local function to_api_string(str) + return ffi.new('String', { data = cstr(#str + 1, str), size = #str }) + end + ]] + it('does not crash or hang with a very long title', function() local server, _, screen_client = start_headless_server_and_client(true) - local server_exec_lua = tt.make_lua_executor(server) if not server_exec_lua('return pcall(require, "ffi")') then - pending('missing LuaJIT FFI') + pending('N/A: missing LuaJIT FFI') end local bufname = api.nvim_buf_get_name(0) -- Normally a title cannot be longer than the 65535-byte buffer as maketitle() -- limits it length. Use FFI to send a very long title directly. - server_exec_lua([=[ - local ffi = require('ffi') - local cstr = ffi.typeof('char[?]') - local function to_cstr(string) - return cstr(#string + 1, string) - end - - ffi.cdef([[ - typedef struct { char *data; size_t size; } String; - void ui_call_set_title(String title); - ]]) - - local len = 65536 - local title = ffi.new('String', { data = to_cstr(('a'):rep(len)), size = len }) - ffi.C.ui_call_set_title(title) - ]=]) + server_exec_lua(ffi_str_defs .. [[ + ffi.cdef('void ui_call_set_title(String title);') + ffi.C.ui_call_set_title(to_api_string(('a'):rep(65536))) + ]]) screen_client:expect_unchanged() assert_log('set_title: title string too long!', testlog) eq(bufname, api.nvim_buf_get_var(0, 'term_title')) @@ -4160,6 +4156,22 @@ describe('TUI client', function() end) end) + it('logs chdir failure properly', function() + local server, _, screen_client = start_headless_server_and_client(true) + local server_exec_lua = tt.make_lua_executor(server) + if not server_exec_lua('return pcall(require, "ffi")') then + pending('N/A: missing LuaJIT FFI') + end + + -- Use FFI to send a chdir event to a non-directory path. + server_exec_lua(ffi_str_defs .. [[ + ffi.cdef('void ui_call_chdir(String path);') + ffi.C.ui_call_chdir(to_api_string('README.md')) + ]]) + screen_client:expect_unchanged() + assert_log('Failed to chdir to README.md: not a directory', testlog) + end) + it('nvim_ui_send works with remote client #36317', function() local server, _, _ = start_headless_server_and_client(false) server:request('nvim_ui_send', '\027]2;TEST_TITLE\027\\')