test: system(): backgrounded shell command

These tests are essentially affirming a regression vs Vim. In Vim,
    :echo system('cat - &', 'foo')
returns "foo", because Vim internally wraps the command with shell-specific
syntax to redirect the streams from /dev/null[1].

That can't work in Nvim because we use pipes directly (instead of temp files)
and don't wrap the command with shell-specific redirection syntax.

References #3529
References #5241

[1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_03_02
This commit is contained in:
Justin M. Keyes 2016-10-17 23:56:39 +02:00
parent 657ba62a84
commit 16da3a6fe0
4 changed files with 11 additions and 4 deletions

View File

@ -108,6 +108,7 @@ Options:
Commands:
|:CheckHealth|
|:drop| is available on all platforms
|:Man| is available by default, with many improvements such as completion
Functions:

View File

@ -1,7 +1,3 @@
-- Specs for
-- - `system()`
-- - `systemlist()`
local helpers = require('test.functional.helpers')(after_each)
local eq, clear, eval, feed, nvim =
helpers.eq, helpers.clear, helpers.eval, helpers.feed, helpers.nvim
@ -120,12 +116,22 @@ describe('system()', function()
it('returns the program output', function()
eq("echoed", eval('system("echo -n echoed")'))
end)
it('to backgrounded command does not crash', function()
-- This is indeterminate, just exercise the codepath.
eval('system("echo -n echoed &")')
eq(2, eval("1+1")) -- Still alive?
end)
end)
describe('passing input', function()
it('returns the program output', function()
eq("input", eval('system("cat -", "input")'))
end)
it('to backgrounded command does not crash', function()
-- This is indeterminate, just exercise the codepath.
eval('system("cat - &", "input")')
eq(2, eval("1+1")) -- Still alive?
end)
end)
describe('passing a lot of input', function()