aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/functional/helpers.lua38
-rw-r--r--test/functional/options/defaults_spec.lua169
-rw-r--r--third-party/cmake/BuildLuarocks.cmake2
3 files changed, 203 insertions, 6 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 02109d0889..6f43ec817c 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -216,17 +216,47 @@ local function merge_args(...)
return argv
end
-local function spawn(argv, merge)
- local child_stream = ChildProcessStream.spawn(merge and merge_args(prepend_argv, argv) or argv)
+local function spawn(argv, merge, env)
+ local child_stream = ChildProcessStream.spawn(
+ merge and merge_args(prepend_argv, argv) or argv,
+ env)
return Session.new(child_stream)
end
local function clear(...)
local args = {unpack(nvim_argv)}
- for _, arg in ipairs({...}) do
+ local new_args
+ local env = nil
+ local opts = select(1, ...)
+ if type(opts) == 'table' then
+ if opts.env then
+ local env_tbl = {}
+ for k, v in pairs(opts.env) do
+ assert(type(k) == 'string')
+ assert(type(v) == 'string')
+ env_tbl[k] = v
+ end
+ for _, k in ipairs({
+ 'HOME',
+ 'ASAN_OPTIONS',
+ 'LD_LIBRARY_PATH', 'PATH',
+ 'NVIM_LOG_FILE',
+ }) do
+ env_tbl[k] = os.getenv(k)
+ end
+ env = {}
+ for k, v in pairs(env_tbl) do
+ env[#env + 1] = k .. '=' .. v
+ end
+ end
+ new_args = opts.args or {}
+ else
+ new_args = {...}
+ end
+ for _, arg in ipairs(new_args) do
table.insert(args, arg)
end
- set_session(spawn(args))
+ set_session(spawn(args, nil, env))
end
local function insert(...)
diff --git a/test/functional/options/defaults_spec.lua b/test/functional/options/defaults_spec.lua
index 161791ab21..cc9944947b 100644
--- a/test/functional/options/defaults_spec.lua
+++ b/test/functional/options/defaults_spec.lua
@@ -1,7 +1,12 @@
local helpers = require('test.functional.helpers')(after_each)
+
local Screen = require('test.functional.ui.screen')
-local eval, eq = helpers.eval, helpers.eq
+
+local meths = helpers.meths
local execute = helpers.execute
+local clear = helpers.clear
+local eval = helpers.eval
+local eq = helpers.eq
local function init_session(...)
local args = { helpers.nvim_prog, '-i', 'NONE', '--embed',
@@ -76,3 +81,165 @@ describe('startup defaults', function()
end)
end)
end)
+
+describe('XDG-based defaults', function()
+ -- Need to be in separate describe() block to not run clear() twice.
+ -- Do not put before_each() here for the same reasons.
+ describe('with too long XDG variables', function()
+ before_each(function()
+ clear({env={
+ XDG_CONFIG_HOME=('/x'):rep(4096),
+ XDG_CONFIG_DIRS=(('/a'):rep(2048)
+ .. ':' .. ('/b'):rep(2048)
+ .. (':/c'):rep(512)),
+ XDG_DATA_HOME=('/X'):rep(4096),
+ XDG_DATA_DIRS=(('/A'):rep(2048)
+ .. ':' .. ('/B'):rep(2048)
+ .. (':/C'):rep(512)),
+ }})
+ end)
+
+ it('are correctly set', function()
+ eq((('/x'):rep(4096) .. '/nvim'
+ .. ',' .. ('/a'):rep(2048) .. '/nvim'
+ .. ',' .. ('/b'):rep(2048) .. '/nvim'
+ .. (',' .. '/c/nvim'):rep(512)
+ .. ',' .. ('/X'):rep(4096) .. '/nvim/site'
+ .. ',' .. ('/A'):rep(2048) .. '/nvim/site'
+ .. ',' .. ('/B'):rep(2048) .. '/nvim/site'
+ .. (',' .. '/C/nvim/site'):rep(512)
+ .. ',' .. eval('$VIMRUNTIME')
+ .. (',' .. '/C/nvim/site/after'):rep(512)
+ .. ',' .. ('/B'):rep(2048) .. '/nvim/site/after'
+ .. ',' .. ('/A'):rep(2048) .. '/nvim/site/after'
+ .. ',' .. ('/X'):rep(4096) .. '/nvim/site/after'
+ .. (',' .. '/c/nvim/after'):rep(512)
+ .. ',' .. ('/b'):rep(2048) .. '/nvim/after'
+ .. ',' .. ('/a'):rep(2048) .. '/nvim/after'
+ .. ',' .. ('/x'):rep(4096) .. '/nvim/after'
+ ), meths.get_option('runtimepath'))
+ meths.command('set runtimepath&')
+ meths.command('set backupdir&')
+ meths.command('set directory&')
+ meths.command('set undodir&')
+ meths.command('set viewdir&')
+ eq((('/x'):rep(4096) .. '/nvim'
+ .. ',' .. ('/a'):rep(2048) .. '/nvim'
+ .. ',' .. ('/b'):rep(2048) .. '/nvim'
+ .. (',' .. '/c/nvim'):rep(512)
+ .. ',' .. ('/X'):rep(4096) .. '/nvim/site'
+ .. ',' .. ('/A'):rep(2048) .. '/nvim/site'
+ .. ',' .. ('/B'):rep(2048) .. '/nvim/site'
+ .. (',' .. '/C/nvim/site'):rep(512)
+ .. ',' .. eval('$VIMRUNTIME')
+ .. (',' .. '/C/nvim/site/after'):rep(512)
+ .. ',' .. ('/B'):rep(2048) .. '/nvim/site/after'
+ .. ',' .. ('/A'):rep(2048) .. '/nvim/site/after'
+ .. ',' .. ('/X'):rep(4096) .. '/nvim/site/after'
+ .. (',' .. '/c/nvim/after'):rep(512)
+ .. ',' .. ('/b'):rep(2048) .. '/nvim/after'
+ .. ',' .. ('/a'):rep(2048) .. '/nvim/after'
+ .. ',' .. ('/x'):rep(4096) .. '/nvim/after'
+ ), meths.get_option('runtimepath'))
+ eq('.,' .. ('/X'):rep(4096) .. '/nvim/backup',
+ meths.get_option('backupdir'))
+ eq(('/X'):rep(4096) .. '/nvim/swap//', meths.get_option('directory'))
+ eq(('/X'):rep(4096) .. '/nvim/undo', meths.get_option('undodir'))
+ eq(('/X'):rep(4096) .. '/nvim/view', meths.get_option('viewdir'))
+ end)
+ end)
+
+ describe('with XDG variables that can be expanded', function()
+ before_each(function()
+ clear({env={
+ XDG_CONFIG_HOME='$XDG_DATA_HOME',
+ XDG_CONFIG_DIRS='$XDG_DATA_DIRS',
+ XDG_DATA_HOME='$XDG_CONFIG_HOME',
+ XDG_DATA_DIRS='$XDG_CONFIG_DIRS',
+ }})
+ end)
+
+ it('are not expanded', function()
+ eq(('$XDG_DATA_HOME/nvim'
+ .. ',$XDG_DATA_DIRS/nvim'
+ .. ',$XDG_CONFIG_HOME/nvim/site'
+ .. ',$XDG_CONFIG_DIRS/nvim/site'
+ .. ',' .. eval('$VIMRUNTIME')
+ .. ',$XDG_CONFIG_DIRS/nvim/site/after'
+ .. ',$XDG_CONFIG_HOME/nvim/site/after'
+ .. ',$XDG_DATA_DIRS/nvim/after'
+ .. ',$XDG_DATA_HOME/nvim/after'
+ ), meths.get_option('runtimepath'))
+ meths.command('set runtimepath&')
+ meths.command('set backupdir&')
+ meths.command('set directory&')
+ meths.command('set undodir&')
+ meths.command('set viewdir&')
+ eq(('$XDG_DATA_HOME/nvim'
+ .. ',$XDG_DATA_DIRS/nvim'
+ .. ',$XDG_CONFIG_HOME/nvim/site'
+ .. ',$XDG_CONFIG_DIRS/nvim/site'
+ .. ',' .. eval('$VIMRUNTIME')
+ .. ',$XDG_CONFIG_DIRS/nvim/site/after'
+ .. ',$XDG_CONFIG_HOME/nvim/site/after'
+ .. ',$XDG_DATA_DIRS/nvim/after'
+ .. ',$XDG_DATA_HOME/nvim/after'
+ ), meths.get_option('runtimepath'))
+ eq('.,$XDG_CONFIG_HOME/nvim/backup', meths.get_option('backupdir'))
+ eq('$XDG_CONFIG_HOME/nvim/swap//', meths.get_option('directory'))
+ eq('$XDG_CONFIG_HOME/nvim/undo', meths.get_option('undodir'))
+ eq('$XDG_CONFIG_HOME/nvim/view', meths.get_option('viewdir'))
+ end)
+ end)
+
+ describe('with commas', function()
+ before_each(function()
+ clear({env={
+ XDG_CONFIG_HOME=', , ,',
+ XDG_CONFIG_DIRS=',-,-,:-,-,-',
+ XDG_DATA_HOME=',=,=,',
+ XDG_DATA_DIRS=',≡,≡,:≡,≡,≡',
+ }})
+ end)
+
+ it('are escaped properly', function()
+ eq(('\\, \\, \\,/nvim'
+ .. ',\\,-\\,-\\,/nvim'
+ .. ',-\\,-\\,-/nvim'
+ .. ',\\,=\\,=\\,/nvim/site'
+ .. ',\\,≡\\,≡\\,/nvim/site'
+ .. ',≡\\,≡\\,≡/nvim/site'
+ .. ',' .. eval('$VIMRUNTIME')
+ .. ',≡\\,≡\\,≡/nvim/site/after'
+ .. ',\\,≡\\,≡\\,/nvim/site/after'
+ .. ',\\,=\\,=\\,/nvim/site/after'
+ .. ',-\\,-\\,-/nvim/after'
+ .. ',\\,-\\,-\\,/nvim/after'
+ .. ',\\, \\, \\,/nvim/after'
+ ), meths.get_option('runtimepath'))
+ meths.command('set runtimepath&')
+ meths.command('set backupdir&')
+ meths.command('set directory&')
+ meths.command('set undodir&')
+ meths.command('set viewdir&')
+ eq(('\\, \\, \\,/nvim'
+ .. ',\\,-\\,-\\,/nvim'
+ .. ',-\\,-\\,-/nvim'
+ .. ',\\,=\\,=\\,/nvim/site'
+ .. ',\\,≡\\,≡\\,/nvim/site'
+ .. ',≡\\,≡\\,≡/nvim/site'
+ .. ',' .. eval('$VIMRUNTIME')
+ .. ',≡\\,≡\\,≡/nvim/site/after'
+ .. ',\\,≡\\,≡\\,/nvim/site/after'
+ .. ',\\,=\\,=\\,/nvim/site/after'
+ .. ',-\\,-\\,-/nvim/after'
+ .. ',\\,-\\,-\\,/nvim/after'
+ .. ',\\, \\, \\,/nvim/after'
+ ), meths.get_option('runtimepath'))
+ eq('.,\\,=\\,=\\,/nvim/backup', meths.get_option('backupdir'))
+ eq('\\,=\\,=\\,/nvim/swap//', meths.get_option('directory'))
+ eq('\\,=\\,=\\,/nvim/undo', meths.get_option('undodir'))
+ eq('\\,=\\,=\\,/nvim/view', meths.get_option('viewdir'))
+ end)
+ end)
+end)
diff --git a/third-party/cmake/BuildLuarocks.cmake b/third-party/cmake/BuildLuarocks.cmake
index 069c94ea2e..2d6df76d02 100644
--- a/third-party/cmake/BuildLuarocks.cmake
+++ b/third-party/cmake/BuildLuarocks.cmake
@@ -152,7 +152,7 @@ if(USE_BUNDLED_BUSTED)
add_custom_command(OUTPUT ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client
COMMAND ${LUAROCKS_BINARY}
- ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-24/nvim-client-0.0.1-24.rockspec ${LUAROCKS_BUILDARGS}
+ ARGS build https://raw.githubusercontent.com/neovim/lua-client/0.0.1-25/nvim-client-0.0.1-25.rockspec ${LUAROCKS_BUILDARGS}
DEPENDS luv)
add_custom_target(nvim-client
DEPENDS ${HOSTDEPS_LIB_DIR}/luarocks/rocks/nvim-client)