diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-09-21 09:20:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-21 09:20:04 +0200 |
commit | ecdd2df88ab52ed6e39057e2a8fb9eabfbb90bd5 (patch) | |
tree | a6072625d7c97b943c4ed5cbfe3d258bd111c23f /test/unit/os/shell_spec.lua | |
parent | ad6bbe44683cf936ec2268ee89e8e1c22f538ecc (diff) | |
download | rneovim-ecdd2df88ab52ed6e39057e2a8fb9eabfbb90bd5.tar.gz rneovim-ecdd2df88ab52ed6e39057e2a8fb9eabfbb90bd5.tar.bz2 rneovim-ecdd2df88ab52ed6e39057e2a8fb9eabfbb90bd5.zip |
shell/logging: Fix E730 with verbose system({List}) #9009
ref https://github.com/neovim/neovim/issues/9001#issuecomment-421843790
Steps to reproduce:
:set verbose=9
:call system(['echo'])
E730: using List as a String
Diffstat (limited to 'test/unit/os/shell_spec.lua')
-rw-r--r-- | test/unit/os/shell_spec.lua | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/unit/os/shell_spec.lua b/test/unit/os/shell_spec.lua index 37274502de..a73fc8e47e 100644 --- a/test/unit/os/shell_spec.lua +++ b/test/unit/os/shell_spec.lua @@ -25,6 +25,7 @@ describe('shell functions', function() local res = cimported.shell_build_argv( cmd and to_cstr(cmd), extra_args and to_cstr(extra_args)) + -- `res` is zero-indexed (C pointer, not Lua table)! local argc = 0 local ret = {} -- Explicitly free everything, so if it is not in allocated memory it will @@ -38,6 +39,26 @@ describe('shell functions', function() return ret end + local function shell_argv_to_str(argv_table) + -- C string array (char **). + local argv = (argv_table + and ffi.new("char*[?]", #argv_table+1) + or NULL) + + local argc = 1 + while argv_table ~= nil and argv_table[argc] ~= nil do + -- `argv` is zero-indexed (C pointer, not Lua table)! + argv[argc - 1] = to_cstr(argv_table[argc]) + argc = argc + 1 + end + if argv_table ~= nil then + argv[argc - 1] = NULL + end + + local res = cimported.shell_argv_to_str(argv) + return ffi.string(res) + end + local function os_system(cmd, input) local input_or = input and to_cstr(input) or NULL local input_len = (input ~= nil) and string.len(input) or 0 @@ -151,4 +172,14 @@ describe('shell functions', function() eq(nil, argv[3]) end) end) + + itp('shell_argv_to_str', function() + eq('', shell_argv_to_str({ nil })) + eq("''", shell_argv_to_str({ '' })) + eq("'foo' '' 'bar'", shell_argv_to_str({ 'foo', '', 'bar' })) + eq("'/bin/sh' '-c' 'abc def'", shell_argv_to_str({'/bin/sh', '-c', 'abc def'})) + eq("'abc def' 'ghi jkl'", shell_argv_to_str({'abc def', 'ghi jkl'})) + eq("'/bin/sh' '-c' 'abc def' '"..('x'):rep(225).."...", + shell_argv_to_str({'/bin/sh', '-c', 'abc def', ('x'):rep(999)})) + end) end) |