mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
refactor(tests): introduce testprg()
Also: - Add a describe('shell :!') section to system_spec. - Make the test for #16271 work on systems without powershell.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
|
||||
local assert_alive = helpers.assert_alive
|
||||
local nvim_dir = helpers.nvim_dir
|
||||
local testprg = helpers.testprg
|
||||
local eq, call, clear, eval, feed_command, feed, nvim =
|
||||
helpers.eq, helpers.call, helpers.clear, helpers.eval, helpers.feed_command,
|
||||
helpers.feed, helpers.nvim
|
||||
@@ -32,10 +32,6 @@ describe('system()', function()
|
||||
before_each(clear)
|
||||
|
||||
describe('command passed as a List', function()
|
||||
local function printargs_path()
|
||||
return nvim_dir..'/printargs-test' .. (iswin() and '.exe' or '')
|
||||
end
|
||||
|
||||
it('throws error if cmd[0] is not executable', function()
|
||||
eq("Vim:E475: Invalid value for argument cmd: 'this-should-not-exist' is not executable",
|
||||
pcall_err(call, 'system', { 'this-should-not-exist' }))
|
||||
@@ -68,16 +64,16 @@ describe('system()', function()
|
||||
|
||||
it('quotes arguments correctly #5280', function()
|
||||
local out = call('system',
|
||||
{ printargs_path(), [[1]], [[2 "3]], [[4 ' 5]], [[6 ' 7']] })
|
||||
{ testprg('printargs-test'), [[1]], [[2 "3]], [[4 ' 5]], [[6 ' 7']] })
|
||||
|
||||
eq(0, eval('v:shell_error'))
|
||||
eq([[arg1=1;arg2=2 "3;arg3=4 ' 5;arg4=6 ' 7';]], out)
|
||||
|
||||
out = call('system', { printargs_path(), [['1]], [[2 "3]] })
|
||||
out = call('system', { testprg('printargs-test'), [['1]], [[2 "3]] })
|
||||
eq(0, eval('v:shell_error'))
|
||||
eq([[arg1='1;arg2=2 "3;]], out)
|
||||
|
||||
out = call('system', { printargs_path(), "A\nB" })
|
||||
out = call('system', { testprg('printargs-test'), "A\nB" })
|
||||
eq(0, eval('v:shell_error'))
|
||||
eq("arg1=A\nB;", out)
|
||||
end)
|
||||
@@ -169,7 +165,7 @@ describe('system()', function()
|
||||
end
|
||||
end)
|
||||
|
||||
it('works with powershell', function()
|
||||
it('with powershell', function()
|
||||
helpers.set_shell_powershell()
|
||||
eq('a\nb\n', eval([[system('Write-Output a b')]]))
|
||||
eq('C:\\\n', eval([[system('cd c:\; (Get-Location).Path')]]))
|
||||
@@ -177,12 +173,11 @@ describe('system()', function()
|
||||
end)
|
||||
end
|
||||
|
||||
it('works with powershell w/ UTF-8 text (#13713)', function()
|
||||
it('powershell w/ UTF-8 text #13713', function()
|
||||
if not helpers.has_powershell() then
|
||||
pending("not tested; powershell was not found", function() end)
|
||||
return
|
||||
end
|
||||
-- Should work with recommended config used in helper
|
||||
helpers.set_shell_powershell()
|
||||
eq('ああ\n', eval([[system('Write-Output "ああ"')]]))
|
||||
-- Sanity test w/ default encoding
|
||||
@@ -432,7 +427,7 @@ describe('system()', function()
|
||||
end)
|
||||
|
||||
it("with a program that doesn't close stdout will exit properly after passing input", function()
|
||||
local out = eval(string.format("system('%s', 'clip-data')", nvim_dir..'/streams-test'))
|
||||
local out = eval(string.format("system('%s', 'clip-data')", testprg('streams-test')))
|
||||
assert(out:sub(0, 5) == 'pid: ', out)
|
||||
os_kill(out:match("%d+"))
|
||||
end)
|
||||
@@ -611,17 +606,16 @@ describe('systemlist()', function()
|
||||
end)
|
||||
|
||||
it("with a program that doesn't close stdout will exit properly after passing input", function()
|
||||
local out = eval(string.format("systemlist('%s', 'clip-data')", nvim_dir..'/streams-test'))
|
||||
local out = eval(string.format("systemlist('%s', 'clip-data')", testprg('streams-test')))
|
||||
assert(out[1]:sub(0, 5) == 'pid: ', out)
|
||||
os_kill(out[1]:match("%d+"))
|
||||
end)
|
||||
|
||||
it('works with powershell w/ UTF-8 text (#13713)', function()
|
||||
it('powershell w/ UTF-8 text #13713', function()
|
||||
if not helpers.has_powershell() then
|
||||
pending("not tested; powershell was not found", function() end)
|
||||
return
|
||||
end
|
||||
-- Should work with recommended config used in helper
|
||||
helpers.set_shell_powershell()
|
||||
eq({iswin() and 'あ\r' or 'あ'}, eval([[systemlist('Write-Output あ')]]))
|
||||
-- Sanity test w/ default encoding
|
||||
@@ -633,28 +627,30 @@ describe('systemlist()', function()
|
||||
|
||||
end)
|
||||
|
||||
it(':{range}! works with powershell for filter and redirection #16271', function()
|
||||
clear()
|
||||
if not helpers.has_powershell() then
|
||||
pending("not tested; powershell was not found", function() end)
|
||||
return
|
||||
end
|
||||
local screen = Screen.new(500, 8)
|
||||
screen:attach()
|
||||
helpers.set_shell_powershell()
|
||||
insert([[
|
||||
3
|
||||
1
|
||||
4
|
||||
2]])
|
||||
feed(':4verbose %!sort<cr>')
|
||||
screen:expect{
|
||||
any=[[Executing command: "Start%-Process sort %-RedirectStandardInput .* %-RedirectStandardOutput .* %-NoNewWindow %-Wait".*4 lines filtered.*Press ENTER or type command to continue]]
|
||||
}
|
||||
feed('<CR>')
|
||||
expect([[
|
||||
1
|
||||
2
|
||||
3
|
||||
4]])
|
||||
describe('shell :!', function()
|
||||
before_each(clear)
|
||||
|
||||
it(':{range}! with powershell filter/redirect #16271', function()
|
||||
local screen = Screen.new(500, 8)
|
||||
screen:attach()
|
||||
local found = helpers.set_shell_powershell(true)
|
||||
insert([[
|
||||
3
|
||||
1
|
||||
4
|
||||
2]])
|
||||
feed(':4verbose %!sort<cr>')
|
||||
screen:expect{
|
||||
any=[[Executing command: .?Start%-Process sort %-RedirectStandardInput .* %-RedirectStandardOutput .* %-NoNewWindow %-Wait]]
|
||||
}
|
||||
feed('<CR>')
|
||||
if found then
|
||||
-- Not using fake powershell, so we can test the result.
|
||||
expect([[
|
||||
1
|
||||
2
|
||||
3
|
||||
4]])
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
Reference in New Issue
Block a user