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:
 | 
					Commands:
 | 
				
			||||||
  |:CheckHealth|
 | 
					  |:CheckHealth|
 | 
				
			||||||
 | 
					  |:drop| is available on all platforms
 | 
				
			||||||
  |:Man| is available by default, with many improvements such as completion
 | 
					  |:Man| is available by default, with many improvements such as completion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Functions:
 | 
					Functions:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,3 @@
 | 
				
			|||||||
-- Specs for
 | 
					 | 
				
			||||||
-- - `system()`
 | 
					 | 
				
			||||||
-- - `systemlist()`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local helpers = require('test.functional.helpers')(after_each)
 | 
					local helpers = require('test.functional.helpers')(after_each)
 | 
				
			||||||
local eq, clear, eval, feed, nvim =
 | 
					local eq, clear, eval, feed, nvim =
 | 
				
			||||||
  helpers.eq, helpers.clear, helpers.eval, helpers.feed, helpers.nvim
 | 
					  helpers.eq, helpers.clear, helpers.eval, helpers.feed, helpers.nvim
 | 
				
			||||||
@@ -120,12 +116,22 @@ describe('system()', function()
 | 
				
			|||||||
    it('returns the program output', function()
 | 
					    it('returns the program output', function()
 | 
				
			||||||
      eq("echoed", eval('system("echo -n echoed")'))
 | 
					      eq("echoed", eval('system("echo -n echoed")'))
 | 
				
			||||||
    end)
 | 
					    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)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('passing input', function()
 | 
					  describe('passing input', function()
 | 
				
			||||||
    it('returns the program output', function()
 | 
					    it('returns the program output', function()
 | 
				
			||||||
      eq("input", eval('system("cat -", "input")'))
 | 
					      eq("input", eval('system("cat -", "input")'))
 | 
				
			||||||
    end)
 | 
					    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)
 | 
					  end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('passing a lot of input', function()
 | 
					  describe('passing a lot of input', function()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user