aboutsummaryrefslogtreecommitdiff
path: root/test/functional/shell/viml_system_spec.lua
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-11-10 09:19:27 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-11-10 18:47:46 -0300
commit3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d (patch)
tree888527c926d8117c21d291311e34f271614cf66f /test/functional/shell/viml_system_spec.lua
parentab826d88f69a3cc2785baa6367d3bd01dbb84627 (diff)
downloadrneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.tar.gz
rneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.tar.bz2
rneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.zip
shell: Use job_write_cb for closing stdin
Commit @45525853d352 removed usage of the `job_write_cb` for closing stdin due to a memory error, but that doesn't work anymore because `job_close_in` closes stdin immediately, possibly trimming input data before it is fully written. Since most memory issues with jobs have been fixed, re-add the `job_write_cb` call to ensure stdin is only closed when it should. Also add tests for scenarios where using the callback makes a difference.
Diffstat (limited to 'test/functional/shell/viml_system_spec.lua')
-rw-r--r--test/functional/shell/viml_system_spec.lua30
1 files changed, 28 insertions, 2 deletions
diff --git a/test/functional/shell/viml_system_spec.lua b/test/functional/shell/viml_system_spec.lua
index b36b4691b9..91e115aedf 100644
--- a/test/functional/shell/viml_system_spec.lua
+++ b/test/functional/shell/viml_system_spec.lua
@@ -3,8 +3,8 @@
-- - `systemlist()`
local helpers = require('test.functional.helpers')
-local eq, clear, eval, feed =
- helpers.eq, helpers.clear, helpers.eval, helpers.feed
+local eq, clear, eval, feed, nvim =
+ helpers.eq, helpers.clear, helpers.eval, helpers.feed, helpers.nvim
local function create_file_with_nuls(name)
@@ -55,6 +55,21 @@ describe('system()', function()
end)
end)
+ describe('passing a lot of input', function()
+ it('returns the program output', function()
+ local input = {}
+ -- write more than 1mb of data, which should be enough to overcome
+ -- the os buffer limit and force multiple event loop iterations to write
+ -- everything
+ for i = 1, 0xffff do
+ input[#input + 1] = '01234567890ABCDEFabcdef'
+ end
+ input = table.concat(input, '\n')
+ nvim('set_var', 'input', input)
+ eq(input, eval('system("cat -", g:input)'))
+ end)
+ end)
+
describe('passing number as input', function()
it('stringifies the input', function()
eq('1', eval('system("cat", 1)'))
@@ -129,6 +144,17 @@ describe('systemlist()', function()
end)
end)
+ describe('passing a lot of input', function()
+ it('returns the program output', function()
+ local input = {}
+ for i = 1, 0xffff do
+ input[#input + 1] = '01234567890ABCDEFabcdef'
+ end
+ nvim('set_var', 'input', input)
+ eq(input, eval('systemlist("cat -", g:input)'))
+ end)
+ end)
+
describe('with output containing NULs', function()
local fname = 'Xtest'