mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	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:
		@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
		Reference in New Issue
	
	Block a user